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 [email protected] http://dankulp.com/blog
