问题
Our main wsdl has a series of wsdl imports. Each sub-wsdl imports common.xsd and defines the request and reply objects for a particular operation.
I want the request objects in each of the sub-wsdl documents to implement a common interface.
First, I tried using xsd:extension and extracted the common elements to a base class. This works, but changes the publicly exposed wsdl and I don't want to do that. It has been stable and unchanged for a while now. This change should be completely transparent to consumers of the web services.
I found this: http://confluence.highsource.org/display/J2B/Inheritance+plugin
So I should be able to use <inheritance:implements>com.acme.foo.MyInterface </inheritance:implements>
But this requires requires running jaxb w/ "-Xinheritance" and I can't seem to figure out how to do that in my maven build. I'm using org.apache.cxf:cxf-codegen-plugin:wsdl2java to generate Java source from wsdl.
Do I need to extract the schema(s) from the wsdl to xsds and generate the Java sources directly with JAXB?
Are there any other options?
Thanks.
回答1:
Check this link. You'll need to do something like:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/CustomerService.wsdl</wsdl>
<bindingFiles>
<bindingFile>${basedir}/src/main/wsdl/binding.xml</bindingFile>
<bindingFile>${basedir}/src/main/wsdl/binding.xjb</bindingFile>
</bindingFiles>
<extraargs>
<extraarg>-xjc-Xinheritance</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version><!-- version --></version>
</dependency>
</dependencies>
</plugin>
来源:https://stackoverflow.com/questions/7652338/how-to-have-java-classes-generated-from-wsdl-implement-an-interface