as.addOperation(operation1);
as.addOperation(operation2);
messageContext.setSoapAction("urn:org.apache.axis2.dispatchers.test:operation2");
SOAPActionBasedDispatcher soapActionDispatcher = new SOAPActionBasedDispatcher();
soapActionDispatcher.invoke(messageContext);
assertEquals(operation2, messageContext.getAxisOperation());
// Now add a duplicate action, then validate we can't route on it anymore.
AxisOperation operation3 = new InOnlyAxisOperation(new QName("operation3"));
// Note that the SOAPAction is intentionally duplicated with operation 2 above.
operation3.setSoapAction("urn:org.apache.axis2.dispatchers.test:operation2");
as.addOperation(operation3);
messageContext = new MessageContext();
messageContext.setAxisService(as);
messageContext.setSoapAction("urn:org.apache.axis2.dispatchers.test:operation2");
soapActionDispatcher.invoke(messageContext);
assertNull(messageContext.getAxisOperation());
// Now verify that adding another operation with the duplicate SOAPAction
// doesn't somehow get it added back into the valid alias map
AxisOperation operation4 = new InOnlyAxisOperation(new QName("operation4"));
// Note that the SOAPAction is intentionally duplicated with operation 2 above.
operation3.setSoapAction("urn:org.apache.axis2.dispatchers.test:operation2");
as.addOperation(operation3);
messageContext = new MessageContext();
messageContext.setAxisService(as);
messageContext.setSoapAction("urn:org.apache.axis2.dispatchers.test:operation2");
soapActionDispatcher.invoke(messageContext);
assertNull(messageContext.getAxisOperation());
// And finally, verify that after all the above, we can still route on a valid
// SOAPAction for operation 1 (whose SOAPAction was never duplicated, so should still be
// valid)
messageContext = new MessageContext();
messageContext.setAxisService(as);
messageContext.setSoapAction("urn:org.apache.axis2.dispatchers.test:operation1");
soapActionDispatcher.invoke(messageContext);
assertEquals(operation1, messageContext.getAxisOperation());
}