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/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