You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by gd...@apache.org on 2007/03/07 07:57:21 UTC

svn commit: r515477 - in /webservices/commons/trunk/modules/axiom/modules: axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java

Author: gdaniels
Date: Tue Mar  6 22:57:21 2007
New Revision: 515477

URL: http://svn.apache.org/viewvc?view=rev&rev=515477
Log:
A few small changes.

* Store away the namespace when building the SOAP envelope in StAXSOAPModelBuilder - this will help to clean up identifySOAPVersion() among other things.

* Stop doing case-insensitive comparisons when parsing SOAP - XML is case sensitive.

* Clean up SOAPEnvelopeImpl.getHeader() a little, since <soapenv:Header> will always be the first element inside the envelope if it's present.

I ran the Axiom tests and the Axis2 build successfully, but am not 100% confident that the new axiom jars made it over to my m2 repository... if there are any problems I'll be up in about 6-7 hours.

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
    webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java?view=diff&rev=515477&r1=515476&r2=515477
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java Tue Mar  6 22:57:21 2007
@@ -50,6 +50,7 @@
      */
     private SOAPEnvelope envelope;
     private OMNamespace envelopeNamespace;
+    private String namespaceURI;
 
 
     private SOAPFactory soapFactory;
@@ -230,14 +231,14 @@
 
             // Now I've found a SOAP Envelope, now create SOAPDocument and SOAPEnvelope here.
 
-            if (!elementName.equalsIgnoreCase(SOAPConstants.SOAPENVELOPE_LOCAL_NAME)) {
+            if (!elementName.equals(SOAPConstants.SOAPENVELOPE_LOCAL_NAME)) {
                 throw new SOAPProcessingException("First Element must contain the local name, "
-                        + SOAPConstants.SOAPENVELOPE_LOCAL_NAME, SOAPConstants.FAULT_CODE_VERSION_MISMATCH);
+                        + SOAPConstants.SOAPENVELOPE_LOCAL_NAME, SOAPConstants.FAULT_CODE_SENDER);
             }
 
             // determine SOAP version and from that determine a proper factory here.
             if (soapFactory == null) {
-                String namespaceURI = this.parser.getNamespaceURI();
+                namespaceURI = this.parser.getNamespaceURI();
                 if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
                     soapFactory = OMAbstractFactory.getSOAP12Factory();
                     if(isDebugEnabled) {
@@ -252,6 +253,8 @@
                     throw new SOAPProcessingException("Only SOAP 1.1 or SOAP 1.2 messages are supported in the" +
                             " system", SOAPConstants.FAULT_CODE_VERSION_MISMATCH);
                 }
+            } else {
+                namespaceURI = soapFactory.getSoapVersionURI();
             }
 
             // create a SOAPMessage to hold the SOAP envelope and assign the SOAP envelope in that.
@@ -268,6 +271,15 @@
             processAttributes(element);
 
         } else if (elementLevel == 2) {
+            // Must be in the right namespace regardless
+            String elementNS = parser.getNamespaceURI();
+
+            if (!(namespaceURI.equals(elementNS))) {
+                if (!bodyPresent || !SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
+                    throw new SOAPProcessingException("Disallowed element found inside Envelope : {"
+                                                        + elementNS + "}" + elementName);
+                }
+            }
 
             // this is either a header or a body
             if (elementName.equals(SOAPConstants.HEADER_LOCAL_NAME)) {
@@ -304,7 +316,7 @@
             }
         } else if ((elementLevel == 3)
                 &&
-                parent.getLocalName().equalsIgnoreCase(SOAPConstants.HEADER_LOCAL_NAME)) {
+                parent.getLocalName().equals(SOAPConstants.HEADER_LOCAL_NAME)) {
 
             // this is a headerblock
             try {
@@ -318,8 +330,8 @@
             processAttributes(element);
 
         } else if ((elementLevel == 3) &&
-                parent.getLocalName().equalsIgnoreCase(SOAPConstants.BODY_LOCAL_NAME) &&
-                elementName.equalsIgnoreCase(SOAPConstants.BODY_FAULT_LOCAL_NAME)) {
+                parent.getLocalName().equals(SOAPConstants.BODY_LOCAL_NAME) &&
+                elementName.equals(SOAPConstants.BODY_FAULT_LOCAL_NAME)) {
 
             // this is a headerblock
             element = soapFactory.createSOAPFault((SOAPBody) parent, this);

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java?view=diff&rev=515477&r1=515476&r2=515477
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java Tue Mar  6 22:57:21 2007
@@ -77,15 +77,21 @@
      * @throws OMException
      */
     public SOAPHeader getHeader() throws OMException {
-        SOAPHeader header =
-                (SOAPHeader) getFirstChildWithName(
-                        HEADER_QNAME);
-        if (builder == null && header == null) {
-            inferFactory();
-            header = ((SOAPFactory) factory).createSOAPHeader(this);
-            addChild(header);
+        // Header must be the first child
+        OMElement header = getFirstElement();
+        if (header == null) {
+            if (builder == null) {
+                inferFactory();
+                header = ((SOAPFactory) factory).createSOAPHeader(this);
+                addChild(header);
+            } else {
+                return null;
+            }
+        } else if (!(header instanceof SOAPHeader)) {
+            return null;
         }
-        return header;
+
+        return (SOAPHeader)header;
     }
 
     private void inferFactory() {



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