How to have Java classes generated from WSDL implement an interface

喜欢而已 提交于 2019-12-10 11:02:38

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!