Author: thomas.diesler(a)jboss.com
Date: 2006-12-14 09:18:16 -0500 (Thu, 14 Dec 2006)
New Revision: 1648
Modified:
trunk/build.xml
trunk/src/main/java/javax/xml/soap/SOAPFactory.java
trunk/src/main/java/org/jboss/ws/Constants.java
trunk/src/main/java/org/jboss/ws/core/CommonSOAP11Binding.java
trunk/src/main/java/org/jboss/ws/core/CommonSOAP12Binding.java
trunk/src/main/java/org/jboss/ws/core/jaxrpc/SOAPFaultHelperJAXRPC.java
trunk/src/main/java/org/jboss/ws/core/jaxrpc/binding/SOAPElementDeserializer.java
trunk/src/main/java/org/jboss/ws/core/jaxws/SOAPFaultHelperJAXWS.java
trunk/src/main/java/org/jboss/ws/core/jaxws/binding/PayloadBinding.java
trunk/src/main/java/org/jboss/ws/core/soap/DetailEntryImpl.java
trunk/src/main/java/org/jboss/ws/core/soap/JAXWSPayloadBuilder.java
trunk/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java
trunk/src/main/java/org/jboss/ws/core/soap/NodeImpl.java
trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderDOM.java
trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderStax.java
trunk/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java
trunk/src/main/java/org/jboss/ws/core/soap/SOAPContentElement.java
trunk/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java
trunk/src/main/java/org/jboss/ws/core/soap/SOAPFactoryImpl.java
trunk/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java
trunk/src/main/java/org/jboss/ws/core/soap/SOAPPartImpl.java
trunk/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java
trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDLWriter.java
trunk/src/test/java/org/jboss/test/ws/jaxws/exception/ExceptionEndpointImpl.java
Log:
Implement SAAJ-1.3 SOAPFactory methods
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2006-12-14 13:42:11 UTC (rev 1647)
+++ trunk/build.xml 2006-12-14 14:18:16 UTC (rev 1648)
@@ -287,6 +287,7 @@
<include name="wstools.bat"/>
<include name="wstools-log4j.xml"/>
</fileset>
+ <metainf dir="${build.resources.dir}/jboss-saaj.jar/META-INF"/>
</jar>
<!-- Build jbossws-context.war -->
Modified: trunk/src/main/java/javax/xml/soap/SOAPFactory.java
===================================================================
--- trunk/src/main/java/javax/xml/soap/SOAPFactory.java 2006-12-14 13:42:11 UTC (rev
1647)
+++ trunk/src/main/java/javax/xml/soap/SOAPFactory.java 2006-12-14 14:18:16 UTC (rev
1648)
@@ -23,11 +23,9 @@
// $Id$
-import java.security.PrivilegedAction;
-
import javax.xml.namespace.QName;
-import org.jboss.util.NotImplementedException;
+import org.w3c.dom.Element;
/** SOAPFactory is a factory for creating various objects that exist in the SOAP XML
tree.
*
@@ -42,6 +40,8 @@
*/
public abstract class SOAPFactory
{
+ private static SOAPFactory soapFactory;
+
/**
* Creates a new SOAPFactory object that is an instance of the default implementation
(SOAP 1.1),
* This method uses the following ordered lookup procedure to determine the
SOAPFactory implementation class to load:
@@ -56,20 +56,22 @@
*/
public static SOAPFactory newInstance() throws SOAPException
{
- String propertyName = "javax.xml.soap.SOAPFactory";
- SOAPFactory factory = (SOAPFactory)FactoryLoader.loadFactory(propertyName, null);
-
- // Use the SAAJMetaFactory instance to locate the MessageFactory implementation
class.
- if (factory == null)
+ if (soapFactory == null)
{
- SAAJMetaFactory saajFactory = SAAJMetaFactory.getInstance();
- factory = saajFactory.newSOAPFactory(SOAPConstants.DYNAMIC_SOAP_PROTOCOL);
+ String propertyName = "javax.xml.soap.SOAPFactory";
+ soapFactory = (SOAPFactory)FactoryLoader.loadFactory(propertyName, null);
+
+ // Use the SAAJMetaFactory instance to locate the MessageFactory implementation
class.
+ if (soapFactory == null)
+ {
+ SAAJMetaFactory saajFactory = SAAJMetaFactory.getInstance();
+ soapFactory =
saajFactory.newSOAPFactory(SOAPConstants.DYNAMIC_SOAP_PROTOCOL);
+ }
+
+ if (soapFactory == null)
+ throw new SOAPException("Failed to to determine the SOAPFactory
implementation class");
}
-
- if (factory == null)
- throw new SOAPException("Failed to to determine the SOAPFactory
implementation class");
-
- return factory;
+ return soapFactory;
}
@@ -84,8 +86,13 @@
*/
public static SOAPFactory newInstance(String protocol) throws SOAPException
{
- //TODO: SAAJ 1.3
- throw new NotImplementedException();
+ SAAJMetaFactory saajFactory = SAAJMetaFactory.getInstance();
+ SOAPFactory factory =
saajFactory.newSOAPFactory(SOAPConstants.DYNAMIC_SOAP_PROTOCOL);
+
+ if (factory == null)
+ throw new SOAPException("Failed to to determine the SOAPFactory
implementation class");
+
+ return factory;
}
/** Creates a new Detail object which serves as a container for DetailEntry objects.
@@ -107,11 +114,7 @@
* @throws SOAPException if there is an error in creating the SOAPElement object
* @since SAAJ 1.3
*/
- public SOAPElement createElement(org.w3c.dom.Element domElement) throws SOAPException
- {
- //TODO: SAAJ 1.3
- throw new NotImplementedException();
- }
+ public abstract SOAPElement createElement(Element domElement) throws SOAPException;
/** Create a SOAPElement object initialized with the given local name.
*
@@ -149,11 +152,7 @@
* @throws SOAPException if there is an error in creating the SOAPElement object
* @since SAAJ 1.3
*/
- public SOAPElement createElement(QName qname) throws SOAPException
- {
- //TODO: SAAJ 1.3
- throw new NotImplementedException();
- }
+ public abstract SOAPElement createElement(QName qname) throws SOAPException;
/**
* Creates a new SOAPFault object initialized with the given reasonText and
faultCode
@@ -193,21 +192,4 @@
* @throws SOAPException if there is a SOAP error
*/
public abstract Name createName(String localName, String prefix, String uri) throws
SOAPException;
-
- private static class PropertyAccessAction implements PrivilegedAction
- {
- private String name;
- private String defaultValue;
-
- PropertyAccessAction(String name, String defaultValue)
- {
- this.name = name;
- this.defaultValue = defaultValue;
- }
-
- public Object run()
- {
- return System.getProperty(name, defaultValue);
- }
- }
}
Modified: trunk/src/main/java/org/jboss/ws/Constants.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/Constants.java 2006-12-14 13:42:11 UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/Constants.java 2006-12-14 14:18:16 UTC (rev 1648)
@@ -104,10 +104,9 @@
static final String DOCUMENT_LITERAL = "Document/Literal";
// Some prefixes
- static final String PREFIX_ENV = "env";
+ static final String PREFIX_ENV = SOAPConstants.SOAP_ENV_PREFIX;
static final String PREFIX_XMIME = "xmime";
static final String PREFIX_SOAP11 = "soap";
- static final String PREFIX_SOAP12 = "soap12";
static final String PREFIX_SOAP11_ENC = "soap11-enc";
static final String PREFIX_TNS = "tns";
static final String PREFIX_WSDL = "wsdl";
Modified: trunk/src/main/java/org/jboss/ws/core/CommonSOAP11Binding.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/CommonSOAP11Binding.java 2006-12-14 13:42:11 UTC
(rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/CommonSOAP11Binding.java 2006-12-14 14:18:16 UTC
(rev 1648)
@@ -48,7 +48,7 @@
protected SOAPMessage createMessage(OperationMetaData opMetaData) throws
SOAPException
{
MessageFactoryImpl factory = new MessageFactoryImpl();
- factory.setEnvelopeURI(Constants.NS_SOAP11_ENV);
+ factory.setEnvNamespace(Constants.NS_SOAP11_ENV);
SOAPMessage soapMessage = factory.createMessage();
Use encStyle = opMetaData.getEndpointMetaData().getEncodingStyle();
Modified: trunk/src/main/java/org/jboss/ws/core/CommonSOAP12Binding.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/CommonSOAP12Binding.java 2006-12-14 13:42:11 UTC
(rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/CommonSOAP12Binding.java 2006-12-14 14:18:16 UTC
(rev 1648)
@@ -47,7 +47,7 @@
protected SOAPMessage createMessage(OperationMetaData opMetaData) throws
SOAPException
{
MessageFactoryImpl factory = new MessageFactoryImpl();
- factory.setEnvelopeURI(Constants.NS_SOAP12_ENV);
+ factory.setEnvNamespace(Constants.NS_SOAP12_ENV);
return factory.createMessage();
}
}
Modified: trunk/src/main/java/org/jboss/ws/core/jaxrpc/SOAPFaultHelperJAXRPC.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/jaxrpc/SOAPFaultHelperJAXRPC.java 2006-12-14
13:42:11 UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/jaxrpc/SOAPFaultHelperJAXRPC.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -264,7 +264,7 @@
SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
Element domElement = DOMUtils.parse(xmlFragment);
- SOAPElement soapElement = soapFactory.createElement(domElement, true);
+ SOAPElement soapElement = soapFactory.createElement(domElement);
detail = soapFault.addDetail();
detail.addChildElement(soapElement);
Modified:
trunk/src/main/java/org/jboss/ws/core/jaxrpc/binding/SOAPElementDeserializer.java
===================================================================
---
trunk/src/main/java/org/jboss/ws/core/jaxrpc/binding/SOAPElementDeserializer.java 2006-12-14
13:42:11 UTC (rev 1647)
+++
trunk/src/main/java/org/jboss/ws/core/jaxrpc/binding/SOAPElementDeserializer.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -1,41 +1,35 @@
/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
-*/
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
package org.jboss.ws.core.jaxrpc.binding;
// $Id$
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPFactory;
import org.jboss.logging.Logger;
-import org.jboss.ws.core.jaxrpc.binding.BindingException;
-import org.jboss.ws.core.jaxrpc.binding.DeserializerSupport;
-import org.jboss.ws.core.jaxrpc.binding.SerializationContext;
+import org.jboss.ws.core.soap.SOAPFactoryImpl;
import org.jboss.ws.core.utils.DOMUtils;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
/**
* A deserializer that can handle xsd:anyType
@@ -47,14 +41,14 @@
{
// provide logging
private static final Logger log = Logger.getLogger(SOAPElementDeserializer.class);
-
+
public Object deserialize(QName xmlName, QName xmlType, String xmlFragment,
SerializationContext serContext) throws BindingException
{
log.debug("deserialize: [xmlName=" + xmlName + ",xmlType=" +
xmlType + "]");
try
{
Element domElement = DOMUtils.parse(xmlFragment);
- SOAPElement soapElement = createElement(domElement, true);
+ SOAPElement soapElement = new SOAPFactoryImpl().createElement(domElement);
return soapElement;
}
catch (RuntimeException rte)
@@ -66,56 +60,4 @@
throw new BindingException();
}
}
-
- /**
- * Create a SOAPElement from a DOM Element.
- * This method is not part of the javax.xml.soap.SOAPFactory interface.
- */
- public SOAPElement createElement(Element domNode, boolean deep) throws SOAPException
- {
- if (domNode == null)
- throw new IllegalArgumentException("Source node cannot be null");
-
- String localName = domNode.getLocalName();
- String prefix = domNode.getPrefix() != null ? domNode.getPrefix() : "";
- String nsURI = domNode.getNamespaceURI() != null ? domNode.getNamespaceURI() :
"";
-
- SOAPFactory factory = SOAPFactory.newInstance();
- SOAPElement soapElement = factory.createElement(localName, prefix, nsURI);
-
- // Add the child elements as well
- if (deep)
- {
- if (domNode instanceof Element)
- DOMUtils.copyAttributes(soapElement, (Element)domNode);
-
- NodeList nlist = domNode.getChildNodes();
- for (int i = 0; i < nlist.getLength(); i++)
- {
- Node child = nlist.item(i);
- short nodeType = child.getNodeType();
- if (nodeType == Node.ELEMENT_NODE)
- {
- SOAPElement soapChild = createElement((Element)child, true);
- soapElement.addChildElement(soapChild);
- }
- else if (nodeType == Node.TEXT_NODE)
- {
- String nodeValue = child.getNodeValue();
- soapElement.addTextNode(nodeValue);
- }
- else if (nodeType == Node.CDATA_SECTION_NODE)
- {
- String nodeValue = child.getNodeValue();
- soapElement.addTextNode(nodeValue);
- }
- else
- {
- log.trace("Ignore child type: " + nodeType);
- }
- }
- }
-
- return soapElement;
- }
}
Modified: trunk/src/main/java/org/jboss/ws/core/jaxws/SOAPFaultHelperJAXWS.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/jaxws/SOAPFaultHelperJAXWS.java 2006-12-14
13:42:11 UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/jaxws/SOAPFaultHelperJAXWS.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -489,7 +489,7 @@
SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
Element domElement = DOMUtils.parse(xmlFragment);
- return soapFactory.createElement(domElement, true);
+ return soapFactory.createElement(domElement);
}
catch (BindingException e)
{
Modified: trunk/src/main/java/org/jboss/ws/core/jaxws/binding/PayloadBinding.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/jaxws/binding/PayloadBinding.java 2006-12-14
13:42:11 UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/jaxws/binding/PayloadBinding.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -111,7 +111,7 @@
// Associate current message with message context
MessageFactoryImpl factory = new MessageFactoryImpl();
- factory.setEnvelopeURI(Constants.NS_SOAP11_ENV);
+ factory.setEnvNamespace(Constants.NS_SOAP11_ENV);
SOAPMessageImpl resMessage = (SOAPMessageImpl)factory.createMessage();
msgContext.setMessage(resMessage);
Modified: trunk/src/main/java/org/jboss/ws/core/soap/DetailEntryImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/DetailEntryImpl.java 2006-12-14 13:42:11
UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/DetailEntryImpl.java 2006-12-14 14:18:16
UTC (rev 1648)
@@ -24,6 +24,7 @@
import javax.xml.namespace.QName;
import javax.xml.soap.DetailEntry;
import javax.xml.soap.Name;
+import javax.xml.soap.SOAPElement;
/**
* The content for a Detail object, giving details for a SOAPFault object.
@@ -44,8 +45,8 @@
super(qname);
}
- public DetailEntryImpl(SOAPElementImpl soapElement)
+ public DetailEntryImpl(SOAPElement soapElement)
{
- super(soapElement);
+ super((SOAPElementImpl)soapElement);
}
}
Modified: trunk/src/main/java/org/jboss/ws/core/soap/JAXWSPayloadBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/JAXWSPayloadBuilder.java 2006-12-14
13:42:11 UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/JAXWSPayloadBuilder.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -64,7 +64,6 @@
}
String envNS = domEnv.getNamespaceURI();
- String envPrefix = domEnv.getPrefix();
// Construct the envelope
SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
Modified: trunk/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java 2006-12-14 13:42:11
UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java 2006-12-14 14:18:16
UTC (rev 1648)
@@ -57,8 +57,8 @@
{
private static Logger log = Logger.getLogger(MessageFactoryImpl.class);
- // The envelope URI used by the MessageFactory
- private String envelopeURI;
+ // The envelope namespace used by the MessageFactory
+ private String envNamespace;
// The JAXWS ServiceMode
private Mode serviceMode;
@@ -67,31 +67,31 @@
public MessageFactoryImpl()
{
- envelopeURI = SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE;
+ envNamespace = SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE;
}
public MessageFactoryImpl(String protocol)
{
if (SOAPConstants.SOAP_1_2_PROTOCOL.equals(protocol))
- envelopeURI = SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
+ envNamespace = SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
else
- envelopeURI = SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE;
+ envNamespace = SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE;
}
/**
* Get the SOAP envelope URI this factory will use when creating envelopes.
*/
- public String getEnvelopeURI()
+ public String getEnvNamespace()
{
- return envelopeURI;
+ return envNamespace;
}
/**
* Set the SOAP envelope URI this factory will use when creating envelopes.
*/
- public void setEnvelopeURI(String envelopeURI)
+ public void setEnvNamespace(String envelopeURI)
{
- this.envelopeURI = envelopeURI;
+ this.envNamespace = envelopeURI;
}
/**
@@ -146,7 +146,7 @@
{
SOAPMessageImpl soapMessage = new SOAPMessageImpl();
SOAPPartImpl soapPart = (SOAPPartImpl)soapMessage.getSOAPPart();
- new SOAPEnvelopeImpl(soapPart, envelopeURI);
+ new SOAPEnvelopeImpl(soapPart, envNamespace);
return soapMessage;
}
Modified: trunk/src/main/java/org/jboss/ws/core/soap/NodeImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/NodeImpl.java 2006-12-14 13:42:11 UTC (rev
1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/NodeImpl.java 2006-12-14 14:18:16 UTC (rev
1648)
@@ -219,7 +219,7 @@
{
case Node.ELEMENT_NODE:
{
- SOAPElementImpl soapChild = soapFactory.createElement((Element)node,
true);
+ SOAPElementImpl soapChild =
(SOAPElementImpl)soapFactory.createElement((Element)node);
list.add(soapChild);
break;
}
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderDOM.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderDOM.java 2006-12-14
13:42:11 UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderDOM.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -130,7 +130,7 @@
// Process a <env:Fault> message
if (beName.equals(new NameImpl("Fault", envPrefix, envNS)))
{
- SOAPFaultImpl soapFault = new SOAPFaultImpl(envNS);
+ SOAPFaultImpl soapFault = new SOAPFaultImpl(envPrefix, envNS);
soapBody.addChildElement(soapFault);
DOMUtils.copyAttributes(soapFault, domBodyElement);
@@ -165,7 +165,7 @@
while (it.hasNext())
{
Element domElement = (Element)it.next();
- SOAPElement detailEntry = new
DetailEntryImpl(soapFactory.createElement(domElement, true));
+ SOAPElement detailEntry = new
DetailEntryImpl(soapFactory.createElement(domElement));
detailEntry = detail.addChildElement(detailEntry);
}
}
@@ -224,7 +224,7 @@
short childType = child.getNodeType();
if (childType == org.w3c.dom.Node.ELEMENT_NODE)
{
- SOAPElement soapElement = soapFactory.createElement((Element)child,
true);
+ SOAPElement soapElement =
soapFactory.createElement((Element)child);
soapBodyElement.addChildElement(soapElement);
}
else if (childType == org.w3c.dom.Node.TEXT_NODE)
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderStax.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderStax.java 2006-12-14
13:42:11 UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SAAJPayloadBuilderStax.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -313,7 +313,7 @@
if (atPartMargin())
{
SOAPBody soapBody = soapEnv.getBody();
- SOAPFaultImpl soapFault = new SOAPFaultImpl(soapEnv.getNamespaceURI());
+ SOAPFaultImpl soapFault = new SOAPFaultImpl(soapEnv.getPrefix(),
soapEnv.getNamespaceURI());
soapBody.addChildElement(soapFault);
destElement = soapFault;
previousPart = Part.FAULT;
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java 2006-12-14 13:42:11 UTC
(rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java 2006-12-14 14:18:16 UTC
(rev 1648)
@@ -136,14 +136,14 @@
SOAPBodyElement child = new SOAPBodyElementDoc(qname);
return (SOAPBodyElement)addChildElement(child);
}
-
+
public SOAPBodyElement addDocument(Document doc) throws SOAPException
{
log.trace("addDocument");
expandToDOM();
Element rootElement = doc.getDocumentElement();
SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
- SOAPElementImpl soapElement = soapFactory.createElement(rootElement, true);
+ SOAPElement soapElement = soapFactory.createElement(rootElement);
return (SOAPBodyElement)addChildElement(soapElement);
}
@@ -164,7 +164,7 @@
if (hasFault())
throw new SOAPException("A SOAPBody may contain at most one SOAPFault child
element");
- SOAPFaultImpl soapFault = new SOAPFaultImpl(getNamespaceURI());
+ SOAPFaultImpl soapFault = new SOAPFaultImpl(getPrefix(), getNamespaceURI());
soapFault = (SOAPFaultImpl)addChildElement(soapFault);
soapFault.setFaultCode(faultCode);
soapFault.setFaultString(faultString);
@@ -178,7 +178,7 @@
if (hasFault())
throw new SOAPException("A SOAPBody may contain at most one SOAPFault child
element");
- SOAPFaultImpl soapFault = new SOAPFaultImpl(getNamespaceURI());
+ SOAPFaultImpl soapFault = new SOAPFaultImpl(getPrefix(), getNamespaceURI());
soapFault = (SOAPFaultImpl)addChildElement(soapFault);
soapFault.setFaultCode(faultCode);
soapFault.setFaultString(faultString);
@@ -192,7 +192,7 @@
if (hasFault())
throw new SOAPException("A SOAPBody may contain at most one SOAPFault child
element");
- SOAPFaultImpl soapFault = new SOAPFaultImpl(getNamespaceURI());
+ SOAPFaultImpl soapFault = new SOAPFaultImpl(getPrefix(), getNamespaceURI());
soapFault.setFaultCode(faultCode);
soapFault.setFaultString(faultString, locale);
addChildElement(soapFault);
@@ -206,7 +206,7 @@
if (hasFault())
throw new SOAPException("A SOAPBody may contain at most one SOAPFault child
element");
- SOAPFaultImpl soapFault = new SOAPFaultImpl(getNamespaceURI());
+ SOAPFaultImpl soapFault = new SOAPFaultImpl(getPrefix(), getNamespaceURI());
soapFault.setFaultCode(faultCode);
soapFault.setFaultString(faultString, locale);
addChildElement(soapFault);
@@ -336,7 +336,7 @@
{
Element child = getBodyElementFromSource();
SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
- addChildElement(soapFactory.createElement(child, true));
+ addChildElement(soapFactory.createElement(child));
payload = null;
}
catch (RuntimeException rte)
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SOAPContentElement.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SOAPContentElement.java 2006-12-14 13:42:11
UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SOAPContentElement.java 2006-12-14 14:18:16
UTC (rev 1648)
@@ -869,7 +869,7 @@
short childType = child.getNodeType();
if (childType == Node.ELEMENT_NODE)
{
- SOAPElementImpl soapElement =
soapFactory.createElement((Element)child, true);
+ SOAPElement soapElement =
soapFactory.createElement((Element)child);
super.addChildElement(soapElement);
if (Constants.NAME_XOP_INCLUDE.equals(name) || isXOPParameter())
XOPContext.inlineXOPData(soapElement);
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java 2006-12-14 13:42:11
UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java 2006-12-14 14:18:16
UTC (rev 1648)
@@ -51,13 +51,12 @@
{
// Reference the enclosing SOAPPart, so that getOwnerDocument() works correctly
private SOAPPartImpl soapPart;
- private boolean domExpansionEnabled = false;
/** Construct a SOAP envelope for the given SOAP version URI prefix, etc.
*/
- public SOAPEnvelopeImpl(SOAPPartImpl soapPart, SOAPElementImpl element) throws
SOAPException
+ public SOAPEnvelopeImpl(SOAPPartImpl soapPart, SOAPElement element) throws
SOAPException
{
- super(element);
+ super((SOAPElementImpl)element);
this.soapPart = soapPart;
soapPart.setEnvelope(this);
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SOAPFactoryImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SOAPFactoryImpl.java 2006-12-14 13:42:11
UTC (rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SOAPFactoryImpl.java 2006-12-14 14:18:16
UTC (rev 1648)
@@ -26,14 +26,17 @@
import javax.xml.namespace.QName;
import javax.xml.soap.Detail;
import javax.xml.soap.Name;
+import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPFault;
-import org.jboss.util.NotImplementedException;
-import org.jboss.ws.core.jaxrpc.binding.SOAPElementDeserializer;
+import org.jboss.logging.Logger;
+import org.jboss.ws.core.utils.DOMUtils;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
/**
* SOAPFactory implementation.
@@ -42,49 +45,120 @@
*/
public class SOAPFactoryImpl extends SOAPFactory
{
+ // provide logging
+ private static Logger log = Logger.getLogger(SOAPFactoryImpl.class);
+
+ // The envelope namespace used by the MessageFactory
+ private String envNamespace;
+
public SOAPFactoryImpl()
{
+ envNamespace = SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE;
}
public SOAPFactoryImpl(String protocol)
{
+ if (SOAPConstants.SOAP_1_2_PROTOCOL.equals(protocol))
+ envNamespace = SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
+ else
+ envNamespace = SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE;
}
+ @Override
public SOAPElement createElement(Name name) throws SOAPException
{
return new SOAPElementImpl(name);
}
+
+ @Override
+ public SOAPElement createElement(QName qname) throws SOAPException
+ {
+ return createElement(new NameImpl(qname));
+ }
+ @Override
public SOAPElement createElement(String localName) throws SOAPException
{
return new SOAPElementImpl(localName);
}
+ @Override
public SOAPElement createElement(String localName, String prefix, String uri) throws
SOAPException
{
return new SOAPElementImpl(localName, prefix, uri);
}
+ @Override
+ public SOAPElement createElement(Element domElement) throws SOAPException
+ {
+ return createElement(domElement, true);
+ }
+
/**
* Create a SOAPElement from a DOM Element.
* This method is not part of the javax.xml.soap.SOAPFactory interface.
*/
- public SOAPElementImpl createElement(Element domNode, boolean deep) throws
SOAPException
+ public SOAPElement createElement(Element domElement, boolean deep) throws
SOAPException
{
- SOAPElementDeserializer des = new SOAPElementDeserializer();
- return (SOAPElementImpl)des.createElement(domNode, deep);
+ if (domElement == null)
+ throw new IllegalArgumentException("Source node cannot be null");
+
+ String localName = domElement.getLocalName();
+ String prefix = domElement.getPrefix() != null ? domElement.getPrefix() :
"";
+ String nsURI = domElement.getNamespaceURI() != null ? domElement.getNamespaceURI()
: "";
+
+ SOAPFactory factory = SOAPFactory.newInstance();
+ SOAPElement soapElement = factory.createElement(localName, prefix, nsURI);
+
+ if (domElement instanceof Element)
+ DOMUtils.copyAttributes(soapElement, (Element)domElement);
+
+ if (deep)
+ {
+ // Add the child elements as well
+ NodeList nlist = domElement.getChildNodes();
+ for (int i = 0; i < nlist.getLength(); i++)
+ {
+ Node child = nlist.item(i);
+ short nodeType = child.getNodeType();
+ if (nodeType == Node.ELEMENT_NODE)
+ {
+ SOAPElement soapChild = createElement((Element)child);
+ soapElement.addChildElement(soapChild);
+ }
+ else if (nodeType == Node.TEXT_NODE)
+ {
+ String nodeValue = child.getNodeValue();
+ soapElement.addTextNode(nodeValue);
+ }
+ else if (nodeType == Node.CDATA_SECTION_NODE)
+ {
+ String nodeValue = child.getNodeValue();
+ soapElement.addTextNode(nodeValue);
+ }
+ else
+ {
+ log.trace("Ignore child type: " + nodeType);
+ }
+ }
+ }
+
+ return soapElement;
}
+ @Override
public Detail createDetail() throws SOAPException
{
return new DetailImpl();
}
+ @Override
public Name createName(String localName, String prefix, String uri) throws
SOAPException
{
return new NameImpl(localName, prefix, uri);
}
+ @Override
public Name createName(String localName) throws SOAPException
{
return new NameImpl(localName);
@@ -93,14 +167,15 @@
@Override
public SOAPFault createFault(String reasonText, QName faultCode) throws SOAPException
{
- //TODO: SAAJ 1.3
- throw new NotImplementedException();
+ SOAPFaultImpl soapFault = new SOAPFaultImpl(SOAPConstants.SOAP_ENV_PREFIX,
envNamespace);
+ soapFault.setFaultCode(new NameImpl(faultCode));
+ soapFault.setFaultString(reasonText);
+ return soapFault;
}
@Override
public SOAPFault createFault() throws SOAPException
{
- //TODO: SAAJ 1.3
- throw new NotImplementedException();
+ return new SOAPFaultImpl(SOAPConstants.SOAP_ENV_PREFIX, envNamespace);
}
}
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java 2006-12-14 13:42:11 UTC
(rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java 2006-12-14 14:18:16 UTC
(rev 1648)
@@ -28,6 +28,7 @@
import javax.xml.namespace.QName;
import javax.xml.soap.Detail;
import javax.xml.soap.Name;
+import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
@@ -67,9 +68,14 @@
private SOAPElement faultactor;
private Locale faultStringLocale;
- public SOAPFaultImpl(String namespaceURI) throws SOAPException
+ public SOAPFaultImpl() throws SOAPException
{
- super(new NameImpl("Fault", Constants.PREFIX_ENV, namespaceURI));
+ this(SOAPConstants.SOAP_ENV_PREFIX, SOAPConstants.URI_NS_SOAP_ENVELOPE);
+ }
+
+ public SOAPFaultImpl(String prefix, String namespace) throws SOAPException
+ {
+ super(new NameImpl("Fault", prefix, namespace));
SOAPFactoryImpl factory = new SOAPFactoryImpl();
addChildElement(faultcode = factory.createElement("faultcode"));
addChildElement(faultstring = factory.createElement("faultstring"));
@@ -113,7 +119,7 @@
while (childIt.hasNext())
{
Element domElement = (Element)childIt.next();
- SOAPElement detailEntry = new
DetailEntryImpl(factory.createElement(domElement, true));
+ SOAPElement detailEntry = new
DetailEntryImpl(factory.createElement(domElement));
detail.addChildElement(detailEntry);
}
}
Modified: trunk/src/main/java/org/jboss/ws/core/soap/SOAPPartImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/core/soap/SOAPPartImpl.java 2006-12-14 13:42:11 UTC
(rev 1647)
+++ trunk/src/main/java/org/jboss/ws/core/soap/SOAPPartImpl.java 2006-12-14 14:18:16 UTC
(rev 1648)
@@ -184,7 +184,7 @@
}
SOAPFactoryImpl factory = new SOAPFactoryImpl();
- SOAPElementImpl soapElement = factory.createElement(domElement, true);
+ SOAPElement soapElement = factory.createElement(domElement);
SOAPBody body = soapEnvelope.getBody();
body.removeContents();
Modified:
trunk/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java
===================================================================
---
trunk/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java 2006-12-14
13:42:11 UTC (rev 1647)
+++
trunk/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -211,7 +211,7 @@
{
EndpointReferenceImpl epr = (EndpointReferenceImpl)getFrom();
epr.setRootQName(ADDR.getFromQName());
- SOAPElement soapElement = factory.createElement(epr.toElement(), true);
+ SOAPElement soapElement = factory.createElement(epr.toElement());
soapElement.removeNamespaceDeclaration(ADDR.getNamespacePrefix());
soapHeader.addChildElement(soapElement);
}
@@ -221,7 +221,7 @@
{
EndpointReferenceImpl epr = (EndpointReferenceImpl)getReplyTo();
epr.setRootQName(ADDR.getReplyToQName());
- SOAPElement soapElement = factory.createElement(epr.toElement(), true);
+ SOAPElement soapElement = factory.createElement(epr.toElement());
soapElement.removeNamespaceDeclaration(ADDR.getNamespacePrefix());
soapHeader.addChildElement(soapElement);
}
@@ -231,7 +231,7 @@
{
EndpointReferenceImpl epr = (EndpointReferenceImpl)getFaultTo();
epr.setRootQName(ADDR.getFaultToQName());
- SOAPElement soapElement = factory.createElement(epr.toElement(), true);
+ SOAPElement soapElement = factory.createElement(epr.toElement());
soapElement.removeNamespaceDeclaration(ADDR.getNamespacePrefix());
soapHeader.addChildElement(soapElement);
}
@@ -302,13 +302,13 @@
{
if (obj instanceof Element)
{
- SOAPElementImpl child = factory.createElement((Element)obj, true);
+ SOAPElement child = factory.createElement((Element)obj);
soapElement.addChildElement(child);
}
else if (obj instanceof String)
{
Element el = DOMUtils.parse((String)obj);
- SOAPElementImpl child = factory.createElement(el, true);
+ SOAPElement child = factory.createElement(el);
soapElement.addChildElement(child);
}
else
Modified: trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDLWriter.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDLWriter.java 2006-12-14 13:42:11 UTC
(rev 1647)
+++ trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDLWriter.java 2006-12-14 14:18:16 UTC
(rev 1648)
@@ -133,7 +133,7 @@
if (prefix.length() > 0)
{
buffer.append(" xmlns:" + prefix + "='" +
namespaceURI + "'");
- if (Constants.PREFIX_SOAP11.equals(prefix) ||
Constants.PREFIX_SOAP12.equals(prefix))
+ if (Constants.PREFIX_SOAP11.equals(prefix))
soapPrefix = prefix;
}
}
Modified:
trunk/src/test/java/org/jboss/test/ws/jaxws/exception/ExceptionEndpointImpl.java
===================================================================
---
trunk/src/test/java/org/jboss/test/ws/jaxws/exception/ExceptionEndpointImpl.java 2006-12-14
13:42:11 UTC (rev 1647)
+++
trunk/src/test/java/org/jboss/test/ws/jaxws/exception/ExceptionEndpointImpl.java 2006-12-14
14:18:16 UTC (rev 1648)
@@ -44,7 +44,7 @@
try
{
- SOAPFault fault = new SOAPFaultImpl("http://foo");
+ SOAPFault fault = new SOAPFaultImpl();
fault.setFaultCode(new NameImpl(new QName("http://foo",
"FooCode")));
fault.setFaultString("this is a fault string!");
fault.setFaultActor("mr.actor");