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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]