cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mercader, Felix" <Felix.Merca...@firstdata.com>
Subject RE: CXF incorrect WSDL automatically generated ? Please help !
Date Thu, 03 Dec 2015 08:54:34 GMT
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:dkulp@apache.org] 
Sent: 02 December 2015 16:49
To: users@cxf.apache.org; 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 <Felix.Mercader@firstdata.com> 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:elakito@gmail.com]
> Sent: 02 December 2015 15:14
> To: users@cxf.apache.org
> 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 <Felix.Mercader@firstdata.com>:
>> Thanks Aki
>> 
>> I am using CXF version 2.7.12
>> 
>> 
>> 
>> 
>> 
>> -----Original Message-----
>> From: Aki Yoshida [mailto:elakito@gmail.com]
>> Sent: 02 December 2015 12:26
>> To: users@cxf.apache.org
>> 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 <felix.mercader@omnipaygroup.com>:
>>> 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
dkulp@apache.org - 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.
Mime
View raw message