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 ch...@apache.org on 2005/05/04 10:56:55 UTC

svn commit: r168102 - in /webservices/axis/trunk/java/modules/core: src/org/apache/axis/addressing/ src/org/apache/axis/addressing/miheaders/ src/org/apache/axis/addressing/om/ src/org/apache/axis/clientapi/ src/org/apache/axis/context/ src/org/apache/axis/description/ src/org/apache/axis/handlers/addressing/ test/org/apache/axis/addressing/miheaders/

Author: chinthaka
Date: Wed May  4 01:56:54 2005
New Revision: 168102

URL: http://svn.apache.org/viewcvs?rev=168102&view=rev
Log:
Incorporating MEPContext changes with Addressing

Modified:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/AddressingConstants.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/EndpointReference.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/miheaders/RelatesTo.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/om/MessageInformationHeadersCollection.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/CallbackReceiver.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/MEPContext.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/description/AxisOperation.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingInHandler.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingOutHandler.java
    webservices/axis/trunk/java/modules/core/test/org/apache/axis/addressing/miheaders/RelatesToTest.java

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/AddressingConstants.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/AddressingConstants.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/AddressingConstants.java Wed May  4 01:56:54 2005
@@ -38,6 +38,9 @@
     public static final String WSA_RELATES_TO_RELATIONSHIP_TYPE =
             "RelationshipType";
 
+    public static final String WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE =
+            "wsa:Reply";
+
     /**
      * Field WSA_TO
      */

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/EndpointReference.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/EndpointReference.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/EndpointReference.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/EndpointReference.java Wed May  4 01:56:54 2005
@@ -88,7 +88,7 @@
     }
 
     /**
-     * Method getAddress
+     * Method getValue
      *
      * @return
      */
@@ -97,7 +97,7 @@
     }
 
     /**
-     * Method setAddress
+     * Method setValue
      *
      * @param address
      */

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/miheaders/RelatesTo.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/miheaders/RelatesTo.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/miheaders/RelatesTo.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/miheaders/RelatesTo.java Wed May  4 01:56:54 2005
@@ -20,9 +20,9 @@
  */
 public class RelatesTo {
     /**
-     * Field address
+     * Field value
      */
-    private String address;
+    private String value;
 
     /**
      * Field relationshipType
@@ -35,36 +35,36 @@
      * @param address
      */
     public RelatesTo(String address) {
-        this.address = address;
+        this.value = address;
     }
 
     /**
      * Constructor RelatesTo
      *
-     * @param address
+     * @param value
      * @param relationshipType
      */
-    public RelatesTo(String address, String relationshipType) {
-        this.address = address;
+    public RelatesTo(String value, String relationshipType) {
+        this.value = value;
         this.relationshipType = relationshipType;
     }
 
     /**
-     * Method getAddress
+     * Method getValue
      *
      * @return
      */
-    public String getAddress() {
-        return address;
+    public String getValue() {
+        return value;
     }
 
     /**
-     * Method setAddress
+     * Method setValue
      *
-     * @param address
+     * @param value
      */
-    public void setAddress(String address) {
-        this.address = address;
+    public void setValue(String value) {
+        this.value = value;
     }
 
     /**

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/om/MessageInformationHeadersCollection.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/om/MessageInformationHeadersCollection.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/om/MessageInformationHeadersCollection.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/addressing/om/MessageInformationHeadersCollection.java Wed May  4 01:56:54 2005
@@ -80,6 +80,7 @@
      * @param soapHeader
      */
     public void toOM(SOAPHeader soapHeader) {
+        throw new UnsupportedOperationException();
     }
 
     // ------------------- Setters and Getters --------------------------------------

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/CallbackReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/CallbackReceiver.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/CallbackReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/CallbackReceiver.java Wed May  4 01:56:54 2005
@@ -32,7 +32,7 @@
         //TODO find the related message ID and call the callback
         RelatesTo relatesTO = messgeCtx.getMessageInformationHeaders().getRelatesTo();
 
-        String messageID = relatesTO.getAddress();
+        String messageID = relatesTO.getValue();
         Callback callback = (Callback) callbackstore.get(messageID);
         AsyncResult result = new AsyncResult();
         result.setResult(messgeCtx.getEnvelope());

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/MEPContext.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/MEPContext.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/MEPContext.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/MEPContext.java Wed May  4 01:56:54 2005
@@ -44,5 +44,7 @@
     public void addMessageContext(MessageContext msgContext) throws AxisFault;
     
     public List getAllMessageContexts();
+
+     public MessageContext getLastInMessageContext();
 }
 

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/description/AxisOperation.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/description/AxisOperation.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/description/AxisOperation.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/description/AxisOperation.java Wed May  4 01:56:54 2005
@@ -127,12 +127,12 @@
 
 		} else {
 			// So this message is part of an ongoing MEP
-			mepContext = msgContext.getEngineContext().getMEPContext(msgContext.getRelatesTo().getAddress());
+			mepContext = msgContext.getEngineContext().getMEPContext(msgContext.getRelatesTo().getValue());
 			
 			if (null == mepContext) {
 				throw new AxisFault(
 						"Cannot relate the message in the operation :"
-								+ this.getName() + " :Unrelated RelatesTO value "+msgContext.getRelatesTo().getAddress());
+								+ this.getName() + " :Unrelated RelatesTO value "+msgContext.getRelatesTo().getValue());
 			}
 
 		}

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingInHandler.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingInHandler.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingInHandler.java Wed May  4 01:56:54 2005
@@ -39,6 +39,10 @@
     /**
      * Eran Chinthaka (chinthaka@apache.org) Date : 03-04-2005 Time : 14:42
      */
+
+    // this parameter has to be set by the module deployer.
+    private boolean isAddressingOptional = true;
+
     private Log logger = LogFactory.getLog(getClass());
 
 
@@ -48,11 +52,15 @@
         if(header == null){
             return;
         }
+
         ArrayList addressingHeaders = header.getHeaderBolcksWithNSURI(AddressingConstants.WSA_NAMESPACE);
         if (addressingHeaders != null) {
             extractAddressingInformationFromHeaders(header, msgContext.getMessageInformationHeaders(),addressingHeaders);
         } else {
             // no addressing headers present
+            if(!isAddressingOptional){
+                throw new AxisFault("Addressing Handlers should present, but doesn't present in the incoming message !!");
+            }
             logger.debug("No Addressing Headers present in the IN message. Addressing In Handler does nothing.");
         }
     }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingOutHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingOutHandler.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingOutHandler.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/addressing/AddressingOutHandler.java Wed May  4 01:56:54 2005
@@ -1,9 +1,7 @@
 package org.apache.axis.handlers.addressing;
 
 import java.util.Iterator;
-
 import javax.xml.namespace.QName;
-
 import org.apache.axis.addressing.AddressingConstants;
 import org.apache.axis.addressing.AnyContentType;
 import org.apache.axis.addressing.EndpointReference;
@@ -19,6 +17,9 @@
 import org.apache.axis.om.SOAPHeader;
 import org.apache.axis.om.SOAPHeaderBlock;
 
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+
 /**
  * Copyright 2001-2004 The Apache Software Foundation.
  * <p/>
@@ -36,21 +37,46 @@
  * <p/>
  */
 public class AddressingOutHandler
-    extends AbstractHandler
-    implements AddressingConstants {
+        extends AbstractHandler
+        implements AddressingConstants {
+
     /**
      * Eran Chinthaka (chinthaka@apache.org)
      */
+
+    private boolean isAddressingEnabled = true;
+
+    // IN message, if any, has messageId and replyTo and faultTo addresses that needs to be used
+    // in the OUT message. User may sometimes override these values, at his discretion .The following
+    // boolean variable will create room for that.
+    private boolean overrideINMessageInformation = false;
+
     OMNamespace addressingNamespace =
-        OMAbstractFactory.getSOAP11Factory().createOMNamespace(WSA_NAMESPACE, "wsa");
+            OMAbstractFactory.getSOAP11Factory().createOMNamespace(WSA_NAMESPACE, "wsa");
+
     public void invoke(MessageContext msgContext) throws AxisFault {
+
+        if (!isAddressingEnabled) {
+            return;
+        }
+
+        MessageContext lastInMessageContext = msgContext.getMepContext().getLastInMessageContext();
+
+
         MessageInformationHeadersCollection messageInformationHeaders =
-            msgContext.getMessageInformationHeaders();
+                msgContext.getMessageInformationHeaders();
         SOAPHeader soapHeader = msgContext.getEnvelope().getHeader();
 
+
         EndpointReference epr = messageInformationHeaders.getTo();
-        if (epr != null) {
+        if (epr != null && (lastInMessageContext == null || overrideINMessageInformation)) {
             addToSOAPHeader(epr, AddressingConstants.WSA_TO, soapHeader);
+        } else if (lastInMessageContext != null) {
+            if (!msgContext.getEnvelope().getBody().hasFault()) {
+                setINReplyToAsOUTTo(lastInMessageContext, soapHeader);
+            } else {
+                setINFaultToAsOUTTo(lastInMessageContext, soapHeader);
+            }
         }
 
         String action = messageInformationHeaders.getAction();
@@ -62,6 +88,7 @@
         if (epr != null) {//optional
             addToSOAPHeader(epr, AddressingConstants.WSA_REPLY_TO, soapHeader);
         }
+
         epr = messageInformationHeaders.getFrom();
         if (epr != null) {//optional
             addToSOAPHeader(epr, AddressingConstants.WSA_FROM, soapHeader);
@@ -77,50 +104,68 @@
         }
 
         RelatesTo relatesTo = messageInformationHeaders.getRelatesTo();
-        if (relatesTo != null) { //optional
-            OMElement relatesToHeader =
-                processStringInfo(
-                    relatesTo.getAddress(),
-                    WSA_RELATES_TO,
-                    soapHeader);
-            if (relatesToHeader != null
-                && !"".equals(relatesTo.getRelationshipType())) {
-                relatesToHeader.addAttribute(
-                    WSA_RELATES_TO_RELATIONSHIP_TYPE,
-                    relatesTo.getRelationshipType(),
-                    addressingNamespace);
+        OMElement relatesToHeader = null;
+
+        if (!overrideINMessageInformation && lastInMessageContext != null && "".equals(lastInMessageContext.getMessageID())) {
+            relatesToHeader = processStringInfo(lastInMessageContext.getMessageID(), WSA_RELATES_TO, soapHeader);
+        } else if (relatesTo != null) {
+            relatesToHeader = processStringInfo(relatesTo.getValue(), WSA_RELATES_TO, soapHeader);
+        }
+
+        if (relatesToHeader != null)
+            if ("".equals(relatesTo.getRelationshipType())) {
+                relatesToHeader.addAttribute(WSA_RELATES_TO_RELATIONSHIP_TYPE,
+                        WSA_RELATES_TO_RELATIONSHIP_TYPE_DEFAULT_VALUE,
+                        addressingNamespace);
+            } else {
+                relatesToHeader.addAttribute(WSA_RELATES_TO_RELATIONSHIP_TYPE,
+                        relatesTo.getRelationshipType(),
+                        addressingNamespace);
             }
+    }
+
+
+    private void setINFaultToAsOUTTo(MessageContext lastInMessageContext, SOAPHeader soapHeader) {
+        EndpointReference lastInFaultTo = lastInMessageContext.getFaultTo();
+        if (lastInFaultTo != null) {
+            addToSOAPHeader(lastInFaultTo, AddressingConstants.WSA_TO, soapHeader);
+        } else {
+            setINReplyToAsOUTTo(lastInMessageContext, soapHeader);
+        }
+    }
+
+    private void setINReplyToAsOUTTo(MessageContext lastInMessageContext, SOAPHeader soapHeader) {
+        EndpointReference lastInReplyTo = lastInMessageContext.getReplyTo();
+        if (lastInReplyTo != null) {
+            addToSOAPHeader(lastInReplyTo, AddressingConstants.WSA_TO, soapHeader);
         }
     }
 
-    private OMElement processStringInfo(
-        String value,
-        String type,
-        SOAPHeader soapHeader) {
+    private OMElement processStringInfo(String value,
+                                        String type,
+                                        SOAPHeader soapHeader) {
         if (!"".equals(value) && value != null) {
             SOAPHeaderBlock soapHeaderBlock =
-                soapHeader.addHeaderBlock(type, addressingNamespace);
+                    soapHeader.addHeaderBlock(type, addressingNamespace);
             soapHeaderBlock.addChild(OMAbstractFactory.getSOAP11Factory().createText(value));
             return soapHeaderBlock;
         }
         return null;
     }
 
-    protected void addToSOAPHeader(
-        EndpointReference epr,
-        String type,
-        SOAPHeader soapHeader) {
+    protected void addToSOAPHeader(EndpointReference epr,
+                                   String type,
+                                   SOAPHeader soapHeader) {
         if (epr == null) {
             return;
         }
         String address = epr.getAddress();
         if (!"".equals(address) && address != null) {
             SOAPHeaderBlock soapHeaderBlock =
-                soapHeader.addHeaderBlock(type, addressingNamespace);
+                    soapHeader.addHeaderBlock(type, addressingNamespace);
             OMElement addressElement =
-                OMAbstractFactory.getSOAP11Factory().createOMElement(
-                    EPR_ADDRESS,
-                    addressingNamespace);
+                    OMAbstractFactory.getSOAP11Factory().createOMElement(EPR_ADDRESS,
+                            addressingNamespace);
             soapHeaderBlock.addChild(addressElement);
             addressElement.setText(address);
 
@@ -129,27 +174,21 @@
         QName portType = epr.getPortType();
         if (portType != null) {
             SOAPHeaderBlock soapHeaderBlock =
-                soapHeader.addHeaderBlock(EPR_PORT_TYPE, addressingNamespace);
-            soapHeaderBlock.addChild(
-                OMAbstractFactory.getSOAP11Factory().createText(
-                    portType.getPrefix() + ":" + portType.getLocalPart()));
+                    soapHeader.addHeaderBlock(EPR_PORT_TYPE, addressingNamespace);
+            soapHeaderBlock.addChild(OMAbstractFactory.getSOAP11Factory().createText(portType.getPrefix() + ":" + portType.getLocalPart()));
         }
 
         ServiceName serviceName = epr.getServiceName();
         if (serviceName != null) {
             SOAPHeaderBlock soapHeaderBlock =
-                soapHeader.addHeaderBlock(
-                    EPR_SERVICE_NAME,
+                    soapHeader.addHeaderBlock(EPR_SERVICE_NAME,
+                            addressingNamespace);
+            soapHeaderBlock.addAttribute(EPR_SERVICE_NAME_PORT_NAME,
+                    serviceName.getPortName(),
                     addressingNamespace);
-            soapHeaderBlock.addAttribute(
-                EPR_SERVICE_NAME_PORT_NAME,
-                serviceName.getPortName(),
-                addressingNamespace);
-            soapHeaderBlock.addChild(
-                OMAbstractFactory.getSOAP11Factory().createText(
-                    serviceName.getName().getPrefix()
-                        + ":"
-                        + serviceName.getName().getLocalPart()));
+            soapHeaderBlock.addChild(OMAbstractFactory.getSOAP11Factory().createText(serviceName.getName().getPrefix()
+                    + ":"
+                    + serviceName.getName().getLocalPart()));
         }
 
         AnyContentType referenceParameters = epr.getReferenceParameters();
@@ -160,16 +199,15 @@
 
     }
 
-    private void processAnyContentType(
-        AnyContentType referenceParameters,
-        SOAPHeader soapHeader) {
+    private void processAnyContentType(AnyContentType referenceParameters,
+                                       SOAPHeader soapHeader) {
         if (referenceParameters != null) {
             Iterator iterator = referenceParameters.getKeys();
             while (iterator.hasNext()) {
                 QName key = (QName) iterator.next();
                 String value = referenceParameters.getReferenceValue(key);
                 OMElement omElement =
-                    OMAbstractFactory.getSOAP11Factory().createOMElement(key, soapHeader);
+                        OMAbstractFactory.getSOAP11Factory().createOMElement(key, soapHeader);
                 soapHeader.addChild(omElement);
                 omElement.addChild(OMAbstractFactory.getSOAP11Factory().createText(value));
             }

Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis/addressing/miheaders/RelatesToTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis/addressing/miheaders/RelatesToTest.java?rev=168102&r1=168101&r2=168102&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis/addressing/miheaders/RelatesToTest.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis/addressing/miheaders/RelatesToTest.java Wed May  4 01:56:54 2005
@@ -37,11 +37,11 @@
     public void testGetAddress() {
         relatesTo = new RelatesTo(address, relationshipType);
 
-        assertEquals("RelatesTo address has not been set properly in the constructor", relatesTo.getAddress(), address);
+        assertEquals("RelatesTo address has not been set properly in the constructor", relatesTo.getValue(), address);
 
         String newAddress = "www.newRelation.org";
-        relatesTo.setAddress(newAddress);
-        assertEquals("RelatesTo address has not been get/set properly", relatesTo.getAddress(), newAddress);
+        relatesTo.setValue(newAddress);
+        assertEquals("RelatesTo address has not been get/set properly", relatesTo.getValue(), newAddress);
 
     }
 
@@ -57,7 +57,7 @@
 
     public void testSingleArgumentConstructor() {
         relatesTo = new RelatesTo(address);
-        assertEquals("RelatesTo address has not been set properly in the constructor", relatesTo.getAddress(), address);
+        assertEquals("RelatesTo address has not been set properly in the constructor", relatesTo.getValue(), address);
 
     }