blob: c8585de851eb964ee2edacd594b05c4d4dce519b [file] [log] [blame]
/*
* 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 junit.framework.TestCase;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.context.ServiceGroupContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.InOnlyAxisOperation;
import org.apache.axis2.description.InOutAxisOperation;
import org.apache.axis2.description.OutInAxisOperation;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.handlers.util.TestUtil;
import javax.xml.namespace.QName;
public class AddressingValidationHandlerTest extends TestCase implements AddressingConstants {
AddressingInHandler inHandler = new AddressingInHandler();
AddressingValidationHandler validationHandler = new AddressingValidationHandler();
String addressingNamespace = AddressingConstants.Final.WSA_NAMESPACE;
String versionDirectory = "final";
protected MessageContext testMessageWithOmittedHeaders(String testName) throws Exception {
return testAddressingMessage("omitted-header-messages", testName + "Message.xml");
}
protected MessageContext testAddressingMessage(String directory, String testName)
throws Exception {
String testfile = directory + "/" + versionDirectory + "/" + testName;
MessageContext mc = new MessageContext();
mc.setConfigurationContext(ConfigurationContextFactory.createEmptyConfigurationContext());
mc.setEnvelope(TestUtil.getSOAPEnvelope(testfile));
inHandler.invoke(mc);
return mc;
}
public void testMessageWithOmittedMessageIDInOutMEP() throws Exception {
MessageContext messageContext = testMessageWithOmittedHeaders("noMessageID");
String messageID = messageContext.getOptions().getMessageId();
assertNull("The message id is not null.", messageID);
AxisOperation axisOperation = new InOutAxisOperation();
messageContext.setAxisOperation(axisOperation);
AxisService axisService = new AxisService();
messageContext.setAxisService(axisService);
try {
validationHandler.invoke(messageContext);
fail("An AxisFault should have been thrown due to the absence of a message id.");
}
catch (AxisFault af) {
//Test passed.
}
}
public void testMessageWithOmittedMessageIDInOnlyMEP() throws Exception {
MessageContext messageContext = testMessageWithOmittedHeaders("noMessageID");
String messageID = messageContext.getOptions().getMessageId();
assertNull("The message id is not null.", messageID);
AxisOperation axisOperation = new InOnlyAxisOperation();
messageContext.setAxisOperation(axisOperation);
AxisService axisService = new AxisService();
messageContext.setAxisService(axisService);
validationHandler.invoke(messageContext);
}
public void testMessageWithMessageIDInOutMEP() throws Exception {
MessageContext messageContext = testMessageWithOmittedHeaders("noFrom");
String messageID = messageContext.getOptions().getMessageId();
assertNotNull("The message id is null.", messageID);
AxisOperation axisOperation = new InOutAxisOperation();
messageContext.setAxisOperation(axisOperation);
AxisService axisService = new AxisService();
messageContext.setAxisService(axisService);
validationHandler.invoke(messageContext);
}
public void testInOutMessageWithOmittedMessageID() throws Exception {
MessageContext messageContext = testMessageWithOmittedHeaders("noMessageID");
String messageID = messageContext.getOptions().getMessageId();
assertNull("The message id is not null.", messageID);
AxisOperation axisOperation = new InOutAxisOperation();
messageContext.setAxisOperation(axisOperation);
AxisService axisService = new AxisService();
messageContext.setAxisService(axisService);
try {
validationHandler.invoke(messageContext);
} catch (AxisFault axisFault) {
// Confirm this is the correct fault
assertEquals("Wrong fault code",
new QName(Final.WSA_NAMESPACE,
Final.FAULT_ADDRESSING_HEADER_REQUIRED),
axisFault.getFaultCode());
return;
}
fail("Validated message with missing message ID!");
}
public void testCheckUsingAdressingOnClient() throws Exception {
// Need to create full description hierarchy to prevent NullPointerExceptions
AxisOperation axisOperation = new OutInAxisOperation(new QName("Temp"));
AxisService axisService = new AxisService("Temp");
AxisConfiguration axisConfiguration = new AxisConfiguration();
axisService.addOperation(axisOperation);
axisConfiguration.addService(axisService);
ConfigurationContext configurationContext = new ConfigurationContext(axisConfiguration);
// Make addressing required using the same property as the AddressingConfigurator on the request
MessageContext request = configurationContext.createMessageContext();
request.setProperty(AddressingConstants.ADDRESSING_REQUIREMENT_PARAMETER, AddressingConstants.ADDRESSING_REQUIRED);
// Create a response to invoke the in handler on
MessageContext response = configurationContext.createMessageContext();
// Link the response to the request message context using the context hierarchy
ServiceGroupContext serviceGroupContext = configurationContext.createServiceGroupContext(axisService.getAxisServiceGroup());
ServiceContext serviceContext = serviceGroupContext.getServiceContext(axisService);
OperationContext opContext = axisOperation.findOperationContext(request, serviceContext);
axisOperation.registerOperationContext(request, opContext);
request.setServiceContext(serviceContext);
response.setServiceContext(serviceContext);
request.setOperationContext(opContext);
response.setOperationContext(opContext);
// Invoke the in handler for a response message without addressing headers
response.setEnvelope(TestUtil.getSOAPEnvelope("addressingDisabledTest.xml"));
inHandler.invoke(response);
// Check an exception is thrown by the validation handler because the client
// requires addressing but the response message does not have addressing headers
try {
validationHandler.invoke(response);
fail("An AxisFault should have been thrown due to the absence of addressing headers.");
} catch (AxisFault axisFault) {
// Confirm this is the correct fault
assertEquals("Wrong fault code",
new QName(Final.FAULT_ADDRESSING_HEADER_REQUIRED),
axisFault.getFaultCode());
}
}
}