This would be a bug in the that wsdl analyzer tool.   Having multiple parts in 
the message is fine as long as only one of those parts is used for the 
soap:body.   

However, looking at the requirements from:
http://ws-i.org/profiles/basicprofile-2.0-2010-11-09.html#WSDLMSGS

I think the bug is around R2210.   The soap:body in your wsdl isn’t having the 
“parts” on it at all.   


Anyway, my more complete question is:  what does a CXF client (or the JAX-WS RI 
client) generate for the soap message.  This could also be a bug in SOAPUI.    
I believe both the RI and CXF will properly recognize that those parts are 
headers and not put them in the body.   

Dan



> On Dec 2, 2015, at 5:20 PM, Mercader, Felix <[email protected]> 
> wrote:
> 
> Hi Aki
> 
> Thanks a million for your support ! Please help me again with what I 
> discovered below:
> 
> To answer your questions, this is how it looks the wsdl:operation element 
> under the wsdl:binding element:
> 
> 
>    <wsdl:binding name="ServiceImplServiceSoapBinding" type="tns:IService">
>        <soap:binding style="document" 
> transport="http://schemas.xmlsoap.org/soap/http"/>
>        <wsdl:operation name="getParent">
>            <soap:operation soapAction="" style="document"/>
>            <wsdl:input name="getParent">
>                <soap:header encodingStyle="" message="tns:getParent" 
> part="callerId" use="literal"/>
>                <soap:header encodingStyle="" message="tns:getParent" 
> part="timestamp" use="literal"/>
>                <soap:header encodingStyle="" message="tns:getParent" 
> part="signature" use="literal"/>
>                <soap:body use="literal"/>
>            </wsdl:input>
>            <wsdl:output name="getParentResponse">
>                <soap:body use="literal"/>
>            </wsdl:output>
>        </wsdl:operation>
> 
> 
> And now, let me add something I found that I think it can be very 
> interesting. I found this website in the Internet: 
> https://www.wsdl-analyzer.com/
> 
> If I put my WSDL (the one generated in WebLogic, I did not change anything!). 
> It tells me it has one error for each of the calls that the WebService is 
> offering. In this case, for the getParent is telling me this as an error:
> 
>       The operation 'getParent' uses the message 'getParent' which has more 
> than one part.
> 
> The getParent in the WSDL is as following:
> 
>    <wsdl:message name="getParent">
>        <wsdl:part element="tns:getParent" name="parameters"/>
>        <wsdl:part element="tns:callerId" name="callerId"/>
>        <wsdl:part element="tns:timestamp" name="timestamp"/>
>        <wsdl:part element="tns:signature" name="signature"/>
>    </wsdl:message>
> 
> So it has "more than one part". Then I did this change (manual change which I 
> really wouldn't like to do any manual change, but just as a test):
> 
>            <xs:element name="getParentType" type="tns:getParentType"/>
>            <xs:complexType name="getParentType">
>                <xs:sequence>
>                    <xs:element name="parameters" type="tns:getParent"/>
>                    <xs:element name="callerId" type="tns:callerId"/>
>                    <xs:element name="timestamp" type="tns:timestamp"/>
>                    <xs:element name="signature" type="tns:signature"/>
>                </xs:sequence>
>            </xs:complexType>
> 
>               ...
> 
>           <wsdl:message name="getParent">
>               <wsdl:part element="tns:getParentType" name="Wrapper"/>
>           </wsdl:message>             
> 
> So now the getParent is only 1 part. And in fact, if I use the website 
> https://www.wsdl-analyzer.com/, now it tells me that the WSDL is correct. But 
> unfortulately, if I deploy the WebService in WebLogic pointing to this local 
> and manually changed WSDL (adding wsdlLocation="..." in my cxf_servlet.xml 
> file)... then it fails at deploying time in WebLogic with a strange 
> java.lang.NullPointerException:
> 
> <02-Dec-2015 16:14:18 o'clock GMT> <Error> <HTTP> <BEA-101216> <Servlet: 
> "cxf" failed to preload on startup in Web application: 
> "omniWebService_VAPP_war_exploded".
> org.springframework.beans.factory.BeanCreationException: Error creating bean 
> with name 'omniWebService': Invocation of init method failed; nested 
> exception is javax.xml.ws.WebSe
> rviceException: java.lang.NullPointerException
>        at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1422)
>        at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:518)
>        at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
>        at 
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
>        at 
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
>        Truncated. see log file for complete stacktrace
> Caused By: javax.xml.ws.WebServiceException: java.lang.NullPointerException
>        at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:371)
>        at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:251)
>        at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:539)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
>        Truncated. see log file for complete stacktrace
> Caused By: java.lang.NullPointerException
>        at 
> org.apache.cxf.common.util.ASMHelper.getClassCode(ASMHelper.java:209)
>        at 
> org.apache.cxf.jaxws.WrapperClassGenerator.generateMessagePart(WrapperClassGenerator.java:310)
>        at 
> org.apache.cxf.jaxws.WrapperClassGenerator.createWrapperClass(WrapperClassGenerator.java:224)
>        at 
> org.apache.cxf.jaxws.WrapperClassGenerator.generate(WrapperClassGenerator.java:132)
>        at 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.generatedWrapperBeanClass(JaxWsServiceFactoryBean.java:683)
>        Truncated. see log file for complete stacktrace
>> 
> <02-Dec-2015 16:14:18 o'clock GMT> <Error> <Deployer> <BEA-149265> <Failure 
> occurred in the execution of deployment request with ID "24274166714283537" 
> for task "127". Error is:
> "weblogic.application.ModuleException: java.lang.NullPointerException"
> weblogic.application.ModuleException: java.lang.NullPointerException
>        at 
> weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
>        at 
> weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
>        at 
> weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:216)
>        at 
> weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:211)
>        at 
> weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
>        Truncated. see log file for complete stacktrace
> Caused By: java.lang.NullPointerException
>        at 
> org.apache.cxf.common.util.ASMHelper.getClassCode(ASMHelper.java:209)
>        at 
> org.apache.cxf.jaxws.WrapperClassGenerator.generateMessagePart(WrapperClassGenerator.java:310)
>        at 
> org.apache.cxf.jaxws.WrapperClassGenerator.createWrapperClass(WrapperClassGenerator.java:224)
>        at 
> org.apache.cxf.jaxws.WrapperClassGenerator.generate(WrapperClassGenerator.java:132)
>        at 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.generatedWrapperBeanClass(JaxWsServiceFactoryBean.java:683)
>        Truncated. see log file for complete stacktrace
>> 
> <02-Dec-2015 16:14:18 o'clock GMT> <Error> <Deployer> <BEA-149202> 
> <Encountered an exception while attempting to commit the 9 task for the 
> application "omniWebService_VAPP_war_e
> xploded".>
> 
> 
> Any help with this please ?
> 
> Thanks
> flx
> 
> 
> 
> 
> 
> -----Original Message-----
> From: Aki Yoshida [mailto:[email protected]] 
> Sent: 02 December 2015 15:14
> To: [email protected]
> Subject: Re: CXF incorrect WSDL automatically generated ? Please help !
> 
> cxf-2.7.12 isn't so old and it shouldn't be generating the wrong wsdl for the 
> headers.
> how does the corresponding wsdl:operation element under the wsdl:binding 
> element look like?
> 
> 
> 2015-12-02 13:33 GMT+01:00 Mercader, Felix <[email protected]>:
>> Thanks Aki
>> 
>> I am using CXF version 2.7.12
>> 
>> 
>> 
>> 
>> 
>> -----Original Message-----
>> From: Aki Yoshida [mailto:[email protected]]
>> Sent: 02 December 2015 12:26
>> To: [email protected]
>> Cc: Mercader, Felix
>> Subject: Re: CXF incorrect WSDL automatically generated ? Please help !
>> 
>> which cxf version are you using?
>> it could be an old bug.
>> 
>> Questions should go to users@cxf, so I have moved this thread to there..
>> 
>> 
>> 2015-12-02 13:07 GMT+01:00 Felix.1973 <[email protected]>:
>>> Hi there. I am fighting the last two days with the same problem and I 
>>> don't know how to fix this. Even not sure if it is an error or not.
>>> 
>>> I have a CXF Web Service with something I consider very strange and I 
>>> would like to fix. This is one of the calls that the Web Service deals with:
>>> 
>>>    @WebResult (name="merchantHierarchyParentResponse")
>>> MerchantHierarchyParentResponseDTO
>>>    getParent(
>>>            @WebParam(name="institutionNumber")
>>> @XmlElement(required=true) String institutionNumber,
>>>            @WebParam(name="clientNumber") String clientNumber,
>>>            @WebParam(name="ourReference") String ourReference,
>>>            @WebParam(name="accessMerch") String accessMerch,
>>>            @WebParam(header=true, name="callerId") String callerId,
>>>            @WebParam(header=true, name="timestamp") String timestamp,
>>>            @WebParam(header=true, name="signature") String signature
>>>    );
>>> 
>>> As you can see, it receives 4 normal parameters plus 3 extra 
>>> parameters in the header (callerId, timestamp and signature).
>>> 
>>> It compiles successfully. Then I deploy it also successfully in a 
>>> WebLogic server.
>>> 
>>> Finally, I use SoapUI to test it. I provide SoapUI with the URL that 
>>> WebLogic is providing me with the WSDL. This is, I am not doing any 
>>> change in the automatic generated WSDL. This is what I am getting for 
>>> this getParent in SoupUI:
>>> 
>>> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
>>> xmlns:web="http://webService.webservice.omnipay.com.server/";>
>>>   <soapenv:Header>
>>> *      <web:signature>?</web:signature>
>>>      <web:timestamp>?</web:timestamp>
>>>      <web:callerId>?</web:callerId>*
>>>   </soapenv:Header>
>>>   <soapenv:Body>
>>>      <web:getParent>
>>>         <institutionNumber>?</institutionNumber>
>>> 
>>>         <clientNumber>?</clientNumber>
>>> 
>>>         <ourReference>?</ourReference>
>>> 
>>>         <accessMerch>?</accessMerch>
>>>      </web:getParent>
>>> /*      <web:callerId>?</web:callerId>
>>>      <web:timestamp>?</web:timestamp>
>>>      <web:signature>?</web:signature>*/
>>>   </soapenv:Body>
>>> </soapenv:Envelope>
>>> 
>>> My question is very clear. I see the 3 parameters in the header 
>>> section (callerId, timestamp and signature) but why these 3 
>>> parameters are *AGAIN* at the end in the body part ??? I don't want 
>>> them in the body part, I want them only in the header.
>>> 
>>> Any idea why this is happening ? Is that normal ? is it a bug ? Thank 
>>> you for your help !
>>> 
>>> thanks
>>> Felix Mercader
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> --
>>> View this message in context:
>>> http://cxf.547215.n5.nabble.com/CXF-incorrect-WSDL-automatically-gene
>>> r ated-Please-help-tp5763489.html Sent from the cxf-dev mailing list 
>>> archive at Nabble.com.
>> 
>> The information in this message may be proprietary and/or confidential, and 
>> protected from disclosure. If the reader of this message is not the intended 
>> recipient, or an employee or agent responsible for delivering this message 
>> to the intended recipient, you are hereby notified that any dissemination, 
>> distribution or copying of this communication is strictly prohibited. If you 
>> have received this communication in error, please notify First Data 
>> immediately by replying to this message and deleting it from your computer.
> 
> The information in this message may be proprietary and/or confidential, and 
> protected from disclosure. If the reader of this message is not the intended 
> recipient, or an employee or agent responsible for delivering this message to 
> the intended recipient, you are hereby notified that any dissemination, 
> distribution or copying of this communication is strictly prohibited. If you 
> have received this communication in error, please notify First Data 
> immediately by replying to this message and deleting it from your computer.

-- 
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Reply via email to