Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 2.2.1
-
Fix Version/s: Bug Backlog
-
Component/s: Transport: Axis
-
Labels:None
-
Environment:
JDK 1.6
-
User impact:High
-
Similar Issues:None
Description
I try to use axis transport to make a web service proxy, so I define the service as below:
<service name="TestService"> <inbound> <axis:inbound-endpoint address="http://localhost:8888/services"> <axis:soap-service interface="foo.service.intf.TestServiceInterface"/> </axis:inbound-endpoint> </inbound> <outbound> <pass-through-router> <axis:outbound-endpoint address="http://localhost:8080/services/RemoteService"/> </pass-through-router> </outbound> </service>
But it failed.
I found that there are several errors in the axis transport module:
1) Although AxisServiceComponent.doPost() try to get the properties from current endpoint, but the soap-service configuration had not been copied from original AXIS inbound endpoint to real receiver endpoint:
AxisConnector.registerReceiverWithMuleService()
.. // set the Security filter on the axis endpoint on the real receiver // endpoint serviceEndpointbuilder.setSecurityFilter(receiver.getEndpoint().getSecurityFilter()); // Skyer modify // set the properties of the axis endpoint on the real receiver endpoint serviceEndpointbuilder.setProperties(receiver.getEndpoint().getProperties()); ...
2) AxisServiceComponent.processWsdlRequest() does not try to get the soap-service properties from endpoint.
AxisServiceComponent.processWsdlRequest()
...
// Skyer modify
AxisServiceProxy.setProperties(RequestContext.getEvent().getEndpoint().getProperties());
engine.generateWSDL(msgContext);
...
3) When invoking outbound endpoint, AxisMessageDispatcher tried to cast the Method parameter to SoapMethod, which will failed.
AxisMessageDispatcher.refineMethod()
... // Skyer modify else if (method instanceof Method) { call.setOperationName(new QName(((Method)method).getName())); } ...