dev@jax-ws.java.net

SoapAction based dispatching does not work - looking for soap:operation/soapAction in portType instead of binding section of wsdl ?

From: <rshekar_at_gmail.com>
Date: Thu, 4 Jul 2013 05:36:40 +0000 (UTC)

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.