Hi,

some more notes.

program flow goes through 
SoapBindingFactory:540 which sets correct soap action.

but later it goes also through

SoapBindingFactory:134 
sop.setAction(config.getSoapAction(op)); 
which set empty string.

maybe problem is that it shouldn't go through 2nd call, but instead use 
somehow .. in fact i'm lost again

best regards
jano




[EMAIL PROTECTED] 
05/14/2008 22:42
Bitte antworten an
[email protected]


An
[email protected]
Kopie
[email protected]
Thema
Antwort: Re: Antwort: Re: empty soap action using JAXWS/JAXB  [Virus 
checked]






Hello,

during initialization:
SoapBindingFactory:540 returns correct soap action.

on return from
public BindingInfo createBindingInfo(ServiceInfo service, 
javax.wsdl.Binding binding, String ns) {
result contains operation with BindingOperationInfo with two extensors - 
one SOAPOperationImpl with soapActionUri set to "default" and one 
SoapOperationInfo wiht action="default" (looks fine for me)

then on the line 202: soapOperation.setSoapActionURI(soi.getAction()); 
return empty string, which seems to be incorrect


ok .. step back...
on line 107: public BindingInfo createBindingInfo(ServiceInfo si, String 
bindingid, Object conf) {
variable "si" contains somewhere inside still correct soap action.
created instance stored in "info" variable doesn't 
in fact also Operation info fetched on line 131: for (OperationInfo op : 
si.getInterface().getOperations()) { doesn't contain required informations 

.....
in fact "si"  variable contains the same operation twice .. once somewhere 

in bindings[0].operations and second in intf.operations .... for later 
there is not soap action (i mean no extensors .. maybe this is a problem?)

now i'm a bit lost in unknown code :( but hopefully i helped you a bit

best regards
jano




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


An
[email protected]
Kopie

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







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