Author: gdaniels
Date: Thu Mar 15 18:29:03 2007
New Revision: 518824

URL: http://svn.apache.org/viewvc?view=rev&rev=518824
Log:
* Fix DOOM bug in SOAPEnvelopeImpl where it would allow a SOAPHeader to come 
after a SOAPBody.  This was being masked by getHeader(), which used to call 
getFirstChildWithName() - so of course the header would show up even though it 
was after the body.  Once I fixed getHeader() to only check the first element, 
a SAAJ test started breaking because getHeader() was returning null.

* Add a test to make sure we don't regress the above.

* More work on versioning, move static QName constants up to SOAP*Constants 
interface, and provide a way to get MU faultcode QName from SOAPVersion.

* Make sure a null RolePlayer means doing the default search (ultimate receiver 
and next, but nothing else) for targeted headers.

Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Constants.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Version.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Constants.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Version.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAPVersion.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeTest.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Constants.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Constants.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Constants.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Constants.java
 Thu Mar 15 18:29:03 2007
@@ -16,32 +16,38 @@
 
 package org.apache.axiom.soap;
 
+import javax.xml.namespace.QName;
+
 
 public interface SOAP11Constants extends SOAPConstants {
     /** Eran Chinthaka ([EMAIL PROTECTED]) */
-    public static final String SOAP_ENVELOPE_NAMESPACE_URI =
+    static final String SOAP_ENVELOPE_NAMESPACE_URI =
             "http://schemas.xmlsoap.org/soap/envelope/";;
-    public static final String SOAP_ENCODING_NAMESPACE_URI =
+    static final String SOAP_ENCODING_NAMESPACE_URI =
             "http://schemas.xmlsoap.org/soap/encoding/";;
 
     /** Field ATTR_ACTOR */
-    public static final String ATTR_ACTOR = "actor";
+    static final String ATTR_ACTOR = "actor";
 
     /** Field SOAP_FAULT_CODE_LOCAL_NAME */
-    public static final String SOAP_FAULT_CODE_LOCAL_NAME = "faultcode";
+    static final String SOAP_FAULT_CODE_LOCAL_NAME = "faultcode";
     /** Field SOAP_FAULT_STRING_LOCAL_NAME */
-    public static final String SOAP_FAULT_STRING_LOCAL_NAME = "faultstring";
+    static final String SOAP_FAULT_STRING_LOCAL_NAME = "faultstring";
     /** Field SOAP_FAULT_ACTOR_LOCAL_NAME */
-    public static final String SOAP_FAULT_ACTOR_LOCAL_NAME = "faultactor";
+    static final String SOAP_FAULT_ACTOR_LOCAL_NAME = "faultactor";
 
-    public static final String SOAP_FAULT_DETAIL_LOCAL_NAME = "detail";
+    static final String SOAP_FAULT_DETAIL_LOCAL_NAME = "detail";
 
     //SOAP 1.2 Content Type
-    public static final String SOAP_11_CONTENT_TYPE = "text/xml";
+    static final String SOAP_11_CONTENT_TYPE = "text/xml";
+
+    static final QName QNAME_ACTOR = new QName(SOAP_ENVELOPE_NAMESPACE_URI, 
ATTR_ACTOR);
+    static final QName QNAME_MU_FAULTCODE = new 
QName(SOAP_ENVELOPE_NAMESPACE_URI,
+                                                      
FAULT_CODE_MUST_UNDERSTAND);
 
     // -------- SOAP Fault Codes ------------------------------
-    public static final String FAULT_CODE_SENDER = "Client";
-    public static final String FAULT_CODE_RECEIVER = "Server";
+    static final String FAULT_CODE_SENDER = "Client";
+    static final String FAULT_CODE_RECEIVER = "Server";
 
-    public static final String SOAP_ACTOR_NEXT = 
"http://schemas.xmlsoap.org/soap/actor/next";;
+    static final String SOAP_ACTOR_NEXT = 
"http://schemas.xmlsoap.org/soap/actor/next";;
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Version.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Version.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Version.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP11Version.java
 Thu Mar 15 18:29:03 2007
@@ -24,8 +24,6 @@
     private static final SOAP11Version singleton = new SOAP11Version();
     public static SOAP11Version getSingleton() { return singleton; }
 
-    QName actorQName = new QName(SOAP_ENVELOPE_NAMESPACE_URI, ATTR_ACTOR);
-
     private SOAP11Version() {
     }
 
@@ -41,11 +39,16 @@
 
     /** Obtain the QName for the role attribute (actor/role) */
     public QName getRoleAttributeQName() {
-        return actorQName;
+        return QNAME_ACTOR;
     }
 
     /** Obtain the "next" role/actor URI */
     public String getNextRoleURI() {
         return SOAP_ACTOR_NEXT;
+    }
+
+    /** Obtain the QName for the MustUnderstand fault code */
+    public QName getMustUnderstandFaultCode() {
+        return QNAME_MU_FAULTCODE;
     }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Constants.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Constants.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Constants.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Constants.java
 Thu Mar 15 18:29:03 2007
@@ -16,6 +16,8 @@
 
 package org.apache.axiom.soap;
 
+import javax.xml.namespace.QName;
+
 
 public interface SOAP12Constants extends SOAPConstants {
     /** Eran Chinthaka ([EMAIL PROTECTED]) */
@@ -59,6 +61,11 @@
 
     //SOAP 1.2 Content Type
     public static final String SOAP_12_CONTENT_TYPE = "application/soap+xml";
+
+    // QNames
+    static final QName QNAME_ROLE = new QName(SOAP_ENVELOPE_NAMESPACE_URI, 
SOAP_ROLE);
+    static final QName QNAME_MU_FAULTCODE = new 
QName(SOAP_ENVELOPE_NAMESPACE_URI,
+                                                      
FAULT_CODE_MUST_UNDERSTAND);
 
     // -------- SOAP Fault Codes ------------------------------
     public static final String FAULT_CODE_SENDER = "Sender";

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Version.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Version.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Version.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAP12Version.java
 Thu Mar 15 18:29:03 2007
@@ -24,8 +24,6 @@
     private static final SOAP12Version singleton = new SOAP12Version();
     public static SOAP12Version getSingleton() { return singleton; }
 
-    QName actorQName = new QName(SOAP_ENVELOPE_NAMESPACE_URI, SOAP_ROLE);
-
     private SOAP12Version() {
     }
 
@@ -41,11 +39,16 @@
 
     /** Obtain the QName for the role attribute (actor/role) */
     public QName getRoleAttributeQName() {
-        return actorQName;
+        return QNAME_ROLE;
     }
 
     /** Obtain the "next" role/actor URI */
     public String getNextRoleURI() {
         return SOAP_ROLE_NEXT;
+    }
+
+    /** Obtain the QName for the MustUnderstand fault code */
+    public QName getMustUnderstandFaultCode() {
+        return QNAME_MU_FAULTCODE;
     }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAPVersion.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAPVersion.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAPVersion.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/SOAPVersion.java
 Thu Mar 15 18:29:03 2007
@@ -41,4 +41,9 @@
      * Obtain the "next" role/actor URI
      */
     String getNextRoleURI();
+
+    /**
+     * Obtain the QName for the MustUnderstand fault code
+     */
+    QName getMustUnderstandFaultCode();
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java
 Thu Mar 15 18:29:03 2007
@@ -92,6 +92,13 @@
                     "SOAP Envelope can not have children other than SOAP 
Header and Body",
                     SOAP12Constants.FAULT_CODE_SENDER);
         } else {
+            if (this.done && (child instanceof SOAPHeader)) {
+                SOAPBody body = getBody();
+                if (body != null) {
+                    body.insertSiblingBefore(child);
+                    return;
+                }
+            }
             super.addChild(child);
         }
     }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java
 Thu Mar 15 18:29:03 2007
@@ -85,6 +85,12 @@
 class RolePlayerChecker implements Checker {
     RolePlayer rolePlayer;
 
+    /**
+     * Constructor.
+     *
+     * @param rolePlayer the RolePlayer to check against.  This can be null, 
in which
+     *                   case we assume we're the ultimate destination.
+     */
     public RolePlayerChecker(RolePlayer rolePlayer) {
         this.rolePlayer = rolePlayer;
     }
@@ -97,7 +103,7 @@
         if (role == null || role.equals("") ||
                 (version instanceof SOAP12Version &&
                         
role.equals(SOAP12Constants.SOAP_ROLE_ULTIMATE_RECEIVER))) {
-            return rolePlayer.isUltimateDestination();
+            return (rolePlayer == null || rolePlayer.isUltimateDestination());
         }
 
         // 2. If role is next, always return true
@@ -110,7 +116,7 @@
         }
 
         // 4. Return t/f depending on match
-        List roles = rolePlayer.getRoles();
+        List roles = (rolePlayer == null) ? null : rolePlayer.getRoles();
         if (roles != null) {
             for (Iterator i = roles.iterator(); i.hasNext();) {
                 String thisRole = (String) i.next();

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeTest.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeTest.java?view=diff&rev=518824&r1=518823&r2=518824
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeTest.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeTest.java
 Thu Mar 15 18:29:03 2007
@@ -114,4 +114,14 @@
         soapFac.createSOAPHeader(defaultEnvelope);
 
     }
+
+    // Make sure order of header/body creation doesn't matter
+    public void testBodyHeaderOrder() throws Exception {
+//        SOAPFactory soapFac = new 
org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory();
+        SOAPFactory soapFac = new 
org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory();
+        SOAPEnvelope env = soapFac.createSOAPEnvelope();
+        SOAPBody body = soapFac.createSOAPBody(env);
+        SOAPHeader header = soapFac.createSOAPHeader(env);
+        assertTrue("Header isn't the first child!", env.getFirstElement() 
instanceof SOAPHeader);
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to