В настоящее время я занимаюсь разработкой приложения Java, которое использует службу SOAP.Мы храним WSDL для этого сервиса в автономном режиме и генерируем нашу модель во время сборки, используя плагин jaxws-maven-plugin, который использует xjc под капотом, хотя проблема здесь может заключаться в моем понимании SOAP, а не в реализации с конкретными инструментами.
Я хочу, чтобы создаваемые нами артефакты jaxb были терпимы к новым изменениям.Из моего прочтения (например, https://stackoverflow.com/a/8790427/1098180) видно, что провайдеру SOAP API следует считать «неразрывным» добавление нового необязательного элемента к существующему типу, а потребители исходного WSDL должны иметь возможность адаптироватьсяк этому.
Моя проблема в том, что я не вижу, как можно генерировать наши артефакты, чтобы мы могли быть устойчивыми к изменениям такого типа. Если новый элемент добавляется к существующему типу, независимо от того,независимо от того, является ли он nillable
или имеет minOccurs=0
, это нарушит нашу реализацию, поскольку мы все еще проверяем соответствие существующему WSDL, что означает, что мы получим «недопустимый дочерний элемент».
Я что-то здесь неправильно понял?Возможно, предыдущий WSDL должен быть определен таким образом, чтобы допускать изменения такого типа, и поставщик SOAP API демонстрирует плохие практики, настраивая API таким образом? Или я могу настроить способ генерации наших артефактов, чтобыболее терпимо к изменениям?
Для справки, наше поколение плагинов javaws-maven:
<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>
Заранее благодарим за любые разъяснения или помощь, которую вы можете предоставить