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

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

Author: gdaniels
Date: Wed Feb  1 11:22:13 2006
New Revision: 374147

URL: http://svn.apache.org/viewcvs?rev=374147&view=rev
Log:
- Add ability to tweak what gets sent by default (to, from, messageID)

- Support for the <metadata> bucket in W3C version

- Use new Axis feature to catch AddressingHandler's faults in onFault()

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/EndpointReferenceType.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=374147&r1=374146&r2=374147&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 Wed Feb  1 11:22:13 2006
@@ -292,6 +292,8 @@
                     recipient = new Recipient(headerElement);
                 } else if (localName.equals(Constants.RELATES_TO)) {
                     relatesTo.add(new RelatesTo(headerElement));
+                } else if (localName.equals(Constants.FAULT_DETAIL)) {
+                    // TODO !!
                 } else {
                     throw new Exception("Unsupported addressing header: " +
                                         localName);

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=374147&r1=374146&r2=374147&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 Wed Feb  1 11:22:13 2006
@@ -63,9 +63,12 @@
     public static final String NS_URI_ADDRESSING_DEFAULT =
         NS_URI_ADDRESSING_2004_08;
 
-    public static final String URI_ANONYMOUS_W3C =
+    public static final String URI_ANONYMOUS_W3C_CR =
             "http://www.w3.org/2005/08/addressing/anonymous";
 
+    public static final String URI_NONE_W3C_CR =
+            "http://www.w3.org/2005/08/addressing/none";
+
     /**
      * Field ENDPOINT_REFERENCE
      */
@@ -151,11 +154,15 @@
      */
     public static final String FROM = "From";
 
+    public static final String FAULT_DETAIL = "FaultDetail";
+
     /**
      * Field RECIPIENT
      */
     public static final String RECIPIENT = "Recipient";
 
+    public static final String METADATA = "Metadata";
+
     /**
      * Internal property for passing some WSA headers from
      * the generated Stub class to the handlers.
@@ -219,6 +226,11 @@
      */
     public static final String ENV_ADDRESSING_RESP_ACTION =
             "addressing.responseAction";
+
+    public static final String SEND_DEFAULT_FROM = "addressing.sendDefaultFrom";
+    public static final String SEND_DEFAULT_MESSAGEID = "addressing.sendDefaultID";
+    public static final String SEND_DEFAULT_TO = "addressing.sendDefaultTo";
+
 
     /**
      * Field QNAME_ACTION

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=374147&r1=374146&r2=374147&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 Wed Feb  1 11:22:13 2006
@@ -134,6 +134,12 @@
                         params.add(new MessageElement(param));
                     }
                     setParameters(params);
+                } else if (Constants.METADATA.equals(localName)) {
+                    Iterator refPs = ((SOAPElement)child).getChildElements();
+                    while (refPs.hasNext()) {
+                        SOAPElement param = (SOAPElement) refPs.next();
+                        addMetadata(new MessageElement(param));
+                    }
                 } else {
                     // ignore others
                 }
@@ -212,6 +218,14 @@
     }
 
     /**
+     * Insert metadata
+     */
+    public void addMetadata(MessageElement data) {
+        if (m_metadata == null) m_metadata = new ArrayList();
+        m_metadata.add(data);
+    }
+
+    /**
      * Method toDOM.
      *
      * @param doc
@@ -278,17 +292,6 @@
         if (refProps != null && refProps.size() > 0) {
             refProps.append(parent, prefix + Constants.REFERENCE_PROPERTIES);
         }
-        MessageElement [] any = get_any();
-        if (any != null && any.length > 0) {
-            for (int i = 0; i < any.length; i++) {
-                try {
-                    parent.appendChild(doc.importNode(any[i].getAsDOM(),
-                                                      true));
-                } catch (Exception e) {
-                    log.debug("", e);
-                }
-            }
-        }
 
         // NOTE: ReferenceParameters were not part of the EPR type until WSA 2004/08.
         String namespaceURI = AddressingUtils.getAddressingNamespaceURI();
@@ -311,6 +314,38 @@
                 parent.appendChild(refProp);
             }
         }
+
+        if (AddressingUtils.isW3CAddressingNamespaceURI(namespaceURI)) {
+            List metadata = getMetadata();
+            if (metadata != null && !metadata.isEmpty()) {
+                Element metadataEl = doc.createElementNS(
+                        AddressingUtils.getAddressingNamespaceURI(),
+                        Constants.METADATA);
+                for (int i = 0; i < metadata.size(); i++) {
+                    MessageElement param = (MessageElement)metadata.get(i);
+                    try {
+                        metadataEl.appendChild(doc.importNode(param.getAsDOM(),
+                                                              true));
+                    } catch (Exception e) {
+                        log.warn(e);
+                    }
+                }
+                parent.appendChild(metadataEl);
+            }
+        }
+
+        MessageElement [] any = get_any();
+        if (any != null && any.length > 0) {
+            for (int i = 0; i < any.length; i++) {
+                try {
+                    parent.appendChild(doc.importNode(any[i].getAsDOM(),
+                                                      true));
+                } catch (Exception e) {
+                    log.debug("", e);
+                }
+            }
+        }
+
         return parent;
     }
 

Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReferenceType.java
URL: http://svn.apache.org/viewcvs/webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReferenceType.java?rev=374147&r1=374146&r2=374147&view=diff
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReferenceType.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/EndpointReferenceType.java Wed Feb  1 11:22:13 2006
@@ -77,6 +77,11 @@
      */
     protected List m_parameters;
 
+    /**
+     * Metdata (for W3C version only)
+     */
+    protected List m_metadata;
+
     /*
      * Field extensibility elements
      */
@@ -142,6 +147,10 @@
         if (parameters != null) {
             setParameters(parameters);
         }
+        List metadata = endpoint.getMetadata();
+        if (metadata != null)
+            setMetadata(metadata);
+
         // handle extensibility
         MessageElement [] any = endpoint.get_any();
         if (any != null && any.length > 0) {
@@ -172,6 +181,10 @@
         if (parameters != null) {
             setParameters(parameters);
         }
+        List metadata = endpoint.getMetadata();
+        if (metadata != null)
+            setMetadata(metadata);
+
         // handle extensibility
         MessageElement elem;
         MessageElement [] any = endpoint.get_any();
@@ -255,6 +268,22 @@
      */
     public void setParameters(List parameters) {
         this.m_parameters = parameters;
+    }
+
+    /**
+     * Get the metadata (if any)
+     * @return a List of MessageElements, or null
+     */
+    public List getMetadata() {
+        return m_metadata;
+    }
+
+    /**
+     * Set the metadata
+     * @param m_metadata a List of MessageElements
+     */
+    public void setMetadata(List m_metadata) {
+        this.m_metadata = m_metadata;
     }
 
     /**

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=374147&r1=374146&r2=374147&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 Wed Feb  1 11:22:13 2006
@@ -20,6 +20,7 @@
 import org.apache.axis.AxisFault;
 import org.apache.axis.Message;
 import org.apache.axis.MessageContext;
+import org.apache.axis.AxisEngine;
 import org.apache.axis.client.Call;
 import org.apache.axis.client.Service;
 import org.apache.axis.message.SOAPEnvelope;
@@ -71,7 +72,14 @@
 
     private boolean removeHeaders = false;
     private boolean allowNonSpecificActions = false;
-    
+
+    /**
+     * This is defined in newer Axis builds in Handler.java, but replicated
+     * here for backwards compatibility.  Note that some faults will NOT be
+     * correctly processed using older (pre-Feb-2006) versions of Axis.
+     */
+    final String OPT_CATCH_OWN_FAULTS = "handler.catchOwnFaults";
+
     public AddressingHandler() {}
     
     /**
@@ -83,6 +91,12 @@
         initializeRemoveHeaders();
         initializeActor();
         initializeAllowNonSpecificActions();
+
+        // Default to calling onFault() for our own faults
+        Boolean catchOwnFaults = (Boolean)getOption(OPT_CATCH_OWN_FAULTS);
+        if (catchOwnFaults == null) {
+            setOption(OPT_CATCH_OWN_FAULTS, Boolean.TRUE);
+        }
     }
     
     protected void initializeActor() {
@@ -186,6 +200,10 @@
         }
 
         EndpointReferenceType faultTo = reqHeaders.getFaultTo();
+        if (faultTo == null) {
+            faultTo = reqHeaders.getReplyTo();
+        }
+
         if (faultTo != null) {
             resHeaders.setReferenceProperties(faultTo.getProperties());
             resHeaders.setReferenceParameters(faultTo.getParameters());
@@ -227,6 +245,13 @@
                                         boolean setMustUnderstand)
         throws Exception {
 
+        boolean sendDefaultFrom =
+                msgContext.isPropertyTrue(Constants.SEND_DEFAULT_FROM, true);
+        boolean sendDefaultMessageID =
+                msgContext.isPropertyTrue(Constants.SEND_DEFAULT_MESSAGEID, true);
+        boolean sendDefaultTo =
+                msgContext.isPropertyTrue(Constants.SEND_DEFAULT_TO, true);
+
         AddressingHeaders sharedHeaders =
             (AddressingHeaders) msgContext.getProperty(
                   Constants.ENV_ADDRESSING_SHARED_HEADERS
@@ -238,7 +263,7 @@
         headers.setSetMustUnderstand(setMustUnderstand);
 
         // set MessageID 
-        if (headers.getMessageID() == null) {
+        if (headers.getMessageID() == null && sendDefaultMessageID) {
             MessageID id = 
                 new MessageID(new URI("uuid:" + uuidGen.nextUUID()));
             headers.setMessageID(id);
@@ -246,19 +271,23 @@
 
         // set To
         To to = headers.getTo();
-        if (to == null) {
+        if (to == null && sendDefaultTo) {
             if (sharedHeaders != null) {
                 // To is always set in shared headers
                 headers.setTo(sharedHeaders.getTo());
             } else {
-                headers.setTo(new To(msgContext.getStrProp(MessageContext.TRANS_URL)));
+                headers.setTo(
+                        new To(msgContext.getStrProp(
+                                MessageContext.TRANS_URL)));
             }
         }
         
         // set Action
         String action = msgContext.getSOAPActionURI();
         if (action != null) {
-            URI actionURI = new org.apache.axis.types.URI(action, allowNonSpecificActions);
+            URI actionURI =
+                    new org.apache.axis.types.URI(action,
+                                                  allowNonSpecificActions);
             headers.setAction(new Action(new URI(actionURI)));
         } else {
             Action act = headers.getAction();
@@ -273,7 +302,7 @@
         }
         
         // set From
-        if (headers.getFrom() == null) {
+        if (headers.getFrom() == null && sendDefaultFrom) {
             String from = 
                 msgContext.getStrProp(Constants.ENV_ADDRESSING_FROM_URI);
             if (from != null) {
@@ -525,9 +554,11 @@
             if (address != null) {
                 String uri = address.toString();
                 if (uri != null && !uri.equals(AddressingUtils.getAnonymousRoleURI())) {
-                    // send the msg to reply to
-                    forwardMessage(replyTo, msg);
-                    // Somehow make the response empty, or create a new empty response
+                    if (!uri.equals(Constants.URI_NONE_W3C_CR)) {
+                        // send the msg to reply to
+                        forwardMessage(replyTo, msg);
+                    }
+                    // Nothing goes back out the HTTP connection.
                     msgContext.setResponseMessage(null);
                 } else {
                     resHeaders.toEnvelope(msg.getSOAPEnvelope(), this.actor);
@@ -563,8 +594,12 @@
         c.setTargetEndpointAddress(address.toString());
         c.setRequestMessage(msg);
         c.setProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS, headers);
-        c.setOperationStyle(msgContext.getOperationStyle());
-        c.setOperationUse(msgContext.getOperationUse());
+        if (msgContext != null) {
+            c.setProperty(AxisEngine.PROP_SEND_XSI,
+                          msgContext.getProperty(AxisEngine.PROP_SEND_XSI));
+            c.setOperationStyle(msgContext.getOperationStyle());
+            c.setOperationUse(msgContext.getOperationUse());
+        }
         configureCall(c, msgContext);
         try {
             c.invoke();
@@ -572,7 +607,7 @@
             // This fault shouldn't necessarily become the response of
             // the original interaction, should it?  Should we be doing
             // this on a separate thread?
-            log.error(axisFault);
+            log.error(axisFault.dumpToString());
         }
     }
     

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=374147&r1=374146&r2=374147&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 Wed Feb  1 11:22:13 2006
@@ -257,7 +257,7 @@
     {
         String namespaceURI = getAddressingNamespaceURI();
         if (Constants.NS_URI_ADDRESSING_2005_08.equals(namespaceURI))
-            return Constants.URI_ANONYMOUS_W3C;
+            return Constants.URI_ANONYMOUS_W3C_CR;
 
         return namespaceURI + "/role/anonymous";
     }



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