cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Re: wsdl2java: avoiding INOUT parameters in wrapper style
Date Fri, 10 Sep 2010 19:52:27 GMT

I'm really not seeing any way to generate the older (non-compliant) style 
interface.   If you want to take the changes made for CXF-2582 (see the 
subversion tab in jira) and turn them into a patch that are disabled with a 
new "-compat 2.2.5" flag, we could definitely accept that.

Dan


On Thursday 09 September 2010 11:51:57 am Thomas GL wrote:
> Hi,
> 
> We are using CXF 2.2.5 for a project, and we are trying to upgrade to
> current version (2.2.10). But it happens that, for many of our services,
> the Java interface generated by wsdl2java does change. Here is an example:
> 
> <wsdl:definitions ...>
>   <wsdl:types>
>     <xsd:schema ...>
>       <xsd:complexType name="Update">
>         <xsd:sequence>
>           <xsd:element name="installedResource" type="InstalledResource"/>
>         </xsd:sequence>
>       </xsd:complexType>
>       <xsd:complexType name="UpdateResponse">
>         <xsd:sequence>
>           <xsd:element name="installedResource" type="InstalledResource"/>
>         </xsd:sequence>
>       </xsd:complexType>
>     </xsd:schema>
>   </wsdl:types>
>   <wsdl:message name="update">
>     <wsdl:part name="fault" element="schemas:update"/>
>   </wsdl:message>
>   <wsdl:message name="updateResponse">
>     <wsdl:part name="fault" element="schemas:updateResponse"/>
>   </wsdl:message>
>   <wsdl:portType name="ManageResourceInstalledBase">
>     <wsdl:operation name="update">
>       <wsdl:input name="updateInput" message="interface:update"/>
>       <wsdl:output name="updateOutput" message="interface:updateResponse"/>
>     </wsdl:operation>
>   </wsdl:portType>
>   <wsdl:binding ...>
>     ...
>   </wsdl:binding>
>   <wsdl:service ...>
>     ...
>   </wsdl:service>
> </wsdl:definitions>
> 
> CXF 2.2.5 used to generate the following interface method for this
> operation:
> 
>     @ResponseWrapper(localName = "updateResponse", targetNamespace = "...",
> className = "....UpdateResponse") @RequestWrapper(localName = "update",
> targetNamespace = "...", className = "....Update") @WebResult(name =
> "installedResource", targetNamespace = "...") @WebMethod(action = "...")
>     public InstalledResource update(
> 	  @WebParam(name = "installedResource", targetNamespace = "...")
> 	  InstalledResource installedResource
>     );
> 
> CXF 2.2.10 now generates the following interface method instead:
> 
>     @ResponseWrapper(localName = "updateResponse", targetNamespace = "...",
> className = "....UpdateResponse") @RequestWrapper(localName = "update",
> targetNamespace = "...", className = "....Update") @WebMethod(action =
> "...")
>     public void update(
>         @WebParam(mode = WebParam.Mode.INOUT, name = "installedResource",
> targetNamespace = "...") javax.xml.ws.Holder<InstalledResource>
> installedResource
>     );
> 
> According to the JAX-WS spec, the later code is the right one: input and
> output parameters both have a single child element, with the same name and
> type, and thus can be wrapped as an in/out parameter. CXF 2.2.5 actualy
> had a bug, which was fixed with issue CXF-2582:
> https://issues.apache.org/jira/browse/CXF-2582
> 
> But we have developed our code based on the former kind of interfaces, and
> we would like to keep that unchanged. Hence the question: is there some
> way (with jaxws bindings for instance) to restore 2.2.5-style interfaces
> in such cases? We would like to achieve this without modifying the WSDL,
> and without disabling wrapper style.
> 
> Thanks in advance for your help and ideas,
> Thomas.

-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog

Mime
View raw message