I think I'm going to need a test case that shows this. I just did some wireshark traces on a bunch of tests and they are all sending the SOAPAction properly. There are a bunch of things that would break if this wasn't true such as the tck, ws-addressing interop, etc....

For the wsdl first stuff, the soapAction should be pulled from the WSDL while processing the operations. Specifically, line 540 of the SoapBindingFactory.java. That should be grabbing the stuff from the wsdl extensor and creating the appropriate thing we need.


Dan



On May 13, 2008, at 4:52 AM, [EMAIL PROTECTED] wrote:

Hi,


wsdls says that soap action is "default" but on the wire it's sending
nothing.

fragment of wsdl
<wsdl:binding name='getBrandServiceOperationsBinding'
type='tns:getBrandServiceOperations'>
 <soap:binding style='document'
transport='http://schemas.xmlsoap.org/soap/http'/>
 <wsdl:operation name='getBrandService'>
  <soap:operation soapAction='default'/>
  <wsdl:input>
   <soap:body use='literal'/>
  </wsdl:input>
  <wsdl:output>
   <soap:body use='literal'/>
  </wsdl:output>
  <wsdl:fault name='TechnicalExceptionFault'>
   <soap:fault name='TechnicalExceptionFault' use='literal'/>
  </wsdl:fault>
 </wsdl:operation>
</wsdl:binding>

i didn't find in sources a place, where action is set except the place,
which is reading action from annotations.

best regards
jano




Daniel Kulp <[EMAIL PROTECTED]>
05/13/2008 04:34
Bitte antworten an
[email protected]


An
[email protected]
Kopie

Thema
Re: empty soap action using JAXWS/JAXB  [Virus checked]







What does the wsdl say for the action field on the operations?

If you create a service from the wsdl, the wsdl is the definitive
contract and is what we use to determine the soap action, not the
annotations.

Dan


On May 7, 2008, at 4:54 AM, [EMAIL PROTECTED] wrote:

Hello,

i'm using following code to obtain client proxy (some comments in
code)


              JaxWsProxyFactoryBean factory = new
JaxWsProxyFactoryBean();
              factory.setServiceClass(serviceInterface); // here is
wsdl2java generated port interface (which contains
soapaction="default")
              factory.setAddress(address); // service provider
endpoint
              factory.setWsdlLocation(wsdlLocation); // in form
classpath:xx.wsdl
              factory.setServiceName(QName.valueOf(serviceName)); //
from wsdl
              factory.setProperties(new HashMap<String, Object>());
              factory.getProperties().put("schema-validation-
enabled",
new Boolean(schemaValidationEnabled)); // true
              T port = (T) factory.create();

i'm using cxf 2.1

during initialization it takes buildServiceFromWSDL path in
ReflectionServiceFactoryBean

during this path, it never invoked line like o.setProperty("action",
getAction(o, method));
which results in missing (empty) soap action .... which doesn't work
for
system i want to call.

Am I doing something wrongly? Or did i miss something?

I see it as a bug and fix seems to be to add missing magic line into
initializeWSDLOperation of JaxWsServiceFactoryBean class. There are
more
places which are good enough for me, but i don't know which is the
best in
general.

best regards
jano

---
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog








---
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog




Reply via email to