to add to what i said below, as the generated wsdl in your cxf setup
and the plain cxf setup differs, i suspect that your cxf setup has
some inconsistency, either having a duplicate very old cxf version
being picked up that might have this incorrect behavior or something
other than cxf is generating your wsdl.


2015-12-03 11:03 GMT+01:00 Aki Yoshida <[email protected]>:
> the cxf (including version 2.7.12) should be generating the parts
> attribute in that case and I don't understand why you needed to
> manually add it.
>
> i just tried your sample (only changed the return type from your
> custom type to String) with cxf-2.7.12 and I am getting the following
> binding element.
>
>   <wsdl:binding name="FelixSampleServiceSoapBinding" 
> type="tns:FelixSamplePort">
>     <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 message="tns:getParent" part="callerId" use="literal">
>         </soap:header>
>         <soap:header message="tns:getParent" part="timestamp" use="literal">
>         </soap:header>
>         <soap:header message="tns:getParent" part="signature" use="literal">
>         </soap:header>
>         <soap:body parts="parameters" use="literal"/>
>       </wsdl:input>
>       <wsdl:output name="getParentResponse">
>         <soap:body use="literal"/>
>       </wsdl:output>
>     </wsdl:operation>
>   </wsdl:binding>
>
> it has the parts parameter for the body element for this multi
> parameters operation.
>
>
>
> 2015-12-03 9:54 GMT+01:00 Mercader, Felix <[email protected]>:
>> Daniel / Aki... thank you very very much !!! My problem is now fixed. My 
>> webservice is working nice wonderfully and the header parameters are in the 
>> header only, not in the body too anymore.
>>
>> Let me show you how I fixed and ask you one more question please.
>>
>> Daniel, you were totally right about the "parts" attribute not boing in my 
>> WSDL. So this is how I fixed, changing
>>
>> <soap:body use="literal">
>>
>> To
>>
>> <soap:body use="literal" parts="parameters"/>
>>
>> Even with this change, if I use now the online wsdl validator 
>> (https://www.wsdl-analyzer.com/), it tells me everything is fine in my wsdl 
>> now !
>>
>> Now I am investigating a bit more about this parts attribute. But let me ask 
>> you... It is an automatic generated WSDL. And I really would like NOT to do 
>> any manual change to the WSDL. So why this attribute was not in the wsdl ? I 
>> needed your help to fix it. It does not seem obvious to me.
>>
>> This attribute is not appearing to me when deploying in WebLogic. Is this 
>> the desired behaviour ? is it a bug ?
>>
>> In other words, the question I really want to ask: can I do any change in 
>> the java code of my cxf web service so this attribute will appear so I don't 
>> need to do any manual change to the WSDL ?
>>
>> This is my current code for this getParent call:
>>
>>     @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
>>     );
>>
>> Thank you a million !!! You both helped me loads !
>>
>> flx
>>
>>
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>> From: Daniel Kulp [mailto:[email protected]]
>> Sent: 02 December 2015 16:49
>> To: [email protected]; Mercader, Felix
>> Subject: Re: CXF incorrect WSDL automatically generated ? Please help !
>>
>> 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-gen
>>>>> e 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
>>
>>
>> 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.

Reply via email to