[jbossws-commits] JBossWS SVN: r2930 - in branches/jbossws-1.2.0.GA_JBWS-1610: jbossws-core/src/main/java/org/jboss/ws/core and 5 other directories.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Thu Apr 26 08:34:41 EDT 2007


Author: darran.lofthouse at jboss.com
Date: 2007-04-26 08:34:40 -0400 (Thu, 26 Apr 2007)
New Revision: 2930

Modified:
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/Constants.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/CommonSOAPBinding.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderDOM.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderPayload.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderStax.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/NodeImpl.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementMessage.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementRpc.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPHeaderImpl.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/TextImpl.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/XMLContent.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/utils/DOMUtils.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/MessageFactoryTestCase.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPContentElementTestCase.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPFaultTestCase.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java
   branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/samples/provider/ProviderPayloadTestCase.java
Log:
JBWS-1610 - Backport changes to preserve comments and text nodes.

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/Constants.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/Constants.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/Constants.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -126,7 +126,7 @@
    static final String PREFIX_XML = "xml";
 
    /** XOP Include */
-   static final Name NAME_XOP_INCLUDE = new NameImpl("Include", PREFIX_XOP, NS_XOP);
+   static final QName NAME_XOP_INCLUDE = new QName(NS_XOP, "Include", PREFIX_XOP);
    
    /** SOAP-1.1 roles */
    static final String URI_SOAP11_NEXT_ACTOR = "http://schemas.xmlsoap.org/soap/actor/next";
@@ -148,6 +148,10 @@
    static final Name SOAP11_HEADER = new NameImpl("Header", PREFIX_ENV, NS_SOAP11_ENV);
    static final Name SOAP11_BODY = new NameImpl("Body", PREFIX_ENV, NS_SOAP11_ENV);
    static final Name SOAP11_FAULT = new NameImpl("Fault", PREFIX_ENV, NS_SOAP11_ENV);
+   static final QName SOAP11_FAULTCODE = new QName("faultcode");
+   static final QName SOAP11_FAULTSTRING = new QName("faultstring");
+   static final QName SOAP11_FAULTACTOR = new QName("faultactor");
+   static final QName SOAP11_DETAIL = new QName("detail");
 
    /** The default RPC return parameter name */
    static final String DEFAULT_RPC_RETURN_NAME = "result"; // FIXME: According to JSR-181 this should be 'return'

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/CommonSOAPBinding.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/CommonSOAPBinding.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/CommonSOAPBinding.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -34,6 +34,7 @@
 import javax.xml.soap.AttachmentPart;
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.Name;
+import javax.xml.soap.Node;
 import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPBodyElement;
 import javax.xml.soap.SOAPElement;
@@ -288,6 +289,7 @@
                   }
                }
             }
+
          }
 
          // Generic message endpoint

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderDOM.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderDOM.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderDOM.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -23,20 +23,35 @@
 
 //$Id$
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+import javax.xml.soap.Detail;
+import javax.xml.soap.Name;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPBodyElement;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.transform.dom.DOMSource;
+
 import org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
 import org.jboss.ws.core.jaxrpc.Style;
 import org.jboss.ws.core.utils.DOMUtils;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
 
-import javax.xml.namespace.QName;
-import javax.xml.soap.*;
-import javax.xml.transform.dom.DOMSource;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-
 /**
  * A SOAPEnvelope builder for JAXRPC based on DOM 
  * 
@@ -49,10 +64,12 @@
    // provide logging
    private static Logger log = Logger.getLogger(EnvelopeBuilderDOM.class);
 
-   private Style style = Style.DOCUMENT;
+   private SOAPFactoryImpl soapFactory;
+   private Style style;
 
    public EnvelopeBuilderDOM(Style style)
    {
+      this.soapFactory = new SOAPFactoryImpl();
       this.style = style;
    }
 
@@ -76,31 +93,93 @@
       return build(soapMessage, domEnv);
    }
 
+   public SOAPEnvelope build(SOAPMessage soapMessage, Reader reader, boolean ignoreParseError) throws IOException, SOAPException
+   {
+      // Parse the XML input stream
+      Element domEnv = null;
+      try
+      {
+         domEnv = DOMUtils.parse(new InputSource(reader));
+      }
+      catch (IOException ex)
+      {
+         if (ignoreParseError)
+         {
+            return null;
+         }
+         throw ex;
+      }
+
+      return build(soapMessage, domEnv);
+   }
+
    public SOAPEnvelope build(SOAPMessage soapMessage, Element domEnv) throws SOAPException
    {
-      String envNS = domEnv.getNamespaceURI();
-      String envPrefix = domEnv.getPrefix();
-
       // Construct the envelope
-      SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
       SOAPPartImpl soapPart = (SOAPPartImpl)soapMessage.getSOAPPart();
-      SOAPEnvelopeImpl soapEnv = new SOAPEnvelopeImpl(soapPart, soapFactory.createElement(domEnv, false));
+      SOAPEnvelopeImpl soapEnv = new SOAPEnvelopeImpl(soapPart, soapFactory.createElement(domEnv, false), false);
 
+      Document ownerDoc = soapEnv.getOwnerDocument();
       DOMUtils.copyAttributes(soapEnv, domEnv);
 
-      // Add the header elements
-      Element domHeader = DOMUtils.getFirstChildElement(domEnv, new QName(envNS, "Header"));
-      if (domHeader != null)
+      NodeList envChildNodes = domEnv.getChildNodes();
+      for (int i = 0; i < envChildNodes.getLength(); i++)
       {
-         SOAPHeader soapHeader = soapEnv.getHeader();
+         Node child = envChildNodes.item(i);
+         short childType = child.getNodeType();
+         if (childType == Node.ELEMENT_NODE)
+         {
+            String elName = child.getLocalName();
+            if ("Header".equals(elName))
+            {
+               buildSOAPHeader(soapEnv, (Element)child);
+            }
+            else if ("Body".equals(elName))
+            {
+               buildSOAPBody(soapEnv, (Element)child);
+            }
+            else
+            {
+               log.warn("Ignore envelope chile element: " + elName);
+            }
+         }
+         else if (childType == Node.COMMENT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            Comment comment = ownerDoc.createComment(nodeValue);
+            soapEnv.appendChild(comment);
+         }
+         else if (childType == Node.TEXT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            soapEnv.addTextNode(nodeValue);
+         }
+         else
+         {
+            log.warn("Ignore child type: " + childType);
+         }
+      }
 
-         DOMUtils.copyAttributes(soapHeader, domHeader);
+      return soapEnv;
+   }
 
-         Iterator it = DOMUtils.getChildElements(domHeader);
-         while (it.hasNext())
+   private SOAPHeader buildSOAPHeader(SOAPEnvelopeImpl soapEnv, Element domHeader) throws SOAPException
+   {
+      SOAPHeader soapHeader = soapEnv.getHeader();
+      if (soapHeader == null)
+         soapHeader = soapEnv.addHeader();
+
+      Document ownerDoc = soapEnv.getOwnerDocument();
+      DOMUtils.copyAttributes(soapHeader, domHeader);
+
+      NodeList headerChildNodes = domHeader.getChildNodes();
+      for (int i = 0; i < headerChildNodes.getLength(); i++)
+      {
+         Node child = headerChildNodes.item(i);
+         short childType = child.getNodeType();
+         if (childType == Node.ELEMENT_NODE)
          {
-            Element srcElement = (Element)it.next();
-            //registerNamespacesLocally(srcElement);
+            Element srcElement = (Element)child;
             XMLFragment xmlFragment = new XMLFragment(new DOMSource(srcElement));
 
             Name name = new NameImpl(srcElement.getLocalName(), srcElement.getPrefix(), srcElement.getNamespaceURI());
@@ -110,163 +189,258 @@
             DOMUtils.copyAttributes(destElement, srcElement);
             destElement.setXMLFragment(xmlFragment);
          }
+         else if (childType == Node.COMMENT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            Comment comment = ownerDoc.createComment(nodeValue);
+            soapHeader.appendChild(comment);
+         }
+         else if (childType == Node.TEXT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            soapHeader.addTextNode(nodeValue);
+         }
+         else
+         {
+            log.warn("Ignore child type: " + childType);
+         }
       }
 
-      // Add the body elements
-      Element domBody = DOMUtils.getFirstChildElement(domEnv, new QName(envNS, "Body"));
-      SOAPBody soapBody = soapEnv.getBody();
+      return soapHeader;
+   }
 
+   private SOAPBody buildSOAPBody(SOAPEnvelopeImpl soapEnv, Element domBody) throws SOAPException
+   {
+      String envNS = soapEnv.getNamespaceURI();
+
+      SOAPBodyImpl soapBody = (SOAPBodyImpl)soapEnv.getBody();
+      if (soapBody == null)
+         soapBody = (SOAPBodyImpl)soapEnv.addBody();
+
+      Document ownerDoc = soapBody.getOwnerDocument();
       DOMUtils.copyAttributes(soapBody, domBody);
 
-      Iterator itBody = DOMUtils.getChildElements(domBody);
-      if (itBody.hasNext())
+      SOAPBodyElement soapBodyElement = null;
+      boolean attachHRefElements = Constants.URI_SOAP11_ENC.equals(soapEnv.getAttributeNS(envNS, "encodingStyle"));
+
+      NodeList bodyChildNodes = domBody.getChildNodes();
+      for (int i = 0; i < bodyChildNodes.getLength(); i++)
       {
-         Element domBodyElement = (Element)itBody.next();
+         Node child = bodyChildNodes.item(i);
+         short childType = child.getNodeType();
+         if (childType == Node.ELEMENT_NODE)
+         {
+            if (soapBodyElement == null)
+            {
+               soapBodyElement = buildSOAPBodyElement(soapEnv, (Element)child);
+               attachHRefElements = attachHRefElements || Constants.URI_SOAP11_ENC.equals(soapBody.getAttributeNS(envNS, "encodingStyle"));
+            }
+            else if (attachHRefElements)
+            {
+               // Process additional soap encoded body elements
+               soapBody.addChildElement(soapFactory.createElement((Element)child, true));
+            }
+         }
+         else if (childType == Node.COMMENT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            Comment comment = ownerDoc.createComment(nodeValue);
+            soapBody.appendChild(comment);
+         }
+         else if (childType == Node.TEXT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            soapBody.addTextNode(nodeValue);
+         }
+         else
+         {
+            log.warn("Ignore child type: " + childType);
+         }
+      }
 
-         String localName = domBodyElement.getLocalName();
-         String prefix = domBodyElement.getPrefix();
-         String nsURI = domBodyElement.getNamespaceURI();
-         Name beName = new NameImpl(localName, prefix, nsURI);
+      return soapBody;
+   }
 
-         // Process a <env:Fault> message
-         if (beName.equals(new NameImpl("Fault", envPrefix, envNS)))
-         {
-            SOAPFaultImpl soapFault = new SOAPFaultImpl(envPrefix, envNS);
-            soapBody.addChildElement(soapFault);
+   private SOAPBodyElement buildSOAPBodyElement(SOAPEnvelopeImpl soapEnv, Element domBodyElement) throws SOAPException
+   {
+      String envNS = soapEnv.getNamespaceURI();
+      String envPrefix = soapEnv.getPrefix();
 
-            DOMUtils.copyAttributes(soapFault, domBodyElement);
+      SOAPBodyImpl soapBody = (SOAPBodyImpl)soapEnv.getBody();
+      QName beName = DOMUtils.getElementQName(domBodyElement);
 
-            Element domFaultCode = DOMUtils.getFirstChildElement(domBodyElement, new QName("faultcode"));
-            if (domFaultCode == null)
-               throw new SOAPException("SOAPFault does not contain a <faultcode> element");
+      SOAPBodyElement soapBodyElement = null;
 
-            Element domFaultString = DOMUtils.getFirstChildElement(domBodyElement, new QName("faultstring"));
-            if (domFaultString == null)
-               throw new SOAPException("SOAPFault does not contain a <faultstring> element");
+      // Process a <env:Fault> message
+      if (beName.equals(new QName(envNS, "Fault")))
+      {
+         SOAPFaultImpl soapFault = new SOAPFaultImpl(envPrefix, envNS);
+         soapBody.addChildElement(soapFault);
+         soapBodyElement = soapFault;
 
-            String faultCode = DOMUtils.getTextContent(domFaultCode);
-            soapFault.setFaultCode(faultCode);
+         DOMUtils.copyAttributes(soapFault, domBodyElement);
 
-            String faultString = DOMUtils.getTextContent(domFaultString);
-            soapFault.setFaultString(faultString);
+         Element domFaultCode = DOMUtils.getFirstChildElement(domBodyElement, new QName("faultcode"));
+         if (domFaultCode == null)
+            throw new SOAPException("SOAPFault does not contain a <faultcode> element");
 
-            Element domFaultActor = DOMUtils.getFirstChildElement(domBodyElement, new QName("faultactor"));
-            if (domFaultActor != null)
-            {
-               String faultActor = DOMUtils.getTextContent(domFaultActor);
-               soapFault.setFaultActor(faultActor);
-            }
+         Element domFaultString = DOMUtils.getFirstChildElement(domBodyElement, new QName("faultstring"));
+         if (domFaultString == null)
+            throw new SOAPException("SOAPFault does not contain a <faultstring> element");
 
-            // Add the fault detail
-            Element domFaultDetail = DOMUtils.getFirstChildElement(domBodyElement, "detail");
-            if (domFaultDetail != null)
+         String faultCode = DOMUtils.getTextContent(domFaultCode);
+         soapFault.setFaultCode(faultCode);
+
+         String faultString = DOMUtils.getTextContent(domFaultString);
+         soapFault.setFaultString(faultString);
+
+         Element domFaultActor = DOMUtils.getFirstChildElement(domBodyElement, new QName("faultactor"));
+         if (domFaultActor != null)
+         {
+            String faultActor = DOMUtils.getTextContent(domFaultActor);
+            soapFault.setFaultActor(faultActor);
+         }
+
+         // Add the fault detail
+         Element domFaultDetail = DOMUtils.getFirstChildElement(domBodyElement, "detail");
+         if (domFaultDetail != null)
+         {
+            Detail detail = soapFault.addDetail();
+            Iterator it = DOMUtils.getChildElements(domFaultDetail);
+            while (it.hasNext())
             {
-               Detail detail = soapFault.addDetail();
-               Iterator it = DOMUtils.getChildElements(domFaultDetail);
-               while (it.hasNext())
-               {
-                  Element domElement = (Element)it.next();
-                  SOAPElement detailEntry = new DetailEntryImpl(soapFactory.createElement(domElement));
-                  detailEntry = detail.addChildElement(detailEntry);
-               }
+               Element domElement = (Element)it.next();
+               SOAPElement detailEntry = new DetailEntryImpl(soapFactory.createElement(domElement));
+               detailEntry = detail.addChildElement(detailEntry);
             }
          }
+      }
 
-         // Process and RPC or DOCUMENT style message
+      // Process and RPC or DOCUMENT style message
+      else
+      {
+         if (style == Style.DOCUMENT)
+         {
+            buildBodyElementDoc(soapBody, domBodyElement);
+         }
+         else if (style == Style.RPC)
+         {
+            soapBodyElement = buildBodyElementRpc(soapBody, domBodyElement);
+         }
+         else if (style == null)
+         {
+            buildBodyElementDefault(soapBody, domBodyElement);
+         }
          else
          {
+            throw new WSException("Unsupported message style: " + style);
+         }
+      }
 
-            if (style == Style.RPC)
-            {
-               SOAPBodyElementRpc soapBodyElement = new SOAPBodyElementRpc(beName);
-               soapBodyElement = (SOAPBodyElementRpc)soapBody.addChildElement(soapBodyElement);
+      return soapBodyElement;
+   }
 
-               DOMUtils.copyAttributes(soapBodyElement, domBodyElement);
+   public void buildBodyElementDoc(SOAPBodyImpl soapBody, Element domBodyElement) throws SOAPException
+   {
+      Element srcElement = (Element)domBodyElement;
 
-               Iterator itBodyElement = DOMUtils.getChildElements(domBodyElement);
-               while (itBodyElement.hasNext())
-               {
-                  Element srcElement = (Element)itBodyElement.next();
-                  registerNamespacesLocally(srcElement);
+      QName beName = DOMUtils.getElementQName(domBodyElement);
+      SOAPContentElement contentElement = new SOAPBodyElementDoc(beName);
+      contentElement = (SOAPContentElement)soapBody.addChildElement(contentElement);
 
-                  Name name = new NameImpl(srcElement.getLocalName(), srcElement.getPrefix(), srcElement.getNamespaceURI());
-                  SOAPContentElement destElement = new SOAPContentElement(name);
-                  destElement = (SOAPContentElement)soapBodyElement.addChildElement(destElement);
+      DOMUtils.copyAttributes(contentElement, srcElement);
 
-                  DOMUtils.copyAttributes(destElement, srcElement);
+      XMLFragment xmlFragment = new XMLFragment(new DOMSource(srcElement));
+      contentElement.setXMLFragment(xmlFragment);
+   }
 
-                  XMLFragment xmlFragment = new XMLFragment(new DOMSource(srcElement));
-                  destElement.setXMLFragment(xmlFragment);
-               }
-            }
-            else if (style == Style.DOCUMENT)
-            {
-               Element srcElement = (Element)domBodyElement;
-               registerNamespacesLocally(srcElement);
-               SOAPContentElement destElement = new SOAPBodyElementDoc(beName);
-               destElement = (SOAPContentElement)soapBody.addChildElement(destElement);
+   public SOAPBodyElement buildBodyElementRpc(SOAPBodyImpl soapBody, Element domBodyElement) throws SOAPException
+   {
+      QName beName = DOMUtils.getElementQName(domBodyElement);
+      SOAPBodyElementRpc soapBodyElement = new SOAPBodyElementRpc(beName);
+      soapBodyElement = (SOAPBodyElementRpc)soapBody.addChildElement(soapBodyElement);
 
-               DOMUtils.copyAttributes(destElement, srcElement);
+      Document ownerDoc = soapBody.getOwnerDocument();
+      DOMUtils.copyAttributes(soapBodyElement, domBodyElement);
 
-               XMLFragment xmlFragment = new XMLFragment(new DOMSource(srcElement));
-               destElement.setXMLFragment(xmlFragment);
-            }
-            else if (style == null)
-            {
-               SOAPBodyElementMessage soapBodyElement = new SOAPBodyElementMessage(beName);
-               soapBodyElement = (SOAPBodyElementMessage)soapBody.addChildElement(soapBodyElement);
+      NodeList nlist = domBodyElement.getChildNodes();
+      for (int i = 0; i < nlist.getLength(); i++)
+      {
+         Node child = nlist.item(i);
+         short childType = child.getNodeType();
+         if (childType == Node.ELEMENT_NODE)
+         {
+            Element srcElement = (Element)child;
+            Name name = new NameImpl(srcElement.getLocalName(), srcElement.getPrefix(), srcElement.getNamespaceURI());
+            SOAPContentElement destElement = new SOAPContentElement(name);
+            destElement = (SOAPContentElement)soapBodyElement.addChildElement(destElement);
 
-               DOMUtils.copyAttributes(soapBodyElement, domBodyElement);
+            DOMUtils.copyAttributes(destElement, srcElement);
 
-               NodeList nlist = domBodyElement.getChildNodes();
-               for (int i = 0; i < nlist.getLength(); i++)
-               {
-                  org.w3c.dom.Node child = nlist.item(i);
-                  short childType = child.getNodeType();
-                  if (childType == org.w3c.dom.Node.ELEMENT_NODE)
-                  {
-                     SOAPElement soapElement = soapFactory.createElement((Element)child);
-                     soapBodyElement.addChildElement(soapElement);
-                  }
-                  else if (childType == org.w3c.dom.Node.TEXT_NODE)
-                  {
-                     String nodeValue = child.getNodeValue();
-                     soapBodyElement.addTextNode(nodeValue);
-                  }
-                  else if (childType == org.w3c.dom.Node.CDATA_SECTION_NODE)
-                  {
-                     String nodeValue = child.getNodeValue();
-                     soapBodyElement.addTextNode(nodeValue);
-                  }
-                  else
-                  {
-                     log.warn("Ignore child type: " + childType);
-                  }
-               }
-            }
-            else
-            {
-               throw new WSException("Unsupported message style: " + style);
-            }
+            XMLFragment xmlFragment = new XMLFragment(new DOMSource(srcElement));
+            destElement.setXMLFragment(xmlFragment);
          }
+         else if (childType == Node.COMMENT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            Comment comment = ownerDoc.createComment(nodeValue);
+            soapBodyElement.appendChild(comment);
+         }
+         else if (childType == Node.TEXT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            soapBodyElement.addTextNode(nodeValue);
+         }
+         else
+         {
+            log.warn("Ignore child type: " + childType);
+         }
       }
 
-      return soapEnv;
+      return soapBodyElement;
    }
 
-   /**
-    * Register globally available namespaces on element level.
-    * This is necessary to ensure that each xml fragment is valid.    
-    */
-   private void registerNamespacesLocally(Element srcElement)
+   public SOAPBodyElement buildBodyElementDefault(SOAPBodyImpl soapBody, Element domBodyElement) throws SOAPException
    {
-      if (srcElement.getPrefix() == null)
+      QName beName = DOMUtils.getElementQName(domBodyElement);
+      SOAPBodyElement soapBodyElement = new SOAPBodyElementMessage(beName);
+      soapBodyElement = (SOAPBodyElementMessage)soapBody.addChildElement(soapBodyElement);
+
+      Document ownerDoc = soapBody.getOwnerDocument();
+      DOMUtils.copyAttributes(soapBodyElement, domBodyElement);
+
+      NodeList nlist = domBodyElement.getChildNodes();
+      for (int i = 0; i < nlist.getLength(); i++)
       {
-         srcElement.setAttribute("xmlns", srcElement.getNamespaceURI());
+         Node child = nlist.item(i);
+         short childType = child.getNodeType();
+         if (childType == Node.ELEMENT_NODE)
+         {
+            SOAPElement soapElement = soapFactory.createElement((Element)child);
+            soapBodyElement.addChildElement(soapElement);
+         }
+         else if (childType == Node.COMMENT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            Comment comment = ownerDoc.createComment(nodeValue);
+            soapBodyElement.appendChild(comment);
+         }
+         else if (childType == Node.TEXT_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            soapBodyElement.addTextNode(nodeValue);
+         }
+         else if (childType == Node.CDATA_SECTION_NODE)
+         {
+            String nodeValue = child.getNodeValue();
+            soapBodyElement.addTextNode(nodeValue);
+         }
+         else
+         {
+            log.warn("Ignore child type: " + childType);
+         }
       }
-      else
-      {
-         srcElement.setAttribute("xmlns:" + srcElement.getPrefix(), srcElement.getNamespaceURI());
-      }
+
+      return soapBodyElement;
    }
 }

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderPayload.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderPayload.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderPayload.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -21,7 +21,8 @@
  */
 package org.jboss.ws.core.soap;
 
-//$Id$
+// $Id: EnvelopeBuilderPayload.java 2292 2007-02-07 10:20:03Z
+// heiko.braun at jboss.com $
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -29,6 +30,7 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.Name;
+import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPHeader;
@@ -36,11 +38,10 @@
 import javax.xml.transform.dom.DOMSource;
 
 import org.jboss.ws.core.utils.DOMUtils;
-import org.jboss.ws.core.utils.DOMWriter;
 import org.w3c.dom.Element;
 
 /**
- * A SOAPEnvelope builder for JAXWS in service mode PAYLOAD 
+ * A SOAPEnvelope builder for JAXWS in service mode PAYLOAD
  * 
  * @author Thomas.Diesler at jboss.com
  * @since 30-Jun-2006
@@ -69,7 +70,7 @@
       // Construct the envelope
       SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
       SOAPPartImpl soapPart = (SOAPPartImpl)soapMessage.getSOAPPart();
-      SOAPEnvelopeImpl soapEnv = new SOAPEnvelopeImpl(soapPart, soapFactory.createElement(domEnv, false));
+      SOAPEnvelopeImpl soapEnv = new SOAPEnvelopeImpl(soapPart, soapFactory.createElement(domEnv, false), false);
 
       DOMUtils.copyAttributes(soapEnv, domEnv);
 
@@ -85,7 +86,7 @@
          while (it.hasNext())
          {
             Element srcElement = (Element)it.next();
-            XMLFragment xmlFragment = new XMLFragment( new DOMSource(srcElement) );
+            XMLFragment xmlFragment = new XMLFragment(new DOMSource(srcElement));
 
             Name name = new NameImpl(srcElement.getLocalName(), srcElement.getPrefix(), srcElement.getNamespaceURI());
             SOAPContentElement destElement = new SOAPHeaderElementImpl(name);
@@ -99,6 +100,10 @@
       // Add the body elements
       Element domBody = DOMUtils.getFirstChildElement(domEnv, new QName(envNS, "Body"));
       SOAPBodyImpl soapBody = (SOAPBodyImpl)soapEnv.getBody();
+      if (soapBody == null)
+      {
+         soapBody = (SOAPBodyImpl)soapEnv.addBody();
+      }
 
       DOMUtils.copyAttributes(soapBody, domBody);
 
@@ -108,7 +113,7 @@
          Element domBodyElement = (Element)itBody.next();
          soapBody.setPayload(new DOMSource(domBodyElement));
       }
-      
+
       return soapEnv;
    }
 }

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderStax.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderStax.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/EnvelopeBuilderStax.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -256,7 +256,7 @@
       if (Part.ENVELOPE == currentPart)
       {
          // setup envelope impl
-         soapEnv = new SOAPEnvelopeImpl(soapPart, qName.getNamespaceURI());
+         soapEnv = new SOAPEnvelopeImpl(soapPart, qName.getNamespaceURI(), false);
          destElement = soapEnv; // soapEnv becomes current
       }
       else if (Part.HEADER == currentPart)

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/MessageFactoryImpl.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -146,7 +146,7 @@
    {
       SOAPMessageImpl soapMessage = new SOAPMessageImpl();
       SOAPPartImpl soapPart = (SOAPPartImpl)soapMessage.getSOAPPart();
-      new SOAPEnvelopeImpl(soapPart, envNamespace);
+      new SOAPEnvelopeImpl(soapPart, envNamespace, true);
       return soapMessage;
    }
 

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/NodeImpl.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/NodeImpl.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/NodeImpl.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -552,6 +552,10 @@
       {
          retNode = new TextImpl(node);
       }
+      else if (node instanceof org.w3c.dom.Comment)
+      {
+         retNode = new TextImpl(node);
+      }
       else
       {
          throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Operation not supported on this type of node: " + node);

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementMessage.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementMessage.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementMessage.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -23,8 +23,8 @@
 
 import java.io.Writer;
 
+import javax.xml.namespace.QName;
 import javax.xml.rpc.JAXRPCException;
-import javax.xml.soap.Name;
 import javax.xml.soap.SOAPBodyElement;
 
 import org.jboss.ws.core.utils.DOMWriter;
@@ -39,7 +39,7 @@
  */
 public class SOAPBodyElementMessage extends SOAPElementImpl implements SOAPBodyElement
 {
-   public SOAPBodyElementMessage(Name name)
+   public SOAPBodyElementMessage(QName name)
    {
       super(name);
    }

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementRpc.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementRpc.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyElementRpc.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -21,6 +21,7 @@
 */
 package org.jboss.ws.core.soap;
 
+import javax.xml.namespace.QName;
 import javax.xml.soap.Name;
 import javax.xml.soap.SOAPBodyElement;
 
@@ -39,6 +40,11 @@
       super(name);
    }
 
+   public SOAPBodyElementRpc(QName qname)
+   {
+      super(qname);
+   }
+
    public SOAPBodyElementRpc(SOAPElementImpl element)
    {
       super(element);

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -25,10 +25,8 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
-import java.io.Writer;
 import java.util.Iterator;
 import java.util.Locale;
 
@@ -48,18 +46,20 @@
 
 import org.jboss.logging.Logger;
 import org.jboss.util.NotImplementedException;
+import org.jboss.util.xml.DOMWriter;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
 import org.jboss.ws.core.CommonMessageContext;
 import org.jboss.ws.core.utils.DOMUtils;
-import org.jboss.ws.core.utils.DOMWriter;
 import org.jboss.ws.metadata.umdm.UnifiedMetaData;
+import org.w3c.dom.Comment;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
 import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
 import org.xml.sax.InputSource;
 
 /**
@@ -108,7 +108,8 @@
    {
       log.trace("addChildElement: " + child.getElementName());
       expandToDOM();
-      if ((child instanceof SOAPBodyElement) == false)
+      
+      if (needsConversionToBodyElement(child))
          child = convertToBodyElement(child);
 
       child = super.addChildElement(child);
@@ -227,10 +228,10 @@
       log.trace("appendChild: " + newChild.getNodeName());
       expandToDOM();
       Node retNode;
-      if (!(newChild instanceof SOAPBodyElement || newChild instanceof DocumentFragment))
-      {
+      
+      if (needsConversionToBodyElement(newChild))
          newChild = convertToBodyElement(newChild);
-      }
+      
       retNode = super.appendChild(newChild);
       return retNode;
    }
@@ -239,7 +240,8 @@
    {
       log.trace("insertBefore: " + newChild.getNodeName());
       expandToDOM();
-      if (!(newChild instanceof SOAPBodyElement || newChild instanceof DocumentFragment))
+      
+      if (needsConversionToBodyElement(newChild))
          newChild = convertToBodyElement(newChild);
 
       return super.insertBefore(newChild, refChild);
@@ -249,10 +251,9 @@
    {
       log.trace("replaceChild: " + newChild.getNodeName());
       expandToDOM();
-      if (!(newChild instanceof SOAPBodyElement || newChild instanceof DocumentFragment))
-      {
+      
+      if (needsConversionToBodyElement(newChild))
          newChild = convertToBodyElement(newChild);
-      }
 
       return super.replaceChild(newChild, oldChild);
    }
@@ -299,6 +300,16 @@
       return super.hasChildNodes();
    }
 
+   private static boolean needsConversionToBodyElement(Node newChild)
+   {
+      // JBCTS-440 #addTextNodeTest1 appends a Text node to a SOAPBody
+      boolean validChild = newChild instanceof SOAPBodyElement;
+      validChild = validChild || newChild instanceof DocumentFragment;
+      validChild = validChild || newChild instanceof Text;
+      validChild = validChild || newChild instanceof Comment;
+      return validChild == false;
+   }
+   
    private SOAPBodyElementDoc convertToBodyElement(Node node)
    {
       if (!(node instanceof SOAPElementImpl))
@@ -419,22 +430,6 @@
       return child;
    }
 
-   @Override
-   public void writeElementContent(Writer writer) throws IOException
-   {
-      if (payload != null)
-      {
-         Element child = getBodyElementFromSource();
-         String xmlPayload = DOMWriter.printNode(child, false);
-         if(log.isDebugEnabled()) log.debug("writeElementContent from payload: " + xmlPayload);
-         writer.write(xmlPayload);
-      }
-      else
-      {
-         super.writeElementContent(writer);
-      }
-   }
-
    public Document extractContentAsDocument() throws SOAPException
    {
       //TODO: SAAJ 1.3

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPEnvelopeImpl.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -54,7 +54,7 @@
 
    /** Construct a SOAP envelope for the given SOAP version URI prefix, etc.
     */
-   public SOAPEnvelopeImpl(SOAPPartImpl soapPart, SOAPElement element) throws SOAPException
+   public SOAPEnvelopeImpl(SOAPPartImpl soapPart, SOAPElement element, boolean addHeaderAndBody) throws SOAPException
    {
       super((SOAPElementImpl)element);
 
@@ -71,14 +71,16 @@
       assertEnvelopeNamespace(namespaceURI);
       addNamespaceDeclaration(prefix, namespaceURI);
 
-      // the Element source might already contain a Header and Body declaration
-      if(null == soapPart.getEnvelope().getHeader()) addHeader();
-      if(null == soapPart.getEnvelope().getBody()) addBody();
+      if (addHeaderAndBody)
+      {
+         addHeader();
+         addBody();
+      }
    }
 
    /** Construct a SOAP envelope for the given SOAP version URI.
     */
-   SOAPEnvelopeImpl(SOAPPartImpl soapPart, String namespace) throws SOAPException
+   SOAPEnvelopeImpl(SOAPPartImpl soapPart, String namespace, boolean addHeaderAndBody) throws SOAPException
    {
       super("Envelope", Constants.PREFIX_ENV, namespace);
 
@@ -88,8 +90,11 @@
       assertEnvelopeNamespace(namespace);
       addNamespaceDeclaration(getPrefix(), namespace);
 
-      addHeader();
-      addBody();
+      if (addHeaderAndBody)
+      {
+         addHeader();
+         addBody();
+      }
    }
 
    private void assertEnvelopeNamespace(String namespaceURI)
@@ -153,7 +158,7 @@
       while (it.hasNext())
       {
          Node node = (Node)it.next();
-         if (node.getLocalName().equals("Body"))
+         if ("Body".equals(node.getLocalName()))
             return (SOAPBody)node;
       }
       return null;
@@ -165,7 +170,7 @@
       while (it.hasNext())
       {
          Node node = (Node)it.next();
-         if (node.getLocalName().equals("Header"))
+         if ("Header".equals(node.getLocalName()))
             return (SOAPHeader)node;
       }
       return null;
@@ -176,7 +181,10 @@
     */
    public SOAPElement addTextNode(String value) throws SOAPException
    {
-      throw new SOAPException("Cannot add Text node to SOAPEnvelope");
+      if (value.trim().length() > 0)
+         throw new SOAPException("Cannot add Text node to SOAPEnvelope");
+
+      return super.addTextNode(value);
    }
 
    public Document getOwnerDocument()

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPFaultImpl.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -67,6 +67,7 @@
    private SOAPElement faultstring;
    private SOAPElement faultactor;
    private Locale faultStringLocale;
+   private Detail detail;
 
    public SOAPFaultImpl() throws SOAPException
    {
@@ -75,10 +76,7 @@
 
    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"));
+      super(new NameImpl("Fault", prefix, namespace));      
    }
 
    /** Creates an optional Detail object and sets it as the Detail object for this SOAPFault  object.
@@ -138,15 +136,23 @@
     */
    public String getFaultActor()
    {
-      return (faultactor != null ? faultactor.getValue() : null);
+      if (faultactor == null)
+      {
+         findFaultActorElement();
+         if (faultactor == null)
+            return null;
+      }
+      return faultactor.getValue();
    }
 
    /** Gets the fault code for this SOAPFault object.
     */
    public String getFaultCode()
    {
-      String value = faultcode.getValue();
-      return value;
+      if (faultcode == null)
+         findFaultCodeElement();
+
+      return faultcode.getValue();
    }
 
    /**
@@ -154,17 +160,33 @@
     */
    public Name getFaultCodeAsName()
    {
-      QName qname = QNameBuilder.buildQName(this, faultcode.getValue());
-      return new NameImpl(qname);
+      return new NameImpl(getFaultCodeAsQName());
    }
 
    /** Gets the fault string for this SOAPFault object.
     */
    public String getFaultString()
    {
-      String value = faultstring.getValue();
-      return value;
+      if (faultstring == null)
+      {
+         findFaultStringElement();
+         if (faultstring == null)
+            return null;
+      }
+      return faultstring.getValue();
    }
+   
+   private void findFaultStringElement()
+   {
+      faultstring = getChildElement(this, Constants.SOAP11_FAULTSTRING);
+      log.trace("findFaultStringElement : " + faultstring);
+   }
+   
+   private void findFaultActorElement()
+   {
+      faultactor = getChildElement(this, Constants.SOAP11_FAULTACTOR);
+      log.trace("findFaultActorElement : " + faultactor);
+   }
 
    /** Gets the locale of the fault string for this SOAPFault object.
     */
@@ -186,6 +208,12 @@
       faultactor.setValue(faultActor);
    }
 
+   private void findFaultCodeElement()
+   {
+      faultcode = getChildElement(this, Constants.SOAP11_FAULTCODE);
+      log.trace("findFaultCodeElement : " + faultcode);
+   }
+
    /** Sets this SOAPFault object with the give fault code.
     */
    public void setFaultCode(String faultCode) throws SOAPException
@@ -217,24 +245,44 @@
 
       if (nsURI.length() > 0 && prefix.length() == 0)
          prefix = "codeNS";
-      
+
       String prevNS = getNamespaceURI(prefix);
       if (prevNS == null)
          addNamespaceDeclaration(prefix, nsURI);
 
       String faultCode = prefix + ":" + localName;
+      
+      if (faultcode == null)
+      {
+         findFaultCodeElement();
+         if (faultcode == null)
+            faultcode = addUnqualifiedFaultElement("faultcode");
+      }
+      
       faultcode.setValue(faultCode);
    }
+   
+   private static SOAPElement getChildElement(SOAPElement element, QName name)
+   {
+      Iterator it = element.getChildElements(name);
+      return it.hasNext() ? (SOAPElement)it.next() : null;
+   }
 
    public void setFaultCode(QName faultCode) throws SOAPException
    {
       setFaultCode(new NameImpl(faultCode));
    }
-   
+
    /** Sets the fault string for this SOAPFault object to the given string.
     */
    public void setFaultString(String faultString) throws SOAPException
    {
+      if (faultstring == null)
+      {
+         findFaultStringElement();
+         if (faultstring == null)
+            faultstring = addUnqualifiedFaultElement("faultstring");
+      }
       faultstring.setValue(faultString);
    }
 
@@ -250,6 +298,12 @@
    {
       new DOMWriter(writer).print(this);
    }
+   
+   private SOAPElement addUnqualifiedFaultElement(String localName) throws SOAPException
+   {
+      log.trace("addUnqualifiedFaultElement(" + localName + ")");
+      return addChildElement(new SOAPFaultElementImpl(localName));
+   }
 
    public void addFaultReasonText(String text, Locale locale) throws SOAPException
    {
@@ -265,8 +319,10 @@
 
    public QName getFaultCodeAsQName()
    {
-      //TODO: SAAJ 1.3
-      throw new NotImplementedException();
+      if (faultcode == null)
+         findFaultCodeElement();
+
+      return QNameBuilder.buildQName(faultcode, faultcode.getValue());
    }
 
    public String getFaultNode()

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPHeaderImpl.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPHeaderImpl.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPHeaderImpl.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -30,8 +30,10 @@
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPHeaderElement;
+import javax.xml.soap.Text;
 
 import org.jboss.util.NotImplementedException;
+import org.w3c.dom.Comment;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Node;
@@ -50,18 +52,6 @@
       super("Header", prefix, namespace);
    }
 
-   private SOAPHeaderElementImpl convertToHeaderElement(Node node)
-   {
-      if (!(node instanceof SOAPElementImpl))
-         throw new IllegalArgumentException("SOAPElement expected");
-
-      SOAPElementImpl element = (SOAPElementImpl)node;
-
-      // convert to SOAPHeaderElement
-      element.detachNode();
-      return new SOAPHeaderElementImpl(element);
-   }
-
    /*** Add a SOAPHeaderElement as a child of this SOAPHeader instance.
     */
    public SOAPElement addChildElement(SOAPElement child) throws SOAPException
@@ -180,7 +170,7 @@
 
    public Node appendChild(Node newChild) throws DOMException
    {
-      if (!(newChild instanceof SOAPHeaderElementImpl || newChild instanceof DocumentFragment))
+      if (needsConversionToHeaderElement(newChild))
          newChild = convertToHeaderElement(newChild);
 
       return super.appendChild(newChild);
@@ -188,7 +178,7 @@
 
    public Node insertBefore(Node newChild, Node refChild) throws DOMException
    {
-      if (!(newChild instanceof SOAPHeaderElementImpl || newChild instanceof DocumentFragment))
+      if (needsConversionToHeaderElement(newChild))
          newChild = convertToHeaderElement(newChild);
 
       return super.insertBefore(newChild, refChild);
@@ -196,7 +186,7 @@
 
    public Node replaceChild(Node newChild, Node oldChild) throws DOMException
    {
-      if (!(newChild instanceof SOAPHeaderElementImpl || newChild instanceof DocumentFragment))
+      if (needsConversionToHeaderElement(newChild))
          newChild = convertToHeaderElement(newChild);
 
       return super.replaceChild(newChild, oldChild);
@@ -225,4 +215,27 @@
       //TODO: SAAJ 1.3
       throw new NotImplementedException();
    }
+
+   private static boolean needsConversionToHeaderElement(Node newChild)
+   {
+      // JBCTS-440 #addTextNodeTest2 appends a Text node to a SOAPHeader
+      boolean validChild = newChild instanceof SOAPHeaderElementImpl;
+      validChild = validChild || newChild instanceof DocumentFragment;
+      validChild = validChild || newChild instanceof Text;
+      validChild = validChild || newChild instanceof Comment;
+      return validChild == false;
+   }
+   
+   private static SOAPHeaderElementImpl convertToHeaderElement(Node node)
+   {
+      if (!(node instanceof SOAPElementImpl))
+         throw new IllegalArgumentException("SOAPElement expected");
+
+      SOAPElementImpl element = (SOAPElementImpl)node;
+
+      // convert to SOAPHeaderElement
+      element.detachNode();
+      return new SOAPHeaderElementImpl(element);
+   }
+
 }
\ No newline at end of file

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/TextImpl.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/TextImpl.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/TextImpl.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -42,8 +42,7 @@
     */
    public boolean isComment()
    {
-      String value = getNodeValue().trim();
-      return value.startsWith("<!--") && value.endsWith("-->");
+      return domNode.getNodeType() == org.w3c.dom.Node.COMMENT_NODE;
    }
 
    public String getValue()

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/XMLContent.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/XMLContent.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/soap/XMLContent.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -41,6 +41,8 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
 
 import javax.activation.DataHandler;
 import javax.activation.DataSource;
@@ -265,7 +267,7 @@
       if (!contentRootName.equals(name))
          throw new WSException("Content root name does not match element name: " + contentRootName + " != " + name);
 
-      // Copy attributes
+      Document ownerDoc = container.getOwnerDocument();
       DOMUtils.copyAttributes(container, contentRoot);
 
       SOAPFactoryImpl soapFactory = new SOAPFactoryImpl();
@@ -289,6 +291,12 @@
                String nodeValue = child.getNodeValue();
                container.addTextNode(nodeValue);
             }
+            else if (childType == Node.COMMENT_NODE)
+            {
+               String nodeValue = child.getNodeValue();
+               Comment comment = ownerDoc.createComment(nodeValue);
+               container.appendChild(comment);
+            }            
             else if (childType == Node.CDATA_SECTION_NODE)
             {
                String nodeValue = child.getNodeValue();

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/utils/DOMUtils.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/utils/DOMUtils.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-core/src/main/java/org/jboss/ws/core/utils/DOMUtils.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -233,7 +233,17 @@
          if (namespaceURI.equals(""))
             throw new IllegalArgumentException("Cannot find namespace uri for: " + qualifiedName);
       }
-
+      else
+      {
+         Element nsElement = el;
+         while (namespaceURI.equals("") && nsElement != null)
+         {
+            namespaceURI = nsElement.getAttribute("xmlns");
+            if (namespaceURI.equals(""))
+               nsElement = getParentElement(nsElement);
+         }
+      }
+      
       qname = new QName(namespaceURI, localPart, prefix);
       return qname;
    }

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/MessageFactoryTestCase.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/MessageFactoryTestCase.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/MessageFactoryTestCase.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -25,18 +25,22 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
 
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPBodyElement;
 import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.transform.stream.StreamSource;
 
 import org.jboss.test.ws.JBossWSTest;
 import org.jboss.ws.Constants;
+import org.jboss.ws.core.jaxrpc.Style;
 import org.jboss.ws.core.soap.MessageFactoryImpl;
 import org.jboss.ws.core.utils.DOMUtils;
+import org.jboss.ws.core.utils.DOMWriter;
 import org.w3c.dom.Element;
 
 /**
@@ -153,7 +157,7 @@
    public void testPreserveComments() throws Exception
    {
       String expMsg = 
-         "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>" +
+         "<soapenv:Envelope xmlns:ns1='http://somens.org' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>" +
          " <!-- header -->" +
          " <soapenv:Header>" +
          "  <!-- header element -->" +
@@ -169,12 +173,25 @@
          " </soapenv:Body>" +
          "</soapenv:Envelope>";
       
-      MessageFactory factory = new MessageFactoryImpl();
-      ByteArrayInputStream inputStream = new ByteArrayInputStream(expMsg.getBytes());
+      // Verify that DOM parse/write do not modify the message
+      Element expEnv = DOMUtils.parse(expMsg);
+      assertEquals(expMsg, DOMWriter.printNode(expEnv, false));
+      
+      doPreserveCommentsPerStyle(expMsg, Style.DOCUMENT);
+      doPreserveCommentsPerStyle(expMsg, Style.RPC);
+      doPreserveCommentsPerStyle(expMsg, null);
+   }
+
+   private void doPreserveCommentsPerStyle(String expXML, Style style) throws IOException, SOAPException
+   {
+      MessageFactoryImpl factory = new MessageFactoryImpl();
+      factory.setStyle(style);
+      
+      ByteArrayInputStream inputStream = new ByteArrayInputStream(expXML.getBytes());
       SOAPMessage soapMsg = factory.createMessage(null, inputStream);
-      SOAPEnvelope env = soapMsg.getSOAPPart().getEnvelope();
+      SOAPEnvelope wasEnv = soapMsg.getSOAPPart().getEnvelope();
       
-      System.out.println("FIXME: [JBWS-1511] MessageFactory does not preserve comments");
-      //assertEquals(DOMUtils.parse(expMsg), (Element)env);
+      String wasXML = DOMWriter.printNode(wasEnv, false);
+      assertEquals(expXML, wasXML);
    }
 }
\ No newline at end of file

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPContentElementTestCase.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPContentElementTestCase.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPContentElementTestCase.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -1,24 +1,24 @@
 /*
-  * 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.test.ws.common.soap;
 
 import java.io.ByteArrayInputStream;
@@ -52,18 +52,11 @@
    {
       Name name = new NameImpl("Order", "tns", "http://someURI");
 
-      String xmlFragment =
-      "<tns:Order xmlns:tns='http://someURI'>" +
-       "<OrderItem>Ferarri</OrderItem>" +
-       "<OrderItem>Lamborgini</OrderItem>" +
-       "<OrderItem>JBoss Support</OrderItem>" +
-       "<Customer>" +
-        "<Name>Thomas</Name>" +
-       "</Customer>" +
-      "</tns:Order>";
+      String xmlFragment = "<tns:Order xmlns:tns='http://someURI'>" + "<OrderItem>Ferarri</OrderItem>" + "<OrderItem>Lamborgini</OrderItem>"
+            + "<OrderItem>JBoss Support</OrderItem>" + "<Customer>" + "<Name>Thomas</Name>" + "</Customer>" + "</tns:Order>";
 
       SOAPContentElement soapEl = new SOAPContentElement(name);
-      soapEl.setXMLFragment( XMLFragment.fromStringFragment(xmlFragment) );
+      soapEl.setXMLFragment(XMLFragment.fromStringFragment(xmlFragment));
 
       assertEquals(name, soapEl.getElementName());
 
@@ -95,7 +88,7 @@
       String xmlFragment = "<tns:Order xmlns:tns='http://someURI'>No child element</tns:Order>";
 
       SOAPContentElement soapEl = new SOAPContentElement(name);
-      soapEl.setXMLFragment( XMLFragment.fromStringFragment(xmlFragment) );
+      soapEl.setXMLFragment(XMLFragment.fromStringFragment(xmlFragment));
 
       assertEquals(name, soapEl.getElementName());
       assertEquals("No child element", soapEl.getValue());
@@ -109,7 +102,7 @@
       String xmlFragment = "<tns:Order xmlns:tns='http://someURI'/>";
 
       SOAPContentElement soapEl = new SOAPContentElement(name);
-      soapEl.setXMLFragment( XMLFragment.fromStringFragment(xmlFragment) );
+      soapEl.setXMLFragment(XMLFragment.fromStringFragment(xmlFragment));
 
       assertEquals(name, soapEl.getElementName());
       assertFalse(soapEl.hasChildNodes());
@@ -124,7 +117,7 @@
       String xmlFragment = "<tns:BadName xmlns:tns='http://someURI'>No child element</tns:BadName>";
 
       SOAPContentElement soapEl = new SOAPContentElement(name);
-      soapEl.setXMLFragment( XMLFragment.fromStringFragment(xmlFragment) );
+      soapEl.setXMLFragment(XMLFragment.fromStringFragment(xmlFragment));
 
       try
       {
@@ -147,7 +140,7 @@
 
       SOAPContentElement soapEl = new SOAPContentElement(name);
       soapEl.setAttribute("foo", "Kermit");
-      soapEl.setXMLFragment( XMLFragment.fromStringFragment(xmlFragment) );
+      soapEl.setXMLFragment(XMLFragment.fromStringFragment(xmlFragment));
       assertEquals(name, soapEl.getElementName());
 
       assertEquals("Kermit", soapEl.getAttributeValue(new NameImpl("foo")));
@@ -158,14 +151,8 @@
     */
    public void testTextNodeAccess() throws Exception
    {
-      String envStr =
-         "<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>" +
-         "<env:Body>" +
-         "<ns1:hello xmlns:ns1='http://handlerservice1.org/wsdl'>" +
-         "<String_1>world</String_1>" +
-         "</ns1:hello>" +
-         "</env:Body>" +
-         "</env:Envelope>";
+      String envStr = "<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>" + "<env:Body>" + "<ns1:hello xmlns:ns1='http://handlerservice1.org/wsdl'>"
+            + "<String_1>world</String_1>" + "</ns1:hello>" + "</env:Body>" + "</env:Envelope>";
 
       MessageFactory factory = MessageFactory.newInstance();
       SOAPMessage soapMessage = factory.createMessage(null, new ByteArrayInputStream(envStr.getBytes()));
@@ -185,6 +172,8 @@
       soapMessage.writeTo(baos);
 
       String expEnv = "<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'><env:Header></env:Header><env:Body><ns1:hello xmlns:ns1='http://handlerservice1.org/wsdl'><String_1>world::SOAP header was added</String_1></ns1:hello></env:Body></env:Envelope>";
+      System.out.println(expEnv);
+      System.out.println(baos.toString());
       assertEquals(expEnv, baos.toString());
    }
 }

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPFaultTestCase.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPFaultTestCase.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/common/soap/SOAPFaultTestCase.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -71,7 +71,8 @@
       assertEquals("Some fault message", soapFault.getFaultString());
       assertEquals("Some fault actor", soapFault.getFaultActor());
       assertEquals(createDetailElement(), soapFault.getDetail());
-
+      assertEquals(createDetailElement(), soapFault.getDetail());
+      
       SOAPFaultException faultEx = SOAPFaultHelperJAXRPC.getSOAPFaultException((SOAPFault)soapFault);
 
       assertEquals(Constants.SOAP11_FAULT_CODE_CLIENT, faultEx.getFaultCode());

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -1,24 +1,24 @@
 /*
-  * 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.test.ws.jaxrpc.marshall;
 
 import java.math.BigDecimal;
@@ -36,7 +36,7 @@
 
 /**
  * Test standard JAX-RPC types.
- *
+ * 
  * @author Thomas.Diesler at jboss.org
  * @since 15-Feb-2005
  */
@@ -227,8 +227,8 @@
    {
       Calendar in = new GregorianCalendar(1968, 5, 16, 14, 23, 55);
       /**
-       * Will be a problem where the JVM is running in a TZ which
-       * has Daylight Saving Time influence. So offset the TZ to GMT.
+       * Will be a problem where the JVM is running in a TZ which has Daylight
+       * Saving Time influence. So offset the TZ to GMT.
        */
       in.setTimeZone(TimeZone.getTimeZone("GMT-0"));
       Calendar out = calendarTest(in);
@@ -607,6 +607,11 @@
       String in = "one";
       String out = stringTest(in);
       assertEquals(in, out);
+      
+      System.out.println("FIXME: [JBWS-1617] JAXRPC doc/literal trims empty string");
+      //in = "   ";
+      //out = stringTest(in);
+      //assertEquals(in, out);
    }
 
    public void testStringSpecialChars() throws Exception

Modified: branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/samples/provider/ProviderPayloadTestCase.java
===================================================================
--- branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/samples/provider/ProviderPayloadTestCase.java	2007-04-26 12:07:14 UTC (rev 2929)
+++ branches/jbossws-1.2.0.GA_JBWS-1610/jbossws-tests/src/main/java/org/jboss/test/ws/jaxws/samples/provider/ProviderPayloadTestCase.java	2007-04-26 12:34:40 UTC (rev 2930)
@@ -101,6 +101,7 @@
    {
       String reqString =
          "<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>" +
+         "  <env:Header/>" +
          "  <env:Body>" +
          "    <ns1:somePayload xmlns:ns1='http://org.jboss.ws/provider'/>" +
          "  </env:Body>" +




More information about the jbossws-commits mailing list