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 2006/07/25 09:35:56 UTC
svn commit: r425316 - in /webservices/axis2/trunk/java/modules:
addressing/src/org/apache/axis2/handlers/addressing/
addressing/test/org/apache/axis2/handlers/addressing/
core/src/org/apache/axis2/addressing/
Author: chinthaka
Date: Tue Jul 25 00:35:55 2006
New Revision: 425316
URL: http://svn.apache.org/viewvc?rev=425316&view=rev
Log:
Adding a parameter to give the user an option to override the addressing headers, if available by the time the message comes to the AddressingOutHandler.
Modified:
webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingHandler.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/core/src/org/apache/axis2/addressing/AddressingConstants.java
Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingHandler.java?rev=425316&r1=425315&r2=425316&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingHandler.java Tue Jul 25 00:35:55 2006
@@ -33,6 +33,6 @@
protected String relationshipType = Final.WSA_DEFAULT_RELATIONSHIP_TYPE; // defaulting to final version
- private static final Log log = LogFactory.getLog(AddressingHandler.class);
+ protected static final Log log = LogFactory.getLog(AddressingHandler.class);
}
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?rev=425316&r1=425315&r2=425316&view=diff
==============================================================================
--- 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 Tue Jul 25 00:35:55 2006
@@ -34,8 +34,6 @@
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
import java.util.ArrayList;
@@ -44,10 +42,6 @@
public class AddressingOutHandler extends AddressingHandler {
- private static final long serialVersionUID = -2623986992336863995L;
-
- private static final Log log = LogFactory.getLog(AddressingOutHandler.class);
-
public void invoke(MessageContext msgContext) throws AxisFault {
SOAPFactory factory = (SOAPFactory)msgContext.getEnvelope().getOMFactory();
@@ -114,47 +108,56 @@
// define that in the Header itself.
envelope.declareNamespace(addressingNamespaceObject);
+ // what if there are addressing headers already in the message. Do you replace that or not?
+ // Lets have a parameter to control that. The default behavior is you won't replace addressing
+ // headers if there are any (this was the case so far).
+ Object replaceHeadersParam = msgContext.getProperty(REPLACE_ADDRESSING_HEADERS);
+ boolean replaceHeaders = false;
+ if (replaceHeadersParam != null && replaceHeadersParam instanceof Boolean) {
+ replaceHeaders = ((Boolean) replaceHeadersParam).booleanValue();
+ }
+
// processing WSA To
- processToEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace);
+ processToEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace, replaceHeaders);
// processing WSA replyTo
- processReplyTo(envelope, messageContextOptions, msgContext, addressingNamespaceObject, namespace);
+ processReplyTo(envelope, messageContextOptions, msgContext, addressingNamespaceObject, namespace, replaceHeaders);
// processing WSA From
- processFromEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace);
+ processFromEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace, replaceHeaders);
// processing WSA FaultTo
- processFaultToEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace);
+ processFaultToEPR(messageContextOptions, envelope, addressingNamespaceObject, namespace, replaceHeaders);
String messageID = messageContextOptions.getMessageId();
if (messageID != null && !isAddressingHeaderAlreadyAvailable(WSA_MESSAGE_ID, envelope,
- addressingNamespaceObject)) {//optional
+ addressingNamespaceObject, replaceHeaders)) {//optional
processStringInfo(messageID, WSA_MESSAGE_ID, envelope, addressingNamespaceObject);
}
// processing WSA Action
- processWSAAction(messageContextOptions, envelope, msgContext, addressingNamespaceObject);
+ processWSAAction(messageContextOptions, envelope, msgContext, addressingNamespaceObject, replaceHeaders);
// processing WSA RelatesTo
- processRelatesTo(envelope, messageContextOptions, addressingNamespaceObject);
+ processRelatesTo(envelope, messageContextOptions, addressingNamespaceObject, replaceHeaders);
// process fault headers, if present
- processFaultsInfoIfPresent(envelope, msgContext, addressingNamespaceObject);
+ processFaultsInfoIfPresent(envelope, msgContext, addressingNamespaceObject, replaceHeaders);
// We are done, cleanup the references
addressingNamespaceObject = null;
}
private void processWSAAction(Options messageContextOptions, SOAPEnvelope envelope,
- MessageContext msgCtxt, OMNamespace addressingNamespaceObject) {
+ MessageContext msgCtxt, OMNamespace addressingNamespaceObject, boolean replaceHeaders) {
String action = messageContextOptions.getAction();
if (action != null && !isAddressingHeaderAlreadyAvailable(WSA_ACTION, envelope,
- addressingNamespaceObject)) {
+ addressingNamespaceObject, replaceHeaders)) {
processStringInfo(action, WSA_ACTION, envelope, addressingNamespaceObject);
}
}
- private void processFaultsInfoIfPresent(SOAPEnvelope envelope, MessageContext msgContext, OMNamespace addressingNamespaceObject) {
+ private void processFaultsInfoIfPresent(SOAPEnvelope envelope, MessageContext msgContext, OMNamespace addressingNamespaceObject, boolean replaceHeaders) {
Map faultInfo = (Map) msgContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
if (faultInfo != null) {
String faultyHeaderQName = (String) faultInfo.get(Final.FAULT_HEADER_PROB_HEADER_QNAME);
@@ -182,8 +185,8 @@
}
}
- private void processRelatesTo(SOAPEnvelope envelope, Options messageContextOptions, OMNamespace addressingNamespaceObject) {
- if (!isAddressingHeaderAlreadyAvailable(WSA_RELATES_TO, envelope, addressingNamespaceObject))
+ private void processRelatesTo(SOAPEnvelope envelope, Options messageContextOptions, OMNamespace addressingNamespaceObject, boolean replaceHeaders) {
+ if (!isAddressingHeaderAlreadyAvailable(WSA_RELATES_TO, envelope, addressingNamespaceObject,replaceHeaders))
{
RelatesTo[] relatesTo = messageContextOptions.getRelationships();
@@ -212,25 +215,25 @@
}
}
- private void processFaultToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
+ private void processFaultToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace, boolean replaceHeaders) {
EndpointReference epr;
epr = messageContextOptions.getFaultTo();
if (epr != null) {//optional
- addToSOAPHeader(epr, AddressingConstants.WSA_FAULT_TO, envelope, addressingNamespaceObject, namespace);
+ addToSOAPHeader(epr, AddressingConstants.WSA_FAULT_TO, envelope, addressingNamespaceObject, namespace, replaceHeaders);
}
}
- private void processFromEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
+ private void processFromEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace, boolean replaceHeaders) {
EndpointReference epr;
epr = messageContextOptions.getFrom();
if (epr != null) {//optional
- addToSOAPHeader(epr, AddressingConstants.WSA_FROM, envelope, addressingNamespaceObject, namespace);
+ addToSOAPHeader(epr, AddressingConstants.WSA_FROM, envelope, addressingNamespaceObject, namespace, replaceHeaders);
}
}
- private void processReplyTo(SOAPEnvelope envelope, Options messageContextOptions, MessageContext msgContext, OMNamespace addressingNamespaceObject, String namespace) {
+ private void processReplyTo(SOAPEnvelope envelope, Options messageContextOptions, MessageContext msgContext, OMNamespace addressingNamespaceObject, String namespace, boolean replaceHeaders) {
EndpointReference epr;
- if (!isAddressingHeaderAlreadyAvailable(WSA_REPLY_TO, envelope, addressingNamespaceObject))
+ if (!isAddressingHeaderAlreadyAvailable(WSA_REPLY_TO, envelope, addressingNamespaceObject, replaceHeaders))
{
epr = messageContextOptions.getReplyTo();
if (epr == null) {//optional
@@ -252,13 +255,13 @@
epr.setAddress(anonymousURI);
}
}
- addToSOAPHeader(epr, AddressingConstants.WSA_REPLY_TO, envelope, addressingNamespaceObject, namespace);
+ addToSOAPHeader(epr, AddressingConstants.WSA_REPLY_TO, envelope, addressingNamespaceObject, namespace, replaceHeaders);
}
}
- private void processToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
+ private void processToEPR(Options messageContextOptions, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace, boolean replaceHeaders) {
EndpointReference epr = messageContextOptions.getTo();
- if (epr != null && !isAddressingHeaderAlreadyAvailable(WSA_TO, envelope, addressingNamespaceObject))
+ if (epr != null && !isAddressingHeaderAlreadyAvailable(WSA_TO, envelope, addressingNamespaceObject, replaceHeaders))
{
Map referenceParameters = null;
String address = "";
@@ -289,8 +292,8 @@
protected void addToSOAPHeader(EndpointReference epr,
String type,
- SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace) {
- if (epr == null || isAddressingHeaderAlreadyAvailable(type, envelope, addressingNamespaceObject))
+ SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, String namespace, boolean replaceHeaders) {
+ if (epr == null || isAddressingHeaderAlreadyAvailable(type, envelope, addressingNamespaceObject,replaceHeaders))
{
return;
}
@@ -392,8 +395,25 @@
}
- private boolean isAddressingHeaderAlreadyAvailable(String name, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject) {
- return envelope.getHeader().getFirstChildWithName(new QName(addressingNamespaceObject.getName(), name, addressingNamespaceObject.getPrefix())) != null;
+ /**
+ * This will check for the existence of message information headers already in the message. If there are already headers,
+ * then replacing them or not depends on the replaceHeaders property.
+ *
+ * @param name - Name of the message information header
+ * @param envelope
+ * @param addressingNamespaceObject - namespace object of addressing representing the addressing version being used
+ * @param replaceHeaders - determines whether we replace the existing headers or not, if they present
+ * @return false - if one can add new headers, true - if one should not touch them.
+ */
+ private boolean isAddressingHeaderAlreadyAvailable(String name, SOAPEnvelope envelope, OMNamespace addressingNamespaceObject, boolean replaceHeaders) {
+ OMElement addressingHeader = envelope.getHeader().getFirstChildWithName(new QName(addressingNamespaceObject.getName(), name, addressingNamespaceObject.getPrefix()));
+
+ if (addressingHeader != null && replaceHeaders) {
+ addressingHeader.detach();
+ return false;
+ }
+
+ return addressingHeader != null;
}
}
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?rev=425316&r1=425315&r2=425316&view=diff
==============================================================================
--- 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 Tue Jul 25 00:35:55 2006
@@ -21,6 +21,7 @@
import org.apache.axiom.om.impl.llom.util.XMLComparator;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.AddressingConstants;
@@ -138,6 +139,50 @@
outHandler.invoke(msgCtxt);
assertTrue(defaultEnvelope.getHeader().getFirstChildWithName(new QName("http://whatever.duplicate.org")) == null);
+
+
+ }
+
+ public void testDuplicateHeadersWithOverridingOn() throws AxisFault {
+
+ // this will check whether we can add to epr, if there is one already.
+ EndpointReference eprOne = new EndpointReference("http://whatever.org");
+ msgCtxt = new MessageContext();
+ SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
+ SOAPEnvelope defaultEnvelope = factory.getDefaultEnvelope();
+ SOAPHeaderBlock soapHeaderBlock =
+ defaultEnvelope.getHeader().addHeaderBlock(WSA_TO, factory.createOMNamespace(
+ Final.WSA_NAMESPACE, WSA_DEFAULT_PREFIX));
+ soapHeaderBlock.setText("http://oldEPR.org");
+ msgCtxt.setEnvelope(defaultEnvelope);
+
+ msgCtxt.setProperty(REPLACE_ADDRESSING_HEADERS, Boolean.TRUE);
+ msgCtxt.setTo(eprOne);
+ outHandler.invoke(msgCtxt);
+
+ assertTrue("http://whatever.org".equals(defaultEnvelope.getHeader().getFirstChildWithName(new QName(WSA_TO)).getText()));
+
+
+ }
+
+ public void testDuplicateHeadersWithOverridingOff() throws AxisFault {
+
+ // this will check whether we can add to epr, if there is one already.
+ EndpointReference eprOne = new EndpointReference("http://whatever.org");
+ msgCtxt = new MessageContext();
+ SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
+ SOAPEnvelope defaultEnvelope = factory.getDefaultEnvelope();
+ SOAPHeaderBlock soapHeaderBlock =
+ defaultEnvelope.getHeader().addHeaderBlock(WSA_TO, factory.createOMNamespace(
+ Final.WSA_NAMESPACE, WSA_DEFAULT_PREFIX));
+ soapHeaderBlock.setText("http://oldEPR.org");
+ msgCtxt.setEnvelope(defaultEnvelope);
+
+ msgCtxt.setProperty(REPLACE_ADDRESSING_HEADERS, Boolean.FALSE);
+ msgCtxt.setTo(eprOne);
+ outHandler.invoke(msgCtxt);
+
+ assertTrue("http://oldEPR.org".equals(defaultEnvelope.getHeader().getFirstChildWithName(new QName(WSA_TO)).getText()));
}
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java?rev=425316&r1=425315&r2=425316&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java Tue Jul 25 00:35:55 2006
@@ -59,6 +59,10 @@
// ADDRESSING_REQUIRED is the equivalent of <wsaw:UsingAddressing required="true" />
// in a WSDL file
public static final String ADDRESSING_REQUIRED = "required";
+
+ // If this property is set, addressing headers will be replaced from the information in the
+ // message context.
+ public static final String REPLACE_ADDRESSING_HEADERS = "ReplaceAddressingHeaders";
public interface Final {
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org