Вперед-совместимое использование SOAP API - PullRequest
0 голосов
/ 04 января 2019

В настоящее время я занимаюсь разработкой приложения 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>

Заранее благодарим за любые разъяснения или помощь, которую вы можете предоставить

...