| /* |
| * 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. |
| */ |
| |
| package org.apache.axis2.handlers.addressing; |
| |
| import org.apache.axiom.om.OMElement; |
| import org.apache.axiom.soap.RolePlayer; |
| import org.apache.axis2.AxisFault; |
| import org.apache.axis2.addressing.AddressingConstants; |
| import org.apache.axis2.addressing.EndpointReference; |
| import org.apache.axis2.client.Options; |
| import org.apache.axis2.context.ConfigurationContextFactory; |
| import org.apache.axis2.context.MessageContext; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| |
| import javax.xml.namespace.QName; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| public class AddressingFinalInHandlerTest extends AddressingInHandlerTestBase { |
| |
| private static Log log = LogFactory.getLog(AddressingFinalInHandlerTest.class); |
| |
| /** @param testName */ |
| public AddressingFinalInHandlerTest(String testName) { |
| super(testName); |
| } |
| |
| protected void setUp() throws Exception { |
| super.setUp(); |
| inHandler = new AddressingInHandler(); |
| addressingNamespace = AddressingConstants.Final.WSA_NAMESPACE; |
| versionDirectory = "final"; |
| fromAddress = "http://www.w3.org/2005/08/addressing/anonymous"; |
| secondRelationshipType = "http://some.custom.relationship"; |
| } |
| |
| public void testExtractAddressingInformationFromHeaders() throws Exception { |
| Options options = extractAddressingInformationFromHeaders(null); |
| |
| assertNotNull(options); |
| assertNotNull(options.getTo()); |
| |
| Map allReferenceParameters = options.getTo().getAllReferenceParameters(); |
| assertNotNull(allReferenceParameters); |
| QName qName = new QName("http://ws.apache.org/namespaces/axis2", "ParamOne", "axis2"); |
| assertNotNull(allReferenceParameters.get(qName)); |
| |
| assertEPRHasCorrectMetadata(options.getFrom()); |
| assertEPRHasCorrectMetadata(options.getFaultTo()); |
| assertEPRHasCorrectMetadata(options.getReplyTo()); |
| } |
| |
| public void testExtractAddressingInformationFromHeadersCustomRole() throws Exception { |
| testFileName = "soapmessage.customrole.xml"; |
| Options options = extractAddressingInformationFromHeaders(new RolePlayer() { |
| public List getRoles() { |
| ArrayList al = new ArrayList(); |
| al.add("http://my/custom/role"); |
| return al; |
| } |
| |
| public boolean isUltimateDestination() { |
| return false; |
| } |
| }); |
| |
| assertNotNull(options); |
| assertNotNull(options.getTo()); |
| assertEPRHasCorrectMetadata(options.getFrom()); |
| assertEPRHasCorrectMetadata(options.getFaultTo()); |
| assertEPRHasCorrectMetadata(options.getReplyTo()); |
| |
| } |
| |
| public void testExtractAddressingInformationFromHeadersCustomRoleSOAP12() throws Exception { |
| testFileName = "soapmessage.customrole.soap12.xml"; |
| Options options = extractAddressingInformationFromHeaders(new RolePlayer() { |
| public List getRoles() { |
| ArrayList al = new ArrayList(); |
| al.add("http://my/custom/role"); |
| return al; |
| } |
| |
| public boolean isUltimateDestination() { |
| return false; |
| } |
| }); |
| |
| assertNotNull(options); |
| assertNotNull(options.getTo()); |
| assertEPRHasCorrectMetadata(options.getFrom()); |
| assertEPRHasCorrectMetadata(options.getFaultTo()); |
| assertEPRHasCorrectMetadata(options.getReplyTo()); |
| |
| } |
| |
| public void testMessageWithOmittedAction() throws Exception { |
| try { |
| testMessageWithOmittedHeaders("noAction"); |
| fail("An AxisFault should have been thrown due to a missing Action header."); |
| } |
| catch (AxisFault af) { |
| //test passed |
| } |
| } |
| |
| public void testMessageWithOmittedFaultTo() throws Exception { |
| try { |
| Options options = testMessageWithOmittedHeaders("noFaultTo"); |
| EndpointReference epr = options.getFaultTo(); |
| |
| assertNull("The FaultTo endpoint reference is not null.", epr); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown due to a missing FaultTo header."); |
| } |
| } |
| |
| public void testMessageWithOmittedFrom() throws Exception { |
| try { |
| Options options = testMessageWithOmittedHeaders("noFrom"); |
| EndpointReference epr = options.getFrom(); |
| |
| assertNull("The From endpoint reference is not null.", epr); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown due to a missing From header."); |
| } |
| } |
| |
| public void testMessageWithOmittedMessageID() throws Exception { |
| try { |
| Options options = testMessageWithOmittedHeaders("noMessageID"); |
| String messageID = options.getMessageId(); |
| |
| assertNull("The message id is not null.", messageID); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown due to a missing MessageID header."); |
| } |
| } |
| |
| public void testMessageWithOmittedReplyTo() throws Exception { |
| try { |
| Options options = testMessageWithOmittedHeaders("noReplyTo"); |
| EndpointReference epr = options.getReplyTo(); |
| String address = epr.getAddress(); |
| |
| assertEquals("The address of the ReplyTo endpoint reference is not the anonymous URI.", |
| AddressingConstants.Final.WSA_ANONYMOUS_URL, address); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown due to a missing ReplyTo header."); |
| } |
| } |
| |
| public void testMessageWithOmittedTo() throws Exception { |
| try { |
| Options options = testMessageWithOmittedHeaders("noTo"); |
| EndpointReference epr = options.getTo(); |
| String address = epr.getAddress(); |
| |
| assertEquals("The address of the To endpoint reference is not the anonymous URI.", |
| AddressingConstants.Final.WSA_ANONYMOUS_URL, address); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown due to a missing To header."); |
| } |
| } |
| |
| public void testDifferentSoapActionProcessing() throws Exception { |
| String testfile = "valid-messages/" + versionDirectory + "/soapmessage.xml"; |
| MessageContext mc = new MessageContext(); |
| mc.setConfigurationContext(ConfigurationContextFactory.createEmptyConfigurationContext()); |
| mc.setServerSide(true); |
| try { |
| mc.setSoapAction("http://ws.apache.org/tests/differentAction"); |
| basicExtractAddressingInformationFromHeaders(testfile, mc); |
| fail("An AxisFault should have been thrown due to the soapaction being different to the ws-a action."); |
| } |
| catch (AxisFault af) { |
| //Test passed. |
| } |
| } |
| |
| public void testSameSoapAction() throws Exception { |
| String testfile = "valid-messages/" + versionDirectory + "/soapmessage.xml"; |
| MessageContext mc = new MessageContext(); |
| mc.setConfigurationContext(ConfigurationContextFactory.createEmptyConfigurationContext()); |
| mc.setServerSide(true); |
| try { |
| mc.setSoapAction("http://ws.apache.org/tests/action"); |
| basicExtractAddressingInformationFromHeaders(testfile, mc); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown while testing with a soapaction and ws-a action that are the same."); |
| } |
| } |
| |
| public void testEmptySoapAction() throws Exception { |
| String testfile = "valid-messages/" + versionDirectory + "/soapmessage.xml"; |
| MessageContext mc = new MessageContext(); |
| mc.setConfigurationContext(ConfigurationContextFactory.createEmptyConfigurationContext()); |
| try { |
| mc.setSoapAction(""); |
| basicExtractAddressingInformationFromHeaders(testfile, mc); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown while testing with an empty soapaction."); |
| } |
| } |
| |
| public void testNullSoapAction() throws Exception { |
| String testfile = "valid-messages/" + versionDirectory + "/soapmessage.xml"; |
| MessageContext mc = new MessageContext(); |
| mc.setConfigurationContext(ConfigurationContextFactory.createEmptyConfigurationContext()); |
| try { |
| mc.setSoapAction(null); |
| basicExtractAddressingInformationFromHeaders(testfile, mc); |
| } |
| catch (AxisFault af) { |
| af.printStackTrace(); |
| log.error(af.getMessage()); |
| fail("An unexpected AxisFault was thrown while testing with a null soapaction."); |
| } |
| } |
| |
| private void assertEPRHasCorrectMetadata(EndpointReference epr) { |
| ArrayList metadata = epr.getMetaData(); |
| if (metadata != null) { |
| OMElement md = (OMElement)metadata.get(0); |
| assertEquals(md.getQName(), |
| new QName("http://ws.apache.org/namespaces/axis2", "MetaExt")); |
| assertEquals(md.getText(), "123456789"); |
| assertEquals(md.getAttributeValue( |
| new QName("http://ws.apache.org/namespaces/axis2", "AttrExt")), "123456789"); |
| } else { |
| fail("No Metadata found in EPR"); |
| } |
| } |
| } |