Настройки JAXB — несколько схем внутри WSDL и schemaLocation

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

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

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

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

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

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

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


person Timmo    schedule 28.02.2010    source источник
comment
Моя проблема заключается в значении schemaLocation (../wsdl-files/mywsdl.wsdl#types?schema2), а не в xpath и т. д. Я хочу знать все возможности ссылки на схему внутри WSDL и т. д. Мне нужна документация для этого или что-то. Еще раз спасибо   -  person Timmo    schedule 28.02.2010
comment
Какой инструмент вы используете для привязки WSDL?   -  person skaffman    schedule 28.02.2010
comment
вы должны отредактировать свой вопрос и поместить в него содержимое своего комментария в разделе «Обновление:». Затем удалите комментарий.   -  person John Saunders    schedule 28.02.2010
comment
Синтаксис, который вы указали для указания схемы внутри файла WSDL, ужасен, но он работает! В CXF я смог получить доступ к узлу на основе XPATH, используя суффикс #types6, где рассматриваемая схема была 6-й в файле. SCD, предложенный skaffman, действительно работает намного лучше, но вы помогли мне решить эту конкретную проблему, большое спасибо!   -  person Carl Smotricz    schedule 07.06.2012


Ответы (3)


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

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

person skaffman    schedule 28.02.2010
comment
Спасибо чувак! Это выглядит великолепно. Но есть ли у вас что-нибудь, что описывает эти: #types?schema2 Спасибо! - person Timmo; 01.03.2010
comment
@DaUltimateTrooper: смысл SCD в том, что вам не нужно указывать расположение схемы в настройке привязки, вы обращаетесь к элементам схемы по имени. - person skaffman; 03.03.2010
comment
Судя по тому, что я обнаружил, SCD по-прежнему официально не поддерживается, но xjc от Sun будет использовать его, если указана опция -extension, и зависимые инструменты, такие как CXF, также работают с ним. Синтаксис еще сложнее понять, чем XPATH, но его можно заставить работать. - person Carl Smotricz; 07.06.2012

Была аналогичная проблема (пять схем в типах с общими именами) и почему-то не удалось заставить 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>
person andro83    schedule 28.02.2013

Вам нужно указать расположение схемы в wsdl вот так - если это 2-я схема.

например: mywsdl.wsdl#types2
Если 10-й, то mywsdl.wsdl#types10

Надеюсь, это поможет кому-то.

  <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="../wsdl-files/mywsdl.wsdl#types2" node="/xs:schema">
            <jxb:schemaBindings>
                <jxb:package  name="my.custom.package"/>
            </jxb:schemaBindings>
        </jxb:bindings>
    </jxb:bindings>
person SzabK    schedule 02.10.2019