You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2006/12/22 04:43:38 UTC

svn commit: r489554 - in /webservices/axis2/trunk/java/modules: saaj-api/src/javax/xml/soap/ saaj/src/org/apache/axis2/saaj/

Author: dims
Date: Thu Dec 21 19:43:37 2006
New Revision: 489554

URL: http://svn.apache.org/viewvc?view=rev&rev=489554
Log:
- Add if/then for using the correct soap version
- Fix SOAPFactory#newInstance to work correctly given a soap version
- Fix bad code in SAAJResult#getResult() [check if it is a SOAPPart before trying to use dom]


Modified:
    webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SAAJResult.java
    webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SOAPFactory.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFactoryImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java

Modified: webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SAAJResult.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SAAJResult.java?view=diff&rev=489554&r1=489553&r2=489554
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SAAJResult.java (original)
+++ webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SAAJResult.java Thu Dec 21 19:43:37 2006
@@ -18,6 +18,8 @@
 
 import javax.xml.transform.dom.DOMResult;
 
+import org.w3c.dom.*;
+
 public class SAAJResult extends DOMResult {
 
     public SAAJResult()
@@ -39,6 +41,14 @@
     }
 
     public javax.xml.soap.Node getResult() {
-        return (javax.xml.soap.Node) super.getNode().getFirstChild();
+        org.w3c.dom.Node node = super.getNode();
+        if(node instanceof SOAPPart){
+            try {
+                return ((SOAPPart)node).getEnvelope();
+            } catch (SOAPException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return (javax.xml.soap.Node) node.getFirstChild();
     }
 }

Modified: webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SOAPFactory.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SOAPFactory.java?view=diff&rev=489554&r1=489553&r2=489554
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SOAPFactory.java (original)
+++ webservices/axis2/trunk/java/modules/saaj-api/src/javax/xml/soap/SOAPFactory.java Thu Dec 21 19:43:37 2006
@@ -15,6 +15,9 @@
  */
 package javax.xml.soap;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+
 /**
  * <code>SOAPFactory</code> is a factory for creating various objects
  * that exist in the SOAP XML tree.
@@ -145,13 +148,20 @@
     }
 
     public static SOAPFactory newInstance(String s) throws SOAPException {
-
-        try {
-            return (SOAPFactory) Class.forName(s).newInstance();
-        } catch (Exception exception) {
-            throw new SOAPException("Unable to create SOAP Factory: "
-                    + exception.getMessage());
+        SOAPFactory factory = newInstance();
+        if (factory.getClass().getName().equals(DEFAULT_SF)) {
+            try {
+                Method m = factory.getClass().getMethod("setSOAPVersion", new Class[]{String.class});
+                m.invoke(factory, new Object[]{s});
+            } catch (IllegalAccessException e) {
+                throw new SOAPException(e);
+            } catch (InvocationTargetException e) {
+                throw new SOAPException(e);
+            } catch (NoSuchMethodException e) {
+                throw new SOAPException(e);
+            }
         }
+        return factory;
     }
 
     public SOAPElement createElement(org.w3c.dom.Element element)

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java?view=diff&rev=489554&r1=489553&r2=489554
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java Thu Dec 21 19:43:37 2006
@@ -16,12 +16,15 @@
 package org.apache.axis2.saaj;
 
 import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.om.impl.dom.DocumentImpl;
 import org.apache.axiom.om.impl.dom.ElementImpl;
 import org.apache.axiom.om.impl.dom.NamespaceImpl;
 import org.apache.axiom.om.impl.dom.NodeImpl;
 import org.apache.axiom.soap.impl.dom.soap11.SOAP11FaultImpl;
+import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
+import org.apache.axiom.soap.impl.dom.soap12.SOAP12FaultImpl;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
@@ -154,7 +157,13 @@
         if (isBodyElementAdded) {
             throw new SOAPException("A SOAPBodyElement has been already added to this SOAPBody");
         }
-        SOAP11FaultImpl fault = new SOAP11FaultImpl(omSOAPBody, (SOAPFactory)this.element.getOMFactory());
+        SOAPFactory omFactory = (SOAPFactory) this.element.getOMFactory();
+        org.apache.axiom.soap.SOAPFault fault;
+        if(omFactory instanceof SOAP11Factory) {
+            fault = new SOAP11FaultImpl(omSOAPBody,  omFactory);
+        } else {
+            fault = new SOAP12FaultImpl(omSOAPBody,  omFactory);
+        }
         SOAPFaultImpl saajSOAPFault = new SOAPFaultImpl(fault);
         ((NodeImpl) omSOAPBody.getFault()).setUserData(SAAJ_NODE, saajSOAPFault, null);
         return saajSOAPFault;
@@ -413,8 +422,14 @@
                 // silently replace node, as per saaj 1.2 spec
                 if (domNode instanceof ElementImpl) {
                     if (omSOAPBody.hasFault()) {
-                        SOAP11FaultImpl fault = new SOAP11FaultImpl(omSOAPBody,
-                                (SOAPFactory) this.element.getOMFactory());
+
+                        SOAPFactory omFactory = (SOAPFactory) this.element.getOMFactory();
+                        org.apache.axiom.soap.SOAPFault fault;
+                        if(omFactory instanceof SOAP11Factory) {
+                            fault = new SOAP11FaultImpl(omSOAPBody,  omFactory);
+                        } else {
+                            fault = new SOAP12FaultImpl(omSOAPBody,  omFactory);
+                        }
                         SOAPFaultImpl saajSOAPFault = new SOAPFaultImpl(fault);
                         ((NodeImpl) omSOAPBody.getFault()).setUserData(SAAJ_NODE, saajSOAPFault, null);
                         childElements.add(saajSOAPFault);

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java?view=diff&rev=489554&r1=489553&r2=489554
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java Thu Dec 21 19:43:37 2006
@@ -21,6 +21,8 @@
 import org.apache.axiom.om.impl.dom.TextImpl;
 import org.apache.axiom.soap.impl.dom.soap11.SOAP11BodyImpl;
 import org.apache.axiom.soap.impl.dom.soap11.SOAP11HeaderImpl;
+import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
+import org.apache.axiom.soap.impl.dom.soap12.SOAP12HeaderImpl;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
@@ -154,10 +156,18 @@
     public SOAPHeader addHeader() throws SOAPException {
         org.apache.axiom.soap.SOAPHeader header = omSOAPEnvelope.getHeader();
         if (header == null) {
-            header = new SOAP11HeaderImpl(omSOAPEnvelope,
-                    (SOAPFactory) this.element.getOMFactory());
-            SOAPHeaderImpl saajSOAPHeader = new SOAPHeaderImpl(header);
-            saajSOAPHeader.setParentElement(this);
+            SOAPHeaderImpl saajSOAPHeader;
+            if(this.element.getOMFactory() instanceof SOAP11Factory) {
+                header = new SOAP11HeaderImpl(omSOAPEnvelope,
+                        (SOAPFactory) this.element.getOMFactory());
+                saajSOAPHeader = new SOAPHeaderImpl(header);
+                saajSOAPHeader.setParentElement(this);
+            } else {
+                header = new SOAP12HeaderImpl(omSOAPEnvelope,
+                        (SOAPFactory) this.element.getOMFactory());
+                saajSOAPHeader = new SOAPHeaderImpl(header);
+                saajSOAPHeader.setParentElement(this);
+            }
             ((NodeImpl) omSOAPEnvelope.getHeader()).setUserData(SAAJ_NODE, saajSOAPHeader, null);
             return saajSOAPHeader;
         } else {

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFactoryImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFactoryImpl.java?view=diff&rev=489554&r1=489553&r2=489554
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFactoryImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFactoryImpl.java Thu Dec 21 19:43:37 2006
@@ -27,6 +27,7 @@
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPFactory;
 import javax.xml.soap.SOAPFault;
+import javax.xml.soap.SOAPConstants;
 import javax.xml.namespace.QName;
 
 /**
@@ -34,6 +35,8 @@
  */
 public class SOAPFactoryImpl extends SOAPFactory {
 
+    protected String soapVersion = SOAPConstants.SOAP_1_1_PROTOCOL;
+
     /**
      * Create a <code>SOAPElement</code> object initialized with the
      * given <code>Name</code> object.
@@ -49,7 +52,13 @@
         String localName = name.getLocalName();
         String prefix = name.getPrefix();
         String uri = name.getURI();
-        OMElement omElement = DOOMAbstractFactory.getOMFactory().createOMElement(localName, uri, prefix);
+        OMElement omElement = null;
+        if (soapVersion.equals(SOAPConstants.SOAP_1_2_PROTOCOL)) {
+            omElement = DOOMAbstractFactory.getSOAP12Factory().createOMElement(localName, uri, prefix);
+        } else {
+            omElement = DOOMAbstractFactory.getSOAP11Factory().createOMElement(localName, uri, prefix);
+        }
+        DOOMAbstractFactory.getOMFactory().createOMElement(localName, uri, prefix);
         return new SOAPElementImpl((ElementImpl) omElement);
     }
 
@@ -65,8 +74,12 @@
      *                                      <code>SOAPElement</code> object
      */
     public SOAPElement createElement(String localName) throws SOAPException {
-        OMDOMFactory omdomFactory = (OMDOMFactory) DOOMAbstractFactory.getOMFactory();
-
+        OMDOMFactory omdomFactory = null;
+        if (soapVersion.equals(SOAPConstants.SOAP_1_2_PROTOCOL)) {
+            omdomFactory = (OMDOMFactory) DOOMAbstractFactory.getSOAP12Factory();
+        } else {
+            omdomFactory = (OMDOMFactory) DOOMAbstractFactory.getSOAP11Factory();
+        }
         OMNamespace ns = omdomFactory.createOMNamespace(null, null);
         OMElement omElement = omdomFactory.createOMElement(localName, ns);
         return new SOAPElementImpl((ElementImpl) omElement);
@@ -87,7 +100,12 @@
      *                                      <code>SOAPElement</code> object
      */
     public SOAPElement createElement(String localName, String prefix, String uri) throws SOAPException {
-        OMElement omElement = DOOMAbstractFactory.getOMFactory().createOMElement(localName, uri, prefix);
+        OMElement omElement = null;
+        if (soapVersion.equals(SOAPConstants.SOAP_1_2_PROTOCOL)) {
+            omElement = DOOMAbstractFactory.getSOAP12Factory().createOMElement(localName, uri, prefix);
+        } else {
+            omElement = DOOMAbstractFactory.getSOAP11Factory().createOMElement(localName, uri, prefix);
+        }
         return new SOAPElementImpl((ElementImpl) omElement);
     }
 
@@ -103,7 +121,11 @@
      * @throws javax.xml.soap.SOAPException if there is a SOAP error
      */
     public Detail createDetail() throws SOAPException { 
-        return new DetailImpl(DOOMAbstractFactory.getSOAP11Factory().createSOAPFaultDetail());
+        if (soapVersion.equals(SOAPConstants.SOAP_1_2_PROTOCOL)) {
+            return new DetailImpl(DOOMAbstractFactory.getSOAP12Factory().createSOAPFaultDetail());
+        } else {
+            return new DetailImpl(DOOMAbstractFactory.getSOAP11Factory().createSOAPFaultDetail());
+        }
     }
 
     /**
@@ -148,5 +170,9 @@
 
     public SOAPFault createFault(String s, QName qname) throws SOAPException {
         return null;  //TODO - Not yet implemented
+    }
+
+    public void setSOAPVersion(String soapVersion){
+        this.soapVersion = soapVersion;
     }
 }

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java?view=diff&rev=489554&r1=489553&r2=489554
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java Thu Dec 21 19:43:37 2006
@@ -22,6 +22,7 @@
 import org.apache.axiom.soap.SOAPFaultRole;
 import org.apache.axiom.soap.SOAPFaultText;
 import org.apache.axiom.soap.SOAPFaultValue;
+import org.apache.axiom.soap.SOAPFaultDetail;
 import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
 import org.apache.axiom.om.impl.dom.ElementImpl;
 import org.apache.axiom.om.impl.dom.NodeImpl;
@@ -29,6 +30,8 @@
 import org.apache.axiom.soap.impl.dom.soap11.SOAP11FaultReasonImpl;
 import org.apache.axiom.soap.impl.dom.soap11.SOAP11FaultRoleImpl;
 import org.apache.axiom.soap.impl.dom.soap11.SOAP11FaultTextImpl;
+import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
+import org.apache.axiom.soap.impl.dom.soap12.SOAP12FaultDetailImpl;
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.Detail;
@@ -186,8 +189,15 @@
                                     "Please remove the existing Detail element before " +
                                     "calling addDetail()");
         }
-        SOAP11FaultDetailImpl omDetail = new SOAP11FaultDetailImpl(this.fault,
-                (SOAPFactory) this.element.getOMFactory());
+        SOAPFaultDetail omDetail;
+        SOAPFactory factory = (SOAPFactory) this.element.getOMFactory();
+        if (factory instanceof SOAP11Factory) {
+            omDetail = new SOAP11FaultDetailImpl(this.fault,
+                    factory);
+        } else {
+            omDetail = new SOAP12FaultDetailImpl(this.fault,
+                    factory);
+        }
         Detail saajDetail = new DetailImpl(omDetail);
         ((NodeImpl) fault.getDetail()).setUserData(SAAJ_NODE, saajDetail, null);
         isDetailAdded = true;

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java?view=diff&rev=489554&r1=489553&r2=489554
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java Thu Dec 21 19:43:37 2006
@@ -15,14 +15,9 @@
  */
 package org.apache.axis2.saaj;
 
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.OMNode;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.SOAPHeaderBlock;
-import org.apache.axiom.om.impl.dom.ElementImpl;
-import org.apache.axiom.om.impl.dom.NamespaceImpl;
-import org.apache.axiom.om.impl.dom.NodeImpl;
-import org.apache.axiom.soap.impl.dom.soap11.SOAP11HeaderBlockImpl;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.Name;
@@ -31,9 +26,17 @@
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPHeaderElement;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
+
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.dom.ElementImpl;
+import org.apache.axiom.om.impl.dom.NamespaceImpl;
+import org.apache.axiom.om.impl.dom.NodeImpl;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
+import org.apache.axiom.soap.impl.dom.soap11.SOAP11HeaderBlockImpl;
+import org.apache.axiom.soap.impl.dom.soap12.SOAP12HeaderBlockImpl;
 
 public class SOAPHeaderImpl extends SOAPElementImpl implements SOAPHeader {
 
@@ -73,8 +76,14 @@
     */
     public SOAPElement addChildElement(String localName, String prefix, String uri) throws SOAPException {
         OMNamespace ns = new NamespaceImpl(uri, prefix);
-        SOAPHeaderBlock headerBlock =
-                new SOAP11HeaderBlockImpl(localName, ns, omSOAPHeader, (SOAPFactory)this.element.getOMFactory());
+        SOAPHeaderBlock headerBlock = null;
+        if (this.element.getOMFactory() instanceof SOAP11Factory) {
+            headerBlock = new SOAP11HeaderBlockImpl(localName, ns, omSOAPHeader,
+                    (SOAPFactory) this.element.getOMFactory());
+        } else {
+            headerBlock = new SOAP12HeaderBlockImpl(localName, ns, omSOAPHeader,
+                    (SOAPFactory) this.element.getOMFactory());
+        }
         SOAPHeaderElementImpl soapHeaderElement = new SOAPHeaderElementImpl(headerBlock);
         element.setUserData(SAAJ_NODE, this, null);
         soapHeaderElement.element.setUserData(SAAJ_NODE, soapHeaderElement, null);
@@ -95,10 +104,17 @@
     public SOAPElement addChildElement(SOAPElement soapElement) throws SOAPException {
         OMNamespace ns = new NamespaceImpl(soapElement.getNamespaceURI(), 
                 soapElement.getPrefix());
-        SOAPHeaderBlock headerBlock =
-                new SOAP11HeaderBlockImpl(soapElement.getLocalName(), ns, 
-                        omSOAPHeader,
-                        (SOAPFactory)this.element.getOMFactory());
+        SOAPHeaderBlock headerBlock = null;
+        if (this.element.getOMFactory() instanceof SOAP11Factory) {
+            headerBlock = new SOAP11HeaderBlockImpl(soapElement.getLocalName(), ns,
+                    omSOAPHeader,
+                    (SOAPFactory)this.element.getOMFactory());
+        } else {
+            headerBlock = new SOAP12HeaderBlockImpl(soapElement.getLocalName(), ns,
+                    omSOAPHeader,
+                    (SOAPFactory)this.element.getOMFactory());
+
+        }
         SOAPHeaderElementImpl soapHeaderElement = new SOAPHeaderElementImpl(headerBlock);
         element.setUserData(SAAJ_NODE, this, null);
         soapHeaderElement.element.setUserData(SAAJ_NODE, soapHeaderElement, null);
@@ -121,9 +137,14 @@
      */
     public SOAPHeaderElement addHeaderElement(Name name) throws SOAPException {
         OMNamespace ns = new NamespaceImpl(name.getURI(), name.getPrefix());
-        SOAPHeaderBlock headerBlock =
-                new SOAP11HeaderBlockImpl(name.getLocalName(), ns, omSOAPHeader,
-                        (SOAPFactory)this.element.getOMFactory());
+        SOAPHeaderBlock headerBlock = null;
+        if (this.element.getOMFactory() instanceof SOAP11Factory) {
+            headerBlock = new SOAP11HeaderBlockImpl(name.getLocalName(), ns, omSOAPHeader,
+                    (SOAPFactory) this.element.getOMFactory());
+        } else {
+            headerBlock = new SOAP12HeaderBlockImpl(name.getLocalName(), ns, omSOAPHeader,
+                    (SOAPFactory) this.element.getOMFactory());
+        }
         SOAPHeaderElementImpl soapHeaderElement = new SOAPHeaderElementImpl(headerBlock);
         element.setUserData(SAAJ_NODE, this, null);
         soapHeaderElement.element.setUserData(SAAJ_NODE, soapHeaderElement, null);



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org