You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by pr...@apache.org on 2006/09/29 11:01:47 UTC

svn commit: r451179 - in /webservices/axis2/trunk/java/modules: addressing/src/org/apache/axis2/addressing/ addressing/src/org/apache/axis2/handlers/addressing/ addressing/test-resources/ addressing/test/org/apache/axis2/handlers/addressing/ kernel/src...

Author: pradine
Date: Fri Sep 29 02:01:46 2006
New Revision: 451179

URL: http://svn.apache.org/viewvc?view=rev&rev=451179
Log:
Add support for adding mustUnderstand attribute to ws-addressing headers.

Added:
    webservices/axis2/trunk/java/modules/addressing/test-resources/mustUnderstandTest.xml
Modified:
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/EndpointReferenceHelper.java
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
    webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingOutHandlerTest.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/EndpointReferenceHelper.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/EndpointReferenceHelper.java?view=diff&rev=451179&r1=451178&r2=451179
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/EndpointReferenceHelper.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/EndpointReferenceHelper.java Fri Sep 29 02:01:46 2006
@@ -22,12 +22,12 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
+import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -151,33 +151,38 @@
      * namespace is in effect, however, then no metadata element will be included
      * in the output, even if a metadata property element has been defined.
      * 
+     * @param factory
      * @param epr
      * @param qname
      * @param addressingNamespace
      * @return
      * @throws AxisFault
      */
-    public static OMElement toOM(OMFactory fac, EndpointReference epr, QName qname, String addressingNamespace) throws AxisFault {
+    public static OMElement toOM(OMFactory factory, EndpointReference epr, QName qname, String addressingNamespace) throws AxisFault {
         OMElement eprElement = null;
         
         if (log.isDebugEnabled()) {
+            log.debug("toOM: Factory, " + factory);
             log.debug("toOM: Endpoint reference, " + epr);
             log.debug("toOM: Element qname, " + qname);
             log.debug("toOM: Addressing namespace, " + addressingNamespace);
         }
         
         if (qname.getPrefix() != null) {
-            OMNamespace wrapNs = fac.createOMNamespace(qname.getNamespaceURI(), qname.getPrefix());
-            eprElement = fac.createOMElement(qname.getLocalPart(), wrapNs);
+            OMNamespace wrapNs = factory.createOMNamespace(qname.getNamespaceURI(), qname.getPrefix());
+            if (factory instanceof SOAPFactory)
+                eprElement = ((SOAPFactory) factory).createSOAPHeaderBlock(qname.getLocalPart(), wrapNs);
+            else
+                eprElement = factory.createOMElement(qname.getLocalPart(), wrapNs);
             
-            OMNamespace wsaNS = fac.createOMNamespace(addressingNamespace, AddressingConstants.WSA_DEFAULT_PREFIX);
-            OMElement addressE = fac.createOMElement(AddressingConstants.EPR_ADDRESS, wsaNS, eprElement);
+            OMNamespace wsaNS = factory.createOMNamespace(addressingNamespace, AddressingConstants.WSA_DEFAULT_PREFIX);
+            OMElement addressE = factory.createOMElement(AddressingConstants.EPR_ADDRESS, wsaNS, eprElement);
             String address = epr.getAddress();
             addressE.setText(address);
             
             List metaData = epr.getMetaData();
             if (metaData != null && AddressingConstants.Final.WSA_NAMESPACE.equals(addressingNamespace)) {
-                OMElement metadataE = fac.createOMElement(AddressingConstants.Final.WSA_METADATA, wsaNS, eprElement);
+                OMElement metadataE = factory.createOMElement(AddressingConstants.Final.WSA_METADATA, wsaNS, eprElement);
                 for (int i = 0, size = metaData.size(); i < size; i++) {
                     OMNode omNode = (OMNode) metaData.get(i);
                     metadataE.addChild(omNode);
@@ -186,7 +191,7 @@
 
             Map referenceParameters = epr.getAllReferenceParameters();
             if (referenceParameters != null) {
-                OMElement refParameterElement = fac.createOMElement(AddressingConstants.EPR_REFERENCE_PARAMETERS, wsaNS, eprElement);
+                OMElement refParameterElement = factory.createOMElement(AddressingConstants.EPR_REFERENCE_PARAMETERS, wsaNS, eprElement);
                 Iterator iterator = referenceParameters.values().iterator();
                 while (iterator.hasNext()) {
                     OMNode omNode = (OMNode) iterator.next();

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java?view=diff&rev=451179&r1=451178&r2=451179
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java Fri Sep 29 02:01:46 2006
@@ -36,6 +36,7 @@
 
 import javax.xml.namespace.QName;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 public class AddressingOutHandler extends AddressingHandler {
@@ -106,6 +107,9 @@
 
         // process fault headers, if present
         processFaultsInfoIfPresent(envelope, msgContext, addressingNamespaceObject, replaceHeaders);
+        
+        // process mustUnderstand attribute, if required.
+        processMustUnderstandProperty(envelope, msgContext, addressingNamespaceObject);
     }
 
     private void processWSAAction(Options messageContextOptions, SOAPEnvelope envelope,
@@ -312,6 +316,26 @@
         }
 
         return addressingHeader != null;
+    }
+    
+    /**
+     * Sets a mustUnderstand="1" attribute on all headers that are found with the appropriate
+     * addressing namespace.
+     * 
+     * @param envelope
+     * @param msgContext
+     * @param addressingNamespaceObject
+     */
+    private void processMustUnderstandProperty(SOAPEnvelope envelope, MessageContext msgContext, OMNamespace addressingNamespaceObject) {
+        Object flag = msgContext.getProperty(AddressingConstants.ADD_MUST_UNDERSTAND_TO_ADDRESSING_HEADERS);
+        if (JavaUtils.isTrueExplicitly(flag)) {
+            List headers = envelope.getHeader().getHeaderBlocksWithNSURI(addressingNamespaceObject.getNamespaceURI());
+            Iterator iterator = headers.iterator();
+            while (iterator.hasNext()) {
+                SOAPHeaderBlock soapHeaderBlock = (SOAPHeaderBlock) iterator.next();
+                soapHeaderBlock.setMustUnderstand(true);
+            }
+        }
     }
 }
 

Added: webservices/axis2/trunk/java/modules/addressing/test-resources/mustUnderstandTest.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/test-resources/mustUnderstandTest.xml?view=auto&rev=451179
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/test-resources/mustUnderstandTest.xml (added)
+++ webservices/axis2/trunk/java/modules/addressing/test-resources/mustUnderstandTest.xml Fri Sep 29 02:01:46 2006
@@ -0,0 +1,20 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+    <soapenv:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:myRef="http://reference.org">
+        <wsa:From soapenv:mustUnderstand="1">
+            <wsa:Address>http://www.from.org/service/</wsa:Address>
+            <wsa:ReferenceParameters>
+                <Reference2>Value 200</Reference2>
+            </wsa:ReferenceParameters>
+        </wsa:From>
+        <wsa:To soapenv:mustUnderstand="1">http://www.to.org/service/</wsa:To>
+        <wsa:MessageID soapenv:mustUnderstand="1">123456-7890</wsa:MessageID>
+        <myRef:Reference4>Value 400</myRef:Reference4>
+        <myRef:Reference3>Value 300</myRef:Reference3>
+        <wsa:Action soapenv:mustUnderstand="1">http://www.actions.org/action</wsa:Action>
+        <wsa:ReplyTo soapenv:mustUnderstand="1">
+            <wsa:Address>http://www.replyTo.org/service/</wsa:Address>
+        </wsa:ReplyTo>
+        <wsa:RelatesTo soapenv:mustUnderstand="1" wsa:RelationshipType="TestRelation">http://www.relatesTo.org/service/</wsa:RelatesTo>
+    </soapenv:Header>
+    <soapenv:Body></soapenv:Body>
+</soapenv:Envelope>
\ No newline at end of file

Modified: webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingOutHandlerTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingOutHandlerTest.java?view=diff&rev=451179&r1=451178&r2=451179
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingOutHandlerTest.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingOutHandlerTest.java Fri Sep 29 02:01:46 2006
@@ -120,6 +120,49 @@
                 .getDocumentElement()));
     }
 
+    public void testMustUnderstandSupport() throws Exception {
+        msgCtxt = new MessageContext();
+
+        msgCtxt.setProperty(AddressingConstants.ADD_MUST_UNDERSTAND_TO_ADDRESSING_HEADERS, Boolean.TRUE);
+        
+        EndpointReference epr = new EndpointReference("http://www.from.org/service/");
+        epr.addReferenceParameter(new QName("Reference2"),
+                "Value 200");
+        msgCtxt.setFrom(epr);
+
+        epr = new EndpointReference("http://www.to.org/service/");
+        epr.addReferenceParameter(
+                new QName("http://reference.org", "Reference4", "myRef"),
+                "Value 400");
+        epr.addReferenceParameter(
+                new QName("http://reference.org", "Reference3", "myRef"),
+                "Value 300");
+
+        msgCtxt.setTo(epr);
+        msgCtxt.setProperty(WS_ADDRESSING_VERSION, Submission.WSA_NAMESPACE);
+
+        epr =
+                new EndpointReference("http://www.replyTo.org/service/");
+        msgCtxt.setReplyTo(epr);
+
+        msgCtxt.setMessageID("123456-7890");
+        msgCtxt.setWSAAction("http://www.actions.org/action");
+
+        org.apache.axis2.addressing.RelatesTo relatesTo = new org.apache.axis2.addressing.RelatesTo(
+                "http://www.relatesTo.org/service/", "TestRelation");
+        msgCtxt.addRelatesTo(relatesTo);
+
+        msgCtxt.setEnvelope(
+                OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope());
+        outHandler.invoke(msgCtxt);
+
+        XMLComparator xmlComparator = new XMLComparator();
+        assertTrue(
+                xmlComparator.compare(msgCtxt.getEnvelope(),
+                        testUtil.getOMBuilder("mustUnderstandTest.xml")
+                .getDocumentElement()));
+    }
+
     public void testDuplicateHeaders() throws AxisFault {
 
         // this will check whether we can add to epr, if there is one already.

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java?view=diff&rev=451179&r1=451178&r2=451179
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java Fri Sep 29 02:01:46 2006
@@ -68,6 +68,8 @@
     // this property once set to Boolean.TRUE will make the messages to skip Addressing Handler.
     // So you will not see Addressing Headers in the OUT path.
     public static final String DISABLE_ADDRESSING_FOR_OUT_MESSAGES = "disableAddressingForOutMessages";
+    
+    public static final String ADD_MUST_UNDERSTAND_TO_ADDRESSING_HEADERS = "addMustUnderstandToAddressingHeaders";
 
     public static final String WSAW_ANONYMOUS_PARAMETER_NAME = "wsawAnonymous";
     



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