Настройки JAXB - несколько схем внутри WSDL и schemaLocation - PullRequest
7 голосов
/ 28 февраля 2010

У меня есть WSDL, который содержит 3 схемы внутри своего элемента "types". Схемы определяются не во внешних XSD, а внутри элемента типов.

Я хочу настроить элемент внутри схемы № 2 и изменить его имя, чтобы избежать конфликта.

Итак, в схеме расположения, как я могу это сделать? Несмотря на постановку вопроса, у меня есть способ сделать это:

 schemaLocation="../wsdl-files/mywsdl.wsdl#types?schema2">
     ...
     <jxb:bindings node="some xpath

но я не тот, кто нашел его, а мой коллега, который больше не работает со мной. Есть ли ресурс, где я могу найти объяснение этому, даже если я его понимаю? Ссылка или книга? Где-то, где я могу найти и другие примеры.

Моя проблема в значении schemaLocation (../ wsdl-files / mywsdl.wsdl # types? Schema2), а не в xpath. Я хочу знать все возможности ссылаться на схему внутри WSDL. Мне нужна документация для этого или что-то.

Большое спасибо

Ответы [ 2 ]

3 голосов
/ 28 февраля 2010

В JAXB Ri v2.1 добавлена ​​поддержка [Обозначения компонентов схемы] [1], которые теоретически позволяют ссылаться на компоненты схемы символически, а не на местоположение файла и местоположение xpath. В принципе, это гораздо приятнее в использовании, но я никогда не использовал его сам.

Однако я не уверен, насколько широко это поддерживается. Там очень мало упоминаний об этом где-либо еще, кроме этой записи в блоге. В нем упоминается, что он был частью предложенной спецификации для JAXB 2.1, поэтому, если она была принята, она должна быть реализована каждой реализацией JAXB 2.1, включая Java6. Возможно, однако, что он никогда не был добавлен к спецификации.

1 голос
/ 28 февраля 2013

Была похожая проблема (пять схем в типах с общими именами) и что-то не получалось правильно работать SCD Мое решение было следующим:

custombinding.xml:

<jxb:bindings version="2.1" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

    <jxb:bindings schemaLocation="file:wsdlfile.wsdl" node="*/xs:schema[1]">
        <jxb:schemaBindings>
            <jxb:package  name="my.custom.package"/>
        </jxb:schemaBindings>
    </jxb:bindings>
</jxb:bindings>

вызов xjc в файле сборки ant:

<target name="xjc_generate">
    <exec executable="xjc" >
      <arg value="-wsdl" />
      <arg value="${wsdl.base}/service/wsdlfile.wsdl" />
      <arg value="-d" />
      <arg value="${dir.src}" />
      <arg value="-b" />
      <arg value="${wsdl.base}/service/custombinding.xjb" />
    </exec>
</target>
...