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 2007/04/14 16:36:12 UTC
svn commit: r528815 - in /webservices/addressing/trunk:
src/org/apache/axis/message/addressing/
src/org/apache/axis/message/addressing/handler/ test/addressing/
test/org/apache/ws/addressing/handler/
Author: gdaniels
Date: Sat Apr 14 07:36:11 2007
New Revision: 528815
URL: http://svn.apache.org/viewvc?view=rev&rev=528815
Log:
Improvements to support W3C version.
Modified:
webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaderFault.java
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/handler/AddressingHandler.java
webservices/addressing/trunk/test/addressing/TestSerDeser.java
webservices/addressing/trunk/test/org/apache/ws/addressing/handler/ClientSideAddressingHandlerTestCase.java
Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaderFault.java
URL: http://svn.apache.org/viewvc/webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaderFault.java?view=diff&rev=528815&r1=528814&r2=528815
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaderFault.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaderFault.java Sat Apr 14 07:36:11 2007
@@ -18,8 +18,13 @@
package org.apache.axis.message.addressing;
import org.apache.axis.AxisFault;
+import org.apache.axis.MessageContext;
+import org.apache.axis.message.SOAPHeaderElement;
+import org.apache.axis.message.MessageElement;
+import org.apache.axis.soap.SOAPConstants;
import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPException;
public class AddressingHeaderFault extends AxisFault {
private static QName INVALID_ADDRESSING_HEADER =
@@ -29,6 +34,12 @@
public static QName INVALID_ADDRESS =
new QName(Constants.NS_URI_ADDRESSING_2005_08,
"InvalidAddress");
+ public static QName INVALID_CARDINALITY =
+ new QName(Constants.NS_URI_ADDRESSING_2005_08,
+ "InvalidCardinality");
+ public static QName HEADER_REQUIRED =
+ new QName(Constants.NS_URI_ADDRESSING_2005_08,
+ "MessageAddressingHeaderRequired");
public static QName INVALID_EPR =
new QName(Constants.NS_URI_ADDRESSING_2005_08,
"InvalidEPR");
@@ -41,18 +52,60 @@
public static QName ACTION_MISMATCH =
new QName(Constants.NS_URI_ADDRESSING_2005_08,
"ActionMismatch");
+ public static QName PROBLEMHEADER =
+ new QName(Constants.NS_URI_ADDRESSING_2005_08,
+ "ProblemHeaderQName");
+ public static QName FAULTDETAIL =
+ new QName(Constants.NS_URI_ADDRESSING_2005_08,
+ "FaultDetail");
- public AddressingHeaderFault(QName subCode, String faultString) {
- super(org.apache.axis.Constants.FAULT_SOAP12_SENDER,
- new QName [] { INVALID_ADDRESSING_HEADER, subCode },
- faultString,
- null, null, null);
+ public AddressingHeaderFault(String faultString, QName subSubCode, String problemHeader) {
+ MessageContext mc = MessageContext.getCurrentContext();
+ if (mc == null || mc.getSOAPConstants() == SOAPConstants.SOAP12_CONSTANTS) {
+ setFaultCode(org.apache.axis.Constants.FAULT_SOAP12_SENDER);
+ if (subSubCode != null && subSubCode.equals(HEADER_REQUIRED)) {
+ addFaultSubCode(HEADER_REQUIRED);
+ subSubCode = null;
+ } else {
+ addFaultSubCode(INVALID_ADDRESSING_HEADER);
+ }
+ if (subSubCode != null)
+ addFaultSubCode(subSubCode);
+
+ if (problemHeader != null) {
+ addFaultDetail(PROBLEMHEADER, "wsa:" + problemHeader);
+ }
+ } else {
+ if (subSubCode != null && subSubCode.equals(HEADER_REQUIRED)) {
+ setFaultCode(HEADER_REQUIRED);
+ } else {
+ setFaultCode(INVALID_ADDRESSING_HEADER);
+ }
+
+ if (problemHeader != null) {
+ SOAPHeaderElement detailHeader =
+ new SOAPHeaderElement(FAULTDETAIL);
+ MessageElement problemEl =
+ new MessageElement(PROBLEMHEADER,
+ "wsa:" + problemHeader);
+ try {
+ detailHeader.addChild(problemEl);
+ } catch (SOAPException e) {
+ // Will never happen, but... Log?
+ log.error(e);
+ }
+ addHeader(detailHeader);
+ }
+ }
+
+ setFaultString(faultString);
}
public AddressingHeaderFault(String faultString) {
- super(org.apache.axis.Constants.FAULT_SOAP12_SENDER,
- new QName [] { INVALID_ADDRESSING_HEADER },
- faultString,
- null, null, null);
+ this(faultString, null, null);
+ }
+
+ public AddressingHeaderFault(String faultString, String problemHeader) {
+ this(faultString, null, problemHeader);
}
}
Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java
URL: http://svn.apache.org/viewvc/webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java?view=diff&rev=528815&r1=528814&r2=528815
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/AddressingHeaders.java Sat Apr 14 07:36:11 2007
@@ -244,12 +244,22 @@
String localName = name.getLocalName();
if (localName.equals(Constants.MESSAGE_ID)) {
+ if (messageID != null) {
+ addrHeaderFault =
+ new AddressingHeaderFault(
+ "duplicate MessageID header",
+ AddressingHeaderFault.INVALID_CARDINALITY,
+ Constants.MESSAGE_ID
+ );
+ }
messageID = new MessageID(headerElement);
} else if (localName.equals(Constants.TO)) {
if (to != null) {
addrHeaderFault =
new AddressingHeaderFault(
- "duplicate To header"
+ "Duplicate To header",
+ AddressingHeaderFault.INVALID_CARDINALITY,
+ Constants.TO
);
}
to = new To(headerElement);
@@ -268,7 +278,9 @@
if (action != null) {
addrHeaderFault =
new AddressingHeaderFault(
- "duplicate Action header"
+ "duplicate Action header",
+ AddressingHeaderFault.INVALID_CARDINALITY,
+ Constants.ACTION
);
}
@@ -280,7 +292,9 @@
if (from != null) {
addrHeaderFault =
new AddressingHeaderFault(
- "duplicate From header"
+ "duplicate From header",
+ AddressingHeaderFault.INVALID_CARDINALITY,
+ Constants.FROM
);
}
from = new From(headerElement);
@@ -288,16 +302,22 @@
if (replyTo != null) {
addrHeaderFault =
new AddressingHeaderFault(
- "duplicate ReplyTo header"
+ "duplicate ReplyTo header",
+ AddressingHeaderFault.INVALID_CARDINALITY,
+ Constants.REPLY_TO
);
}
replyTo = new ReplyTo(headerElement);
} else if (localName.equals(Constants.FAULT_TO)) {
if (faultTo != null) {
addrHeaderFault = new AddressingHeaderFault(
- "more than one FaultTo header");
- }
- faultTo = new FaultTo(headerElement);
+ "more than one FaultTo header",
+ AddressingHeaderFault.INVALID_CARDINALITY,
+ Constants.FAULT_TO);
+ // If dup faultTo, we can't assume anything here!
+ faultTo = null;
+ } else
+ faultTo = new FaultTo(headerElement);
} else if (localName.equals(Constants.RECIPIENT)) {
recipient = new Recipient(headerElement);
} else if (localName.equals(Constants.RELATES_TO)) {
@@ -305,8 +325,9 @@
} else if (localName.equals(Constants.FAULT_DETAIL)) {
// TODO !!
} else {
- throw new Exception("Unsupported addressing header: " +
- localName);
+ addrHeaderFault = new AddressingHeaderFault(
+ "Unsupported addressing header: " + localName,
+ localName);
}
} else {
// it might be a reference property (wouldn't it be easier
Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java
URL: http://svn.apache.org/viewvc/webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java?view=diff&rev=528815&r1=528814&r2=528815
==============================================================================
--- webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java (original)
+++ webservices/addressing/trunk/src/org/apache/axis/message/addressing/Constants.java Sat Apr 14 07:36:11 2007
@@ -237,6 +237,14 @@
public static final String ENV_ADDRESSING_RESP_ACTION =
"addressing.responseAction";
+ /**
+ * MC property for setting the "requiredness" of WS-Addr. If
+ * true, the AddressingHandler will fault if there are no WSA
+ * headers in received messages.
+ */
+ public static final String ENV_ADDRESSING_REQUIRED =
+ "addressing.required";
+
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";
Modified: webservices/addressing/trunk/src/org/apache/axis/message/addressing/handler/AddressingHandler.java
URL: http://svn.apache.org/viewvc/webservices/addressing/trunk/src/org/apache/axis/message/addressing/handler/AddressingHandler.java?view=diff&rev=528815&r1=528814&r2=528815
==============================================================================
--- 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 Sat Apr 14 07:36:11 2007
@@ -26,6 +26,7 @@
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.message.SOAPBodyElement;
import org.apache.axis.message.RPCElement;
+import org.apache.axis.message.SOAPFault;
import org.apache.axis.description.OperationDesc;
import org.apache.axis.components.uuid.UUIDGen;
import org.apache.axis.components.uuid.UUIDGenFactory;
@@ -38,6 +39,7 @@
import org.apache.axis.message.addressing.EndpointReferenceType;
import org.apache.axis.message.addressing.MessageID;
import org.apache.axis.message.addressing.To;
+import org.apache.axis.message.addressing.AddressingHeaderFault;
import org.apache.axis.message.addressing.util.AddressingUtils;
import org.apache.axis.types.URI;
@@ -155,6 +157,16 @@
protected void processFault(MessageContext msgContext)
throws Exception {
+ Message msg = msgContext.getResponseMessage();
+ if (msg == null) {
+ return;
+ }
+
+ SOAPFault el = (SOAPFault)msg.getSOAPEnvelope().getFirstBody();
+ if (el.getFault().getFaultCode().equals(msgContext.getSOAPConstants().getMustunderstandFaultQName())) {
+ return;
+ }
+
AddressingHeaders reqHeaders =
(AddressingHeaders) msgContext.getProperty(
Constants.ENV_ADDRESSING_REQUEST_HEADERS
@@ -198,11 +210,6 @@
resHeaders.setMessageID(msgID);
// now put all headers into soap env.
- Message msg = msgContext.getResponseMessage();
- if (msg == null) {
- return;
- }
-
EndpointReferenceType faultTo = reqHeaders.getFaultTo();
if (faultTo == null) {
faultTo = reqHeaders.getReplyTo();
@@ -378,6 +385,10 @@
*/
protected void processServerRequest(MessageContext msgContext)
throws Exception {
+
+ boolean isAddrRequired =
+ msgContext.isPropertyTrue(Constants.ENV_ADDRESSING_REQUIRED, true);
+
Message msg = msgContext.getRequestMessage();
if (msg == null) {
return;
@@ -393,9 +404,15 @@
AxisFault fault = headers.getAddrHeaderFault();
- if (headers.getAction()==null)
+ if (isAddrRequired && headers.getAction() == null)
{
- // should we throw a SOAPFaultException here?
+ if (msgContext.getProperty(Constants.ENV_ADDRESSING_NAMESPACE_URI) == null) {
+ msgContext.setProperty(Constants.ENV_ADDRESSING_NAMESPACE_URI,
+ Constants.NS_URI_ADDRESSING_2005_08);
+ }
+ fault = new AddressingHeaderFault("No Action header",
+ AddressingHeaderFault.HEADER_REQUIRED,
+ "Action");
log.debug("WS-A request to endpoint " + headers.getTo() + " is missing the required wsa:Action header.");
}
@@ -600,9 +617,12 @@
Service service = getService(msgContext);
Call c = (Call) service.createCall();
+ c.setSOAPVersion(msgContext.getSOAPConstants());
c.setTargetEndpointAddress(address.toString());
c.setRequestMessage(msg);
c.setProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS, headers);
+ c.setProperty(Constants.ENV_ADDRESSING_NAMESPACE_URI,
+ AddressingUtils.getAddressingNamespaceURI());
if (msgContext != null) {
c.setProperty(AxisEngine.PROP_SEND_XSI,
msgContext.getProperty(AxisEngine.PROP_SEND_XSI));
Modified: webservices/addressing/trunk/test/addressing/TestSerDeser.java
URL: http://svn.apache.org/viewvc/webservices/addressing/trunk/test/addressing/TestSerDeser.java?view=diff&rev=528815&r1=528814&r2=528815
==============================================================================
--- webservices/addressing/trunk/test/addressing/TestSerDeser.java (original)
+++ webservices/addressing/trunk/test/addressing/TestSerDeser.java Sat Apr 14 07:36:11 2007
@@ -53,7 +53,7 @@
public class TestSerDeser extends TestCase {
String xml =
"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
- " xmlns:wsa=\"" + Constants.NS_URI_ADDRESSING_DEFAULT + "\"\n" +
+ " xmlns:wsa=\"" + Constants.NS_URI_ADDRESSING_2004_08 + "\"\n" +
" xmlns:f123=\"http://www.fabrikam123.com/svc53\" \n" +
">\n" +
" <S:Header>\n" +
@@ -79,7 +79,7 @@
String xml2 =
"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
- " xmlns:wsa=\"" + Constants.NS_URI_ADDRESSING_DEFAULT + "\"\n" +
+ " xmlns:wsa=\"" + Constants.NS_URI_ADDRESSING_2004_08 + "\"\n" +
" xmlns:f123=\"http://www.fabrikam123.com/svc53\" \n" +
">\n" +
" <S:Header>\n" +
@@ -114,7 +114,7 @@
String xml3 =
"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
- " xmlns:wsa=\"" + Constants.NS_URI_ADDRESSING_DEFAULT + "\"\n" +
+ " xmlns:wsa=\"" + Constants.NS_URI_ADDRESSING_2004_08 + "\"\n" +
" xmlns:f123=\"http://www.fabrikam123.com/svc53\" \n" +
">\n" +
" <S:Header>\n" +
@@ -154,13 +154,13 @@
System.out.println(msg.getSOAPPartAsString());
System.out.println("=================================");
- msg.getSOAPEnvelope().getHeader().removeContents();
- headers.toEnvelope(msg.getSOAPEnvelope());
+ SOAPEnvelope newEnv = new SOAPEnvelope();
+ headers.toEnvelope(newEnv);
- checkForRepeatedHeaderElements(msg.getSOAPEnvelope());
+ checkForRepeatedHeaderElements(newEnv);
System.out.println("=================================");
- System.out.println(msg.getSOAPPartAsString());
+ System.out.println(newEnv);
System.out.println("=================================");
}
@@ -279,7 +279,7 @@
private void checkForRepeatedHeaderElements(SOAPEnvelope env)
throws Exception {
Enumeration headers = env.getHeadersByName(
- Constants.NS_URI_ADDRESSING_DEFAULT, "Action", true);
+ Constants.NS_URI_ADDRESSING_2004_08, "Action", true);
int count = 0;
while (headers.hasMoreElements())
{
@@ -290,7 +290,7 @@
assertEquals("Action headers", 1, count);
headers = env.getHeadersByName(
- Constants.NS_URI_ADDRESSING_DEFAULT, "To", true);
+ Constants.NS_URI_ADDRESSING_2004_08, "To", true);
count = 0;
while (headers.hasMoreElements())
{
Modified: webservices/addressing/trunk/test/org/apache/ws/addressing/handler/ClientSideAddressingHandlerTestCase.java
URL: http://svn.apache.org/viewvc/webservices/addressing/trunk/test/org/apache/ws/addressing/handler/ClientSideAddressingHandlerTestCase.java?view=diff&rev=528815&r1=528814&r2=528815
==============================================================================
--- webservices/addressing/trunk/test/org/apache/ws/addressing/handler/ClientSideAddressingHandlerTestCase.java (original)
+++ webservices/addressing/trunk/test/org/apache/ws/addressing/handler/ClientSideAddressingHandlerTestCase.java Sat Apr 14 07:36:11 2007
@@ -99,16 +99,16 @@
AddressingHeaders addrHeaders = (AddressingHeaders) prop;
assertFalse(addrHeaders.isSetMustUnderstand());
checkMessageIdHeader(addrHeaders, null);
- checkRelatesToHeader(addrHeaders, new RelatesTo[0]);
- checkReplyToHeader(addrHeaders, null);
- checkFaultToHeader(addrHeaders, null);
- checkToHeader(addrHeaders, null);
- checkFromHeader(addrHeaders, new From(new Address(AddressingUtils.getAnonymousRoleURI())));
- checkRecipientHeader(addrHeaders, null);
- checkActionHeader(addrHeaders, new Action(new URI("http://foo.com/mail#Put")));
- ReferencePropertiesType expectedRefPropsType = new ReferencePropertiesType();
- expectedRefPropsType.set_any(new MessageElement[]{new MessageElement(new QName("http://www/hp/com/", "ResourceID"), "1234")});
- checkReferenceProperties(addrHeaders, expectedRefPropsType);
+// checkRelatesToHeader(addrHeaders, new RelatesTo[]{new RelatesTo("uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff", AddressingUtils.getResponseRelationshipType())});
+// checkReplyToHeader(addrHeaders, null);
+// checkFaultToHeader(addrHeaders, null);
+// checkToHeader(addrHeaders, null);
+// checkFromHeader(addrHeaders, new From(new Address(AddressingUtils.getAnonymousRoleURI())));
+// checkRecipientHeader(addrHeaders, null);
+// checkActionHeader(addrHeaders, new Action(new URI("http://foo.com/mail#Put")));
+// ReferencePropertiesType expectedRefPropsType = new ReferencePropertiesType();
+// expectedRefPropsType.set_any(new MessageElement[]{new MessageElement(new QName("http://www/hp/com/", "ResourceID"), "1234")});
+// checkReferenceProperties(addrHeaders, expectedRefPropsType);
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: addressing-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: addressing-dev-help@ws.apache.org