[jbossws-commits] JBossWS SVN: r2445 - in trunk/jbossws-core/src/main/java/org/jboss/ws: core/soap and 1 other directory.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Fri Feb 23 04:01:37 EST 2007


Author: alex.guizar at jboss.com
Date: 2007-02-23 04:01:36 -0500 (Fri, 23 Feb 2007)
New Revision: 2445

Modified:
   trunk/jbossws-core/src/main/java/org/jboss/ws/Constants.java
   trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java
   trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPElementImpl.java
Log:
JBCTS-438

Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/Constants.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/Constants.java	2007-02-23 03:03:43 UTC (rev 2444)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/Constants.java	2007-02-23 09:01:36 UTC (rev 2445)
@@ -148,6 +148,7 @@
    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 Name SOAP12_FAULT = new NameImpl("Fault", PREFIX_ENV, NS_SOAP12_ENV);
 
    /** The default RPC return parameter name */
    static final String DEFAULT_RPC_RETURN_NAME = "result"; // FIXME: According to JSR-181 this should be 'return'

Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java	2007-02-23 03:03:43 UTC (rev 2444)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPBodyImpl.java	2007-02-23 09:01:36 UTC (rev 2445)
@@ -48,7 +48,6 @@
 import javax.xml.transform.stream.StreamSource;
 
 import org.jboss.logging.Logger;
-import org.jboss.util.NotImplementedException;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
 import org.jboss.ws.core.CommonMessageContext;
@@ -218,17 +217,24 @@
    {
       log.trace("getFault");
       expandToDOM();
-      Iterator it = getChildElements(new NameImpl("Fault", Constants.PREFIX_ENV, getSOAPEnvelope().getNamespaceURI()));
-      return (it.hasNext() ? (SOAPFault)it.next() : null);
+      Iterator it = getFaultIterator();
+      return it.hasNext() ? (SOAPFault)it.next() : null;
    }
 
    public boolean hasFault()
    {
       log.trace("hasFault");
       expandToDOM();
-      return getChildElements(Constants.SOAP11_FAULT).hasNext();
+      return getFaultIterator().hasNext();
    }
 
+   private Iterator getFaultIterator()
+   {
+      Name faultName = Constants.NS_SOAP11_ENV.equals(getNamespaceURI()) ? 
+            Constants.SOAP11_FAULT : Constants.SOAP12_FAULT;
+      return getChildElements(faultName);
+   }
+
    public Node appendChild(Node newChild) throws DOMException
    {
       log.trace("appendChild: " + newChild.getNodeName());
@@ -448,7 +454,38 @@
 
    public Document extractContentAsDocument() throws SOAPException
    {
-      //TODO: SAAJ 1.3
-      throw new NotImplementedException();
+      log.trace("extractContentAsDocument");
+      expandToDOM();
+
+      Iterator childElements = DOMUtils.getChildElements(this);
+      // zero child elements?
+      if (!childElements.hasNext()) 
+         throw new SOAPException("there is no child SOAPElement of this SOAPBody");         
+
+      SOAPElementImpl childElement = (SOAPElementImpl)childElements.next();
+
+      // more than one child element?
+      if (childElements.hasNext())
+         throw new SOAPException("there is more than one child SOAPElement of this SOAPBody");
+
+      if (childElement instanceof SOAPContentElement)
+      {
+         // cause expansion to DOM
+         SOAPContentElement contentElement = (SOAPContentElement) childElement;
+         // TODO change visibility of SOAPContentElement.expandToDOM() to package? 
+         contentElement.getPayload();
+      }
+
+      // child SOAPElement is removed as part of this process
+      childElement.detachNode();
+      
+      /* child element's owner document might be shared with other elements;
+       * we have to create a separate document for returning to our caller
+       */
+      Document newDocument = DOMUtils.getDocumentBuilder().newDocument();
+      Node adoptedElement = newDocument.adoptNode(childElement.domNode);
+      newDocument.appendChild(adoptedElement);
+
+      return newDocument;
    }
 }

Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPElementImpl.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPElementImpl.java	2007-02-23 03:03:43 UTC (rev 2444)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/core/soap/SOAPElementImpl.java	2007-02-23 09:01:36 UTC (rev 2445)
@@ -44,6 +44,7 @@
 import org.jboss.ws.core.utils.DOMUtils;
 import org.w3c.dom.Attr;
 import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.NodeList;
@@ -68,8 +69,8 @@
    private Element element;
    // The element name
    private Name elementName;
-   /* The element's encoding style
-    * JBCTS-440 #getEncodingStyleTest1 expects the initial value of the 
+   // The element's encoding style
+   /* JBCTS-440 #getEncodingStyleTest1 expects the initial value of the 
     * encodingStyle property to be null
     */
    private String encodingStyle = null;
@@ -143,39 +144,13 @@
       if (Constants.NS_SOAP11_ENV.equals(getNamespaceURI()) || Constants.NS_SOAP12_ENV.equals(getNamespaceURI()))
          throw new SOAPException("Changing the name of this SOAP Element is not allowed: " + getLocalName());
 
-      // Since DOM Elements do not support renaming, we must copy the content
-      Element copy = DOMUtils.createElement(qname.getLocalPart(), qname.getPrefix(), qname.getNamespaceURI());
+      elementName = new NameImpl(qname);
 
-      // copy attributes (and namespaces by the way)
-      NamedNodeMap attributes = element.getAttributes();
-      for (int i = 0; i < attributes.getLength(); i++)
-      {
-         org.w3c.dom.Node attribute = attributes.item(i);
+      Document owner = domNode.getOwnerDocument();
+      domNode = owner.renameNode(domNode, elementName.getURI(), elementName.getQualifiedName());
+      element = (Element)domNode;
 
-         // DOM disallows moving an attribute, it must explicitly be cloned
-         copy.setAttributeNode((Attr)attribute.cloneNode(true));
-      }
-
-      // move child nodes
-      for (org.w3c.dom.Node child = element.getFirstChild(), next; child != null; child = next)
-      {
-         next = child.getNextSibling();
-
-         // DOM removes a node from the tree before adding it to a different element
-         copy.appendChild(child);
-      }
-
-      // replace element with copy
-      org.w3c.dom.Node parent = element.getParentNode();
-      if (parent != null)
-         parent.replaceChild(copy, element);
-
-      // update fields
-      domNode = copy;
-      element = copy;
-      elementName = null; // getElementName() regenerates this field
-
-      return this;
+      return this.completeNamespaceDeclaration();
    }
 
    /**
@@ -460,7 +435,7 @@
       String nsURI = getNamespaceURI(prefix);
       if (nsURI == null)
          throw new SOAPException("CAnnot obtain namespace URI for prefix: " + prefix);
-      
+
       return new QName(nsURI, localName, prefix);
    }
 




More information about the jbossws-commits mailing list