如何让WSDL生成的Java类实现接口

如何让WSDL生成的Java类实现接口,java,wsdl,jaxb,cxf,xjc,Java,Wsdl,Jaxb,Cxf,Xjc,我们的主要wsdl有一系列wsdl导入。每个子wsdl导入common.xsd并为特定操作定义请求和应答对象 我希望每个子wsdl文档中的请求对象实现一个公共接口 首先,我尝试使用xsd:extension并将公共元素提取到基类中。这是可行的,但是改变了公开的wsdl,我不想这样做。现在已经稳定了一段时间了。此更改对web服务的消费者应该是完全透明的 我发现: 所以我应该可以使用 com.acme.foo.MyInterface 但这需要运行jaxb w/“-Xinheritance”,而我似

我们的主要wsdl有一系列wsdl导入。每个子wsdl导入common.xsd并为特定操作定义请求和应答对象

我希望每个子wsdl文档中的请求对象实现一个公共接口

首先,我尝试使用xsd:extension并将公共元素提取到基类中。这是可行的,但是改变了公开的wsdl,我不想这样做。现在已经稳定了一段时间了。此更改对web服务的消费者应该是完全透明的

我发现:

所以我应该可以使用 com.acme.foo.MyInterface

但这需要运行jaxb w/“-Xinheritance”,而我似乎不知道如何在我的maven构建中做到这一点。我正在使用org.apache.cxf:cxfcodegenplugin:wsdl2java从wsdl生成Java源代码

我是否需要将模式从wsdl提取到XSD,并直接使用JAXB生成Java源代码

还有其他选择吗

谢谢。

请检查。您需要执行以下操作:

<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>

org.apache.cxf
cxf-codegen插件
生成源
生成源
wsdl2java
${basedir}/src/main/wsdl/CustomerService.wsdl
${basedir}/src/main/wsdl/binding.xml
${basedir}/src/main/wsdl/binding.xjb
-xjc新遗传
org.jvnet.jaxb2_commons
jaxb2基础知识
检查。您需要执行以下操作:

<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>

org.apache.cxf
cxf-codegen插件
生成源
生成源
wsdl2java
${basedir}/src/main/wsdl/CustomerService.wsdl
${basedir}/src/main/wsdl/binding.xml
${basedir}/src/main/wsdl/binding.xjb
-xjc新遗传
org.jvnet.jaxb2_commons
jaxb2基础知识

我发现
cxf codegen插件
对于从WSDL生成Web服务非常有用。。。但对于从模式生成POJO,我更喜欢使用
cxf xjc插件
,它可以配置为使用
继承插件
,就像这样:我发现
cxf codegen插件
对于从WSDL生成Web服务非常有用。。。但对于从模式生成POJO,我更喜欢使用
cxf xjc plugin
,可以将其配置为使用
继承插件
,如下所示: