我目前正在开发使用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>
在此先感谢您提供任何澄清或帮助