You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by da...@apache.org on 2008/01/28 10:44:32 UTC
svn commit: r615819 - in /webservices/axis2/trunk/java/modules:
addressing/src/org/apache/axis2/handlers/addressing/
addressing/test-resources/
addressing/test/org/apache/axis2/handlers/addressing/
kernel/src/org/apache/axis2/addressing/
Author: davidillsley
Date: Mon Jan 28 01:44:31 2008
New Revision: 615819
URL: http://svn.apache.org/viewvc?rev=615819&view=rev
Log:
Add client side support for WS-A headers w/soap:role
Added:
webservices/axis2/trunk/java/modules/addressing/test-resources/soap11roleTest.xml
webservices/axis2/trunk/java/modules/addressing/test-resources/soap12roleTest.xml
Modified:
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/kernel/src/org/apache/axis2/addressing/AddressingConstants.java
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=615819&r1=615818&r2=615819&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 Mon Jan 28 01:44:31 2008
@@ -24,6 +24,8 @@
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.util.AttributeHelper;
import org.apache.axiom.om.util.ElementHelper;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPFault;
@@ -92,10 +94,13 @@
// 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).
boolean replaceHeaders = msgContext.isPropertyTrue(REPLACE_ADDRESSING_HEADERS);
+
+ // Allow the user to specify the role these WS-Addressing headers should be targetted at.
+ String role = (String) msgContext.getProperty(SOAP_ROLE_FOR_ADDRESSING_HEADERS);
WSAHeaderWriter writer = new WSAHeaderWriter(msgContext, isSubmissionNamespace,
addMustUnderstandAttribute, replaceHeaders,
- includeOptionalHeaders);
+ includeOptionalHeaders, role);
writer.writeHeaders();
return InvocationResponse.CONTINUE;
@@ -110,6 +115,7 @@
private Options messageContextOptions;
private OMNamespace addressingNamespaceObject;
private String addressingNamespace;
+ private String addressingRole;
private boolean isFinalAddressingNamespace;
private boolean addMustUnderstandAttribute;
@@ -119,10 +125,10 @@
private ArrayList existingWSAHeaders = null;
public WSAHeaderWriter(MessageContext mc, boolean isSubmissionNamespace, boolean addMU,
- boolean replace, boolean includeOptional) {
+ boolean replace, boolean includeOptional, String role) {
if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
log.debug("WSAHeaderWriter: isFinal=" + isSubmissionNamespace + " addMU=" + addMU +
- " replace=" + replace + " includeOptional=" + includeOptional);
+ " replace=" + replace + " includeOptional=" + includeOptional+" role="+role);
}
messageContext = mc;
@@ -143,16 +149,22 @@
if(addressingHeaders!=null && !addressingHeaders.isEmpty()){
existingWSAHeaders = new ArrayList(addressingHeaders.size());
for(Iterator iter=addressingHeaders.iterator();iter.hasNext();){
- OMElement oe = (OMElement)iter.next();
- existingWSAHeaders.add(oe.getLocalName());
+ SOAPHeaderBlock oe = (SOAPHeaderBlock)iter.next();
+ if(addressingRole == null || addressingRole.length() ==0 || addressingRole.equals(oe.getRole())){
+ existingWSAHeaders.add(oe.getLocalName());
+ }
}
}
+ if(addressingHeaders != null && addressingHeaders.size() ==0){
+ addressingHeaders = null;
+ }
}
isFinalAddressingNamespace = !isSubmissionNamespace;
addMustUnderstandAttribute = addMU;
replaceHeaders = replace;
includeOptionalHeaders = includeOptional;
+ addressingRole = role;
}
public void writeHeaders() throws AxisFault {
@@ -387,6 +399,7 @@
.importOMAttribute((OMAttribute)attrIterator.next(), soapHeaderBlock);
}
}
+ addRoleToHeader(soapHeaderBlock);
return soapHeaderBlock;
}
return null;
@@ -428,6 +441,7 @@
new QName(addressingNamespace,
headerName, prefix),
addressingNamespace);
+ addRoleToHeader(soapHeaderBlock);
header.addChild(soapHeaderBlock);
}
@@ -452,6 +466,7 @@
Final.WSA_TYPE_ATTRIBUTE_VALUE,
addressingNamespaceObject);
}
+ addRoleToHeader(newElement);
header.addChild(newElement);
}
}
@@ -474,6 +489,7 @@
Final.WSA_TYPE_ATTRIBUTE_VALUE,
addressingNamespaceObject);
}
+ addRoleToHeader(newElement);
header.addChild(newElement);
}
}
@@ -557,7 +573,23 @@
}
}
}
+
+ private void addRoleToHeader(OMElement header){
+ if(addressingRole == null || addressingRole.length()==0){
+ return;
+ }
+ if(header instanceof SOAPHeaderBlock){
+ ((SOAPHeaderBlock)header).setRole(addressingRole);
+ }else{
+ if(messageContext.isSOAP11()){
+ OMAttribute roleAttr = factory.createOMAttribute(SOAP11Constants.ATTR_ACTOR, envelope.getNamespace(), addressingRole);
+ header.addAttribute(roleAttr);
+ }else{
+ OMAttribute roleAttr = factory.createOMAttribute(SOAP12Constants.SOAP_ROLE, envelope.getNamespace(), addressingRole);
+ header.addAttribute(roleAttr);
+ }
+ }
+ }
}
-
}
Added: webservices/axis2/trunk/java/modules/addressing/test-resources/soap11roleTest.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/test-resources/soap11roleTest.xml?rev=615819&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/test-resources/soap11roleTest.xml (added)
+++ webservices/axis2/trunk/java/modules/addressing/test-resources/soap11roleTest.xml Mon Jan 28 01:44:31 2008
@@ -0,0 +1,38 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+ <soapenv:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:myRef="http://reference.org">
+ <wsa:From soapenv:actor="urn:test:role">
+ <wsa:Address>http://www.from.org/service/</wsa:Address>
+ <wsa:ReferenceParameters>
+ <Reference2>Value 200</Reference2>
+ </wsa:ReferenceParameters>
+ </wsa:From>
+ <wsa:To soapenv:actor="urn:test:role">http://www.to.org/service/</wsa:To>
+ <wsa:MessageID soapenv:actor="urn:test:role">123456-7890</wsa:MessageID>
+ <myRef:Reference4 soapenv:actor="urn:test:role">Value 400</myRef:Reference4>
+ <myRef:Reference3 soapenv:actor="urn:test:role">Value 300</myRef:Reference3>
+ <wsa:Action soapenv:actor="urn:test:role">http://www.actions.org/action</wsa:Action>
+ <wsa:ReplyTo soapenv:actor="urn:test:role">
+ <wsa:Address>http://www.replyTo.org/service/</wsa:Address>
+ </wsa:ReplyTo>
+ <wsa:RelatesTo soapenv:actor="urn:test:role" RelationshipType="TestRelation">http://www.relatesTo.org/service/</wsa:RelatesTo>
+ </soapenv:Header>
+ <soapenv:Body></soapenv:Body>
+</soapenv:Envelope>
Added: webservices/axis2/trunk/java/modules/addressing/test-resources/soap12roleTest.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/test-resources/soap12roleTest.xml?rev=615819&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/test-resources/soap12roleTest.xml (added)
+++ webservices/axis2/trunk/java/modules/addressing/test-resources/soap12roleTest.xml Mon Jan 28 01:44:31 2008
@@ -0,0 +1,38 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
+ <soapenv:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:myRef="http://reference.org">
+ <wsa:From soapenv:role="urn:test:role">
+ <wsa:Address>http://www.from.org/service/</wsa:Address>
+ <wsa:ReferenceParameters>
+ <Reference2>Value 200</Reference2>
+ </wsa:ReferenceParameters>
+ </wsa:From>
+ <wsa:To soapenv:role="urn:test:role">http://www.to.org/service/</wsa:To>
+ <wsa:MessageID soapenv:role="urn:test:role">123456-7890</wsa:MessageID>
+ <myRef:Reference4 soapenv:role="urn:test:role">Value 400</myRef:Reference4>
+ <myRef:Reference3 soapenv:role="urn:test:role">Value 300</myRef:Reference3>
+ <wsa:Action soapenv:role="urn:test:role">http://www.actions.org/action</wsa:Action>
+ <wsa:ReplyTo soapenv:role="urn:test:role">
+ <wsa:Address>http://www.replyTo.org/service/</wsa:Address>
+ </wsa:ReplyTo>
+ <wsa:RelatesTo soapenv:role="urn:test:role" RelationshipType="TestRelation">http://www.relatesTo.org/service/</wsa:RelatesTo>
+ </soapenv:Header>
+ <soapenv:Body></soapenv:Body>
+</soapenv:Envelope>
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=615819&r1=615818&r2=615819&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 Mon Jan 28 01:44:31 2008
@@ -194,6 +194,96 @@
.getDocumentElement()));
}
+ public void testSOAPRoleSupport() throws Exception {
+ ConfigurationContext cfgCtx =
+ ConfigurationContextFactory.createDefaultConfigurationContext();
+ msgCtxt = cfgCtx.createMessageContext();
+
+ msgCtxt.setProperty(AddressingConstants.SOAP_ROLE_FOR_ADDRESSING_HEADERS,
+ "urn:test:role");
+
+ EndpointReference epr = new EndpointReference("http://www.from.org/service/");
+ epr.addReferenceParameter(new QName("Reference2"),
+ "Value 200");
+ msgCtxt.setFrom(epr);
+
+ epr = new EndpointReference("http://www.to.org/service/");
+ epr.addReferenceParameter(
+ new QName("http://reference.org", "Reference4", "myRef"),
+ "Value 400");
+ epr.addReferenceParameter(
+ new QName("http://reference.org", "Reference3", "myRef"),
+ "Value 300");
+
+ msgCtxt.setTo(epr);
+ msgCtxt.setProperty(WS_ADDRESSING_VERSION, Submission.WSA_NAMESPACE);
+
+ epr = new EndpointReference("http://www.replyTo.org/service/");
+ msgCtxt.setReplyTo(epr);
+
+ msgCtxt.setMessageID("123456-7890");
+ msgCtxt.setWSAAction("http://www.actions.org/action");
+
+ org.apache.axis2.addressing.RelatesTo relatesTo = new org.apache.axis2.addressing.RelatesTo(
+ "http://www.relatesTo.org/service/", "TestRelation");
+ msgCtxt.addRelatesTo(relatesTo);
+
+ msgCtxt.setEnvelope(
+ OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope());
+ outHandler.invoke(msgCtxt);
+
+ XMLComparator xmlComparator = new XMLComparator();
+ assertTrue(
+ xmlComparator.compare(msgCtxt.getEnvelope(),
+ testUtil.getOMBuilder("soap11roleTest.xml")
+ .getDocumentElement()));
+ }
+
+ public void testSOAP12RoleSupport() throws Exception {
+ ConfigurationContext cfgCtx =
+ ConfigurationContextFactory.createDefaultConfigurationContext();
+ msgCtxt = cfgCtx.createMessageContext();
+
+ msgCtxt.setProperty(AddressingConstants.SOAP_ROLE_FOR_ADDRESSING_HEADERS,
+ "urn:test:role");
+
+ EndpointReference epr = new EndpointReference("http://www.from.org/service/");
+ epr.addReferenceParameter(new QName("Reference2"),
+ "Value 200");
+ msgCtxt.setFrom(epr);
+
+ epr = new EndpointReference("http://www.to.org/service/");
+ epr.addReferenceParameter(
+ new QName("http://reference.org", "Reference4", "myRef"),
+ "Value 400");
+ epr.addReferenceParameter(
+ new QName("http://reference.org", "Reference3", "myRef"),
+ "Value 300");
+
+ msgCtxt.setTo(epr);
+ msgCtxt.setProperty(WS_ADDRESSING_VERSION, Submission.WSA_NAMESPACE);
+
+ epr = new EndpointReference("http://www.replyTo.org/service/");
+ msgCtxt.setReplyTo(epr);
+
+ msgCtxt.setMessageID("123456-7890");
+ msgCtxt.setWSAAction("http://www.actions.org/action");
+
+ org.apache.axis2.addressing.RelatesTo relatesTo = new org.apache.axis2.addressing.RelatesTo(
+ "http://www.relatesTo.org/service/", "TestRelation");
+ msgCtxt.addRelatesTo(relatesTo);
+
+ msgCtxt.setEnvelope(
+ OMAbstractFactory.getSOAP12Factory().getDefaultEnvelope());
+ outHandler.invoke(msgCtxt);
+
+ XMLComparator xmlComparator = new XMLComparator();
+ assertTrue(
+ xmlComparator.compare(msgCtxt.getEnvelope(),
+ testUtil.getOMBuilder("soap12roleTest.xml")
+ .getDocumentElement()));
+ }
+
public void testDuplicateHeaders() throws Exception {
// this will check whether we can add to epr, if there is one already.
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java?rev=615819&r1=615818&r2=615819&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java Mon Jan 28 01:44:31 2008
@@ -77,6 +77,8 @@
static final String ADD_MUST_UNDERSTAND_TO_ADDRESSING_HEADERS =
"addMustUnderstandToAddressingHeaders";
+ static final String SOAP_ROLE_FOR_ADDRESSING_HEADERS = "wsaddressingRole";
+
/**
* A property pointing to an ArrayList of OMAttribute objects representing any attributes
* of the wsa:Action header.
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org