You are viewing a plain text version of this content. The canonical link for it is here.
Posted to addressing-dev@ws.apache.org by gd...@apache.org on 2006/01/12 18:27:02 UTC

svn commit: r368418 - in /webservices/addressing/trunk/src/org/apache/axis/message/addressing: AddressingHeaders.java Constants.java EndpointReference.java handler/AddressingHandler.java util/AddressingUtils.java

Author: gdaniels
Date: Thu Jan 12 09:26:52 2006
New Revision: 368418

URL: http://svn.apache.org/viewcvs?rev=368418&view=rev
Log:
More work for supporting W3C version, also actually echo reference parameters appropriately.

More to come...

Modified:
    webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java
    webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java
    webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReference.java
    webservices/addressing/trunk/src/org/apache/axis/message/addressing/handler/AddressingHandler.java
    webservices/addressing/trunk/src/org/apache/axis/message/addressing/util/AddressingUtils.java

Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java
URL: http://svn.apache.org/viewcvs/webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java?rev=368418&r1=368417&r2=368418&view=diff
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java Thu Jan 12 09:26:52 2006
@@ -16,23 +16,20 @@
  */
 package org.apache.axis.message.addressing;
 
+import org.apache.axis.MessageContext;
+import org.apache.axis.message.MessageElement;
 import org.apache.axis.message.addressing.util.AddressingUtils;
 import org.apache.axis.message.addressing.util.TextExtractor;
-
-import org.apache.axis.message.MessageElement;
 import org.apache.axis.types.URI;
-import org.apache.axis.AxisEngine;
-import org.apache.axis.MessageContext;
-import org.apache.axis.utils.ArrayUtil;
+import org.apache.axis.utils.JavaUtils;
 import org.w3c.dom.Element;
 
 import javax.xml.namespace.QName;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.soap.Name;
 import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPHeaderElement;
 import javax.xml.soap.SOAPHeader;
-import javax.xml.soap.Name;
-
+import javax.xml.soap.SOAPHeaderElement;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -47,7 +44,7 @@
     /**
      * Are we using the W3C spec rules? (no ref props, etc...)
      */
-    boolean isW3CVersion = false;
+    public boolean isW3CVersion = false;
 
     /**
      * Field action
@@ -245,7 +242,7 @@
                 } else if (localName.equals(Constants.TO)) {
                     to = new To(headerElement);
                     // set the WSA namespace URI in the MessageContext, so we'll know how to serialize types associated with this request
-                    MessageContext msgContext = AxisEngine.getCurrentMessageContext();
+                    MessageContext msgContext = MessageContext.getCurrentContext();
                     if ( msgContext != null ) { msgContext.setProperty( Constants.ENV_ADDRESSING_NAMESPACE_URI, name.getURI() ); }
                 } else if (localName.equals(Constants.ACTION)) {
             	    URI unspecified = new org.apache.axis.types.URI(TextExtractor.getText(headerElement), permitParseNonSpecificAction);
@@ -265,9 +262,10 @@
                                         localName);
                 }
             } else {
-                // its a reference property - check if it was added to refProps
-                if (!processReferenceProperty(headerElement,
-                                              refPropsQNames)) {
+                // it might be a reference property (wouldn't it be easier
+                // if they were all collected under, say wsa:To?)....
+                // check if it was added to refProps
+                if (!checkReferenceP(headerElement, refPropsQNames)) {
                     continue;
                 }
             }
@@ -363,6 +361,10 @@
         return referenceParameters;
     }
 
+    public void setReferenceParameters(List referenceParameters) {
+        this.referenceParameters = referenceParameters;
+    }
+
     public void addReferenceParameter(MessageElement refP) {
         if (referenceParameters == null) {
             referenceParameters = new ArrayList();
@@ -458,19 +460,17 @@
             }
         }
 
-        serializeReferenceProperties(env,
-                                     referenceProperties.get_any(),
-                                     actorURI,
-                                     false);
+        List refProps = (List)JavaUtils.convert(referenceProperties.get_any(),
+                                                ArrayList.class);
+        serializeReferencePs(env,
+                             refProps,
+                             actorURI,
+                             false);
         if (referenceParameters != null && !referenceParameters.isEmpty()) {
-            MessageElement [] refParams =
-                    (MessageElement []) ArrayUtil.convertObjectToArray(
-                            referenceParameters,
-                            MessageElement [].class);
-            serializeReferenceProperties(env,
-                                         refParams,
-                                         actorURI,
-                                         isW3CVersion);
+            serializeReferencePs(env,
+                                 referenceParameters,
+                                 actorURI,
+                                 isW3CVersion);
         }
     }
 
@@ -575,13 +575,15 @@
     }
 
     /**
-     * Add the reference property to the reference properties collection
+     * Take a SOAP header, check if it matches one of our reference
+     * properties/parameters, if so add it to the appropriate collection.
      * 
-     * @param headerElement
+     * @param headerElement the header to check
+     * @return true if it matched, false otherwise
      * @throws Exception
      */
-    private boolean processReferenceProperty(SOAPHeaderElement headerElement,
-                                             List refPropQNames)
+    private boolean checkReferenceP(SOAPHeaderElement headerElement,
+                                    List refPropQNames)
         throws Exception {
         Name name = headerElement.getElementName();
         QName elementName = new QName(name.getURI(), name.getLocalName());
@@ -598,15 +600,15 @@
     }
 
     /**
-     * Serialize the reference properties in the SOAP Header
+     * Serialize the reference properties/parameters in the SOAP Header
      * 
      * @param env
      * @param actorURI
      */
-    private void serializeReferenceProperties(SOAPEnvelope env,
-                                              MessageElement [] refPs,
-                                              String actorURI,
-                                              boolean addAttribute)
+    private void serializeReferencePs(SOAPEnvelope env,
+                                      List refPs,
+                                      String actorURI,
+                                      boolean addAttribute)
         throws Exception {
         // If no referenceProps are available, we are done
         if (refPs == null) { return; }
@@ -616,8 +618,8 @@
         if (header == null) { header = env.addHeader(); }
 
         // Add each ref property to SOAP Header
-        for (int i = 0; i < refPs.length; i++) {
-            MessageElement refProp = refPs[i];
+        for (int i = 0; i < refPs.size(); i++) {
+            MessageElement refProp = (MessageElement)refPs.get(i);
 
             element = makeSOAPHeader(refProp);
             element.setActor(actorURI);

Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java
URL: http://svn.apache.org/viewcvs/webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java?rev=368418&r1=368417&r2=368418&view=diff
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java Thu Jan 12 09:26:52 2006
@@ -217,10 +217,10 @@
      */
     public static final String WSDL_ATTRIB_ACTION = "Action";
 
-    public static final QName QN_ATTR_REFP =
-            new QName(NS_URI_ADDRESSING_2005_08, "IsReferenceParameter");
     /**
      * IsReferenceParameter attribute Name
      */
-    public static final Name ATTR_REFP = new PrefixedQName(QN_ATTR_REFP);
+    public static final Name ATTR_REFP = new PrefixedQName(NS_URI_ADDRESSING_2005_08,
+                                                           "IsReferenceParameter",
+                                                           "wsa");
 }

Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReference.java
URL: http://svn.apache.org/viewcvs/webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReference.java?rev=368418&r1=368417&r2=368418&view=diff
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReference.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReference.java Thu Jan 12 09:26:52 2006
@@ -201,7 +201,7 @@
      *
      * @param param XML rep of referenceParameter (MessageElement)
      */
-    private void addReferenceParameter(MessageElement param) {
+    public void addReferenceParameter(MessageElement param) {
         if (m_parameters == null) m_parameters = new ArrayList();
         m_parameters.add(param);
     }
@@ -286,14 +286,15 @@
         }
 
         // NOTE: ReferenceParameters were not part of the EPR type until WSA 2004/08.
-        if (AddressingUtils.getAddressingNamespaceURI().equals(
-                Constants.NS_URI_ADDRESSING_2004_08)) {
+        String namespaceURI = AddressingUtils.getAddressingNamespaceURI();
+        if (namespaceURI.equals(Constants.NS_URI_ADDRESSING_2004_08) ||
+                AddressingUtils.isW3CAddressingNamespaceURI(namespaceURI)) {
             List refParams = getParameters();
             if (refParams != null && !refParams.isEmpty()) {
                 Element refProp = doc.createElementNS(
                         AddressingUtils.getAddressingNamespaceURI(),
                         Constants.REFERENCE_PARAMETERS);
-                for (int i = 0; i < any.length; i++) {
+                for (int i = 0; i < refParams.size(); i++) {
                     MessageElement param = (MessageElement)refParams.get(i);
                     try {
                         refProp.appendChild(doc.importNode(param.getAsDOM(),

Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/handler/AddressingHandler.java
URL: http://svn.apache.org/viewcvs/webservices/addressing/trunk/src/org/apache/axis/message/addressing/handler/AddressingHandler.java?rev=368418&r1=368417&r2=368418&view=diff
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/handler/AddressingHandler.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/handler/AddressingHandler.java Thu Jan 12 09:26:52 2006
@@ -179,15 +179,19 @@
         resHeaders.setMessageID(msgID);
 
         // now put all headers into soap env.
-        Message msg = msgContext.getCurrentMessage();
+        Message msg = msgContext.getResponseMessage();
         if (msg == null) {
             return;
         }
 
+        EndpointReferenceType faultTo = reqHeaders.getFaultTo();
+
+        resHeaders.setReferenceProperties(faultTo.getProperties());
+        resHeaders.setReferenceParameters(faultTo.getParameters());
+
         resHeaders.toEnvelope(msg.getSOAPEnvelope());
 
         // process FaultTo
-        EndpointReferenceType faultTo = reqHeaders.getFaultTo();
         if (faultTo != null) {
             AttributedURI address = faultTo.getAddress();
             if (address != null) {
@@ -526,6 +530,7 @@
         
         headers.setTo(address);
         headers.setReferenceProperties(epr.getProperties());
+        headers.setReferenceParameters(epr.getParameters());
 
         Service service = getService(msgContext);
 

Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/util/AddressingUtils.java
URL: http://svn.apache.org/viewcvs/webservices/addressing/trunk/src/org/apache/axis/message/addressing/util/AddressingUtils.java?rev=368418&r1=368417&r2=368418&view=diff
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/util/AddressingUtils.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/util/AddressingUtils.java Thu Jan 12 09:26:52 2006
@@ -254,7 +254,11 @@
      */
     public static String getAnonymousRoleURI()
     {
-        return getAddressingNamespaceURI() + "/role/anonymous";
+        String namespaceURI = getAddressingNamespaceURI();
+        if (Constants.NS_URI_ADDRESSING_2005_08.equals(namespaceURI))
+            return Constants.URI_ANONYMOUS_W3C;
+
+        return namespaceURI + "/role/anonymous";
     }
 
     /**
@@ -278,6 +282,9 @@
 
         if (headers == null) {
             headers = new AddressingHeaders();
+            if (isW3CAddressingNamespaceURI(getAddressingNamespaceURI())) {
+                headers.isW3CVersion = true;
+            }
             // set property so other handlers might have a chance to use/modify
             msgContext.setProperty(type, headers);
         }



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