转发兼容的SOAP API使用情况

时间:2019-01-04 11:29:41

标签: java soap jaxb wsimport jaxws-maven-plugin

我目前正在开发使用SOAP服务的Java应用程序。我们离线存储此服务的WSDL,并在构建时使用jaxws-maven-plugin生成模型,jaxws-maven-plugin在后台使用xjc,尽管这里的问题可能出在我对SOAP的理解上,而不是我对特定工具的实现上。 / p>

我想使我们生成的jaxb工件可以容忍新的变化。根据我的阅读(例如https://stackoverflow.com/a/8790427/1098180),对于SOAP API提供者来说,向现有类型添加新的可选元素应该被认为是“不间断”的,并且原始WSDL的使用者应该能够适应对此。

我的问题是我看不到如何生成我们的工件,以使我们能够适应这些类型的更改。如果将一个新元素添加到现有类型中,无论它是nillable还是具有minOccurs=0,都会破坏我们的实现,因为我们仍将根据现有WSDL进行验证,这意味着我们将获得“无效”子元素”。

我在这里误解了吗?也许以前的WSDL必须以允许进行这些类型的更改的方式进行定义,并且SOAP API提供程序通过以这种方式调整API来表现出不良做法?还是我可以调整工件的生成方式以更容忍变化?

作为参考,我们的javaws-maven-plugin生成为:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <configuration>
            <keep>true</keep>
            <xjcArgs>
                <xjcArg>-XautoNameResolution</xjcArg>
            </xjcArgs>
            <bindingFiles>
                <bindingFile>${project.basedir}/src/main/resources/wsdl/jaxb-binding.xml</bindingFile>
            </bindingFiles>
        </configuration>
        <executions>
            <execution>
                <id>jaxws-wsimport-identity</id>
                <goals>
                    <goal>wsimport</goal>
                </goals>
                <phase>generate-sources</phase>
                <configuration>
                    <wsdlFiles>
                        <wsdlFile>${project.basedir}/src/main/resources/wsdl/Example.wsdl</wsdlFile>
                    </wsdlFiles>
                </configuration>
            </execution>
        </executions>
    </plugin>

具有jaxb绑定:

<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
    <jaxb:globalBindings generateElementProperty="false" />
</jaxb:bindings>

在此先感谢您提供任何澄清或帮助

0 个答案:

没有答案