Hi,
I am implementing the service for a wsdl published by another Software
Vendor. The software vendor's client uses Axis2 and I am using JAX-WS
RI for the server implementation (2.2.7 runtime).
There are a set of methods that have "non unique body parts", so I am
trying to get the soap action based dispatch working for these methods.
Axis 2 client sets the "action=urn:<methodName>" in the content-type
header.
However, dispatch still fails with the error:
Cannot find dispatch method for
Request=[soapAction="urn:<methodName>...
After debugging this, I find that this change allows the dispatch to
work:
$ svn diff
Index: rt/src/com/sun/xml/ws/model/JavaMethodImpl.java
===================================================================
--- rt/src/com/sun/xml/ws/model/JavaMethodImpl.java (revision
14081)
+++ rt/src/com/sun/xml/ws/model/JavaMethodImpl.java (working copy)
@@ -205,7 +205,11 @@
}
public String getSOAPAction() {
- return (wsdlOperation != null)? wsdlOperation.getSOAPAction():
soapAction;
+ if (wsdlOperation != null && wsdlOperation.getSOAPAction() !=
null) {
+ return wsdlOperation.getSOAPAction();
+ }
+
+ return soapAction;
}
I am new to JAX-WS, but my understanding is that this is a bug.
JavaMethodImpl.java : freeze() is finding the wsdl:operation from
portType section in the wsdl, but the soap:operation and soapAction are
defined in the wsdl:operation in the binding section of the wsdl.
The software vendor's wsdl has three binding sections (for soap11,
soap12 and http) and all of them have the soap:operation defined. The
portType section does not have the soap:operation under the
wsdl:operation definitions. This seems to be right according to the
spec.
Please advise,
Thanks,
Raj.