Has anyone been able to integrate Tuscany with the WSO2 ESB? The intent is to have the ESB sitting as a proxy between Tuscany instances. The Tuscany Tours sample app has been divided between the instances, so one instance calls to the other to do searches, using the default WS binding, e.g.:
<binding.ws uri="http://mitch-linux.corp.shutterfly.com:8280/services/HotelSearch" /> Of course, that's the URI for the WSO2 ESB acting as a proxy for the hotel search. I've run into two problems while doing this: 1. Tuscany puts information needed to support a callback into the SOAP header. Unfortunately, WSO2 is seeing fit to strip all that out before passing the message on. I've posted to the WSO2 forums for help, see http://wso2.org/forum/thread/9337 for all the fun XML. For anyone who hasn't bothered to intercept traffic between instances, its interesting to see what goes in the request. 2. WSO2 (or rather the Axis engine) doesn't like the lack of a wsa:Action tag in the SOAP header (wsa=http://www.w3.org/2005/08/addressing). Tuscany is including a SOAP Action http header, but not the tag in the SOAP header xml. See the stack trace below. I went thru the Axis 2 1.5.1 source and concluded the missing wsa:Action tag is what triggered the error. Putting the tage in myself and manually posting leads to the problem described in item #1. I'm actually not clear where the fault lies here: a. Tuscany for failing to include the header b. WSO2 for insisting on having it when it apparently isn't needed c. Me for not knowing how to configure Axis d. Nobody really, its just one of those interop issues that hasn't been thought all the way thru. Anyway, I'd appreciate any guidance I can get here. I'm kind of a REST lover, so this is the biggest dose of SOAP I've gotten in a while. Still, I figured passing Tuscany's SOAP messages thru an ESB was something even a beginner could get right. [2010-02-22 18:25:31,542] ERROR - AxisEngine A required header representing a Message Addressing Property is not present org.apache.axis2.AxisFault: A required header representing a Message Addressing Property is not present at org.apache.axis2.addressing.AddressingFaultsHelper.triggerAddressingFault(AddressingFaultsHelper.java:373) at org.apache.axis2.addressing.AddressingFaultsHelper.triggerMessageAddressingRequiredFault(AddressingFaultsHelper.java:299) at org.apache.axis2.handlers.addressing.AddressingInHandler.checkForMandatoryHeaders(AddressingInHandler.java:289) at org.apache.axis2.handlers.addressing.AddressingInHandler.extractAddressingInformation(AddressingInHandler.java:274) at org.apache.axis2.handlers.addressing.AddressingInHandler.invoke(AddressingInHandler.java:153) at org.apache.axis2.engine.Phase.invoke(Phase.java:318) at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:256) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:165) at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167) at org.apache.synapse.transport.nhttp.ServerWorker.processEntityEnclosingMethod(ServerWorker.java:349) at org.apache.synapse.transport.nhttp.ServerWorker.run(ServerWorker.java:239) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:58) Mitch Ratisher