[ https://issues.apache.org/jira/browse/CXF-1340?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sean O'Callaghan resolved CXF-1340. ----------------------------------- Resolution: Fixed Have commited a fix for CXF-1662 which also applies to this. http://svn.apache.org/viewvc?view=rev&revision=691237 > wsdl2java overwrites objectFactory methods if multiple service classes are in > the same package, causes value type inheritance problems > -------------------------------------------------------------------------------------------------------------------------------------- > > Key: CXF-1340 > URL: https://issues.apache.org/jira/browse/CXF-1340 > Project: CXF > Issue Type: Bug > Components: Tooling > Affects Versions: 2.0.3, 2.1 > Environment: Windows XP, eclipse > Reporter: Incognito > Assignee: Sean O'Callaghan > Attachments: cxf-issue-objectFactory.zip > > > If you have two wsdl-based services, who's wsdl2java output is in the same > package, the outputted objectFactory retains only the most recent service's > methods. > For example: > Given two wsdl files, CarService.wsdl and UserService.wsdl; if one executes > the wsdl2java binary with both services; with CarService first and > UserService second, and with both service classes being output in package > org.example.api, then only one objectFactory.java class will be created. > First, objectFactory will be created with the objects for CarService.wsdl, > and then it will be overwritten with UserService.wsdl's objects. > It just so happens that in this scenario, if the former service contains an > object that is abstract, that is, that it contains types that inherit via > wsdl's extension keyword, AND methods for creating instances of > CarService.wsdl's outputted java are NOT present in objectFactory.java, then > CXF does not include type information in the SOAP messages. > For example: > given an alternate CarService.wsdl with the following types: > <complexType name="Car" abstract="true"> > ... > </complexType> > <complexType name="Jeep"> > <extension base="Car"> > ... > </extension> > </complexType> > If CarService.wsdl also had a method called getCarById, and wsdl2java output > 2 java classes: getCarById.java and getCarByIdResponse.java, AND wsdl2java on > UserService.wsdl was executed AFTER it was executed on CarService (resulting > in an objectFactory without create methods for getCar*), then CXF will send > SOAP messages like the following > <soap> > <getCarByIdResponse> <!-- type information here would mistakenly be missing > --> > ... > </getCarByIdResposne> > </soap> > The ultimate result is that if a project has more than 1 service being output > in the same package AND if more than 1 type in those two services use type > extension, then CXF will have problems marshalling those classes because it > will end up leaving out the type information for all classes not included in > the ObjectFactory. One alternative would be to have the wsdl2java classes be > output to multiple packages. If the different services shared types, this > would result in duplicated code in each service. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.