wsimport: добавление привязки, когда XSD встроен в WSDL?

Я пытаюсь сгенерировать код Java из следующего WSDL: http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl

$ wsimport -keep  "http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl"

однако он генерирует JAXBElement<String> вместо String. Итак, я попытался использовать привязку xjb, как описано здесь: Избавьтесь от JAXBElement в классах, сгенерированных wsimport, вызываемых из ant

<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
  <jxb:bindings>
    <jxb:globalbindings generateelementproperty="false">
      <jxb:javatype name="java.lang.String" xmltype="xs:string"/>
    </jxb:globalbindings>
  </jxb:bindings>
</jxb:bindings>

но wsimport вызывает исключение:

$ wsimport -keep -b binding.xjb "http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl"
[ERROR] The "jxb:globalbindings" customization is not associated with any schema element.
  line 6 of file:/home/lindenb/tmp/WS/biostar14996.xjb

Схема XSD встроена в документ WSDL. Какой URI я должен указать для jxb: schemaLocation? Как я могу решить эту проблему?

Спасибо,

P.


person Pierre    schedule 02.12.2011    source источник


Ответы (3)


В конце концов у меня получилось:

<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" wsdlLocation="YOUR_WSDL_LOCATION">
    <jxb:globalBindings generateElementProperty="false"/> 
</jxb:bindings>
person vlad    schedule 29.02.2012

Служба игл EMBOSS EMBL-EBI (http://www.ebi.ac.uk/Tools/services/soap/emboss_needle?wsdl) и большинство других служб аналитических инструментов (см. http://www.ebi.ac.uk/Tools/webservices/) позволяют параметрам отправки иметь три состояния:

  1. Явное значение
  2. Нулевое значение
  3. Быть опущенным

Это обеспечивает совместимость с широким спектром наборов инструментов SOAP, некоторые из которых предполагают только одно или два из этих трех вариантов поведения.

Прискорбным побочным эффектом этого является то, что такие инструменты, как JAX-WS, которые понимают, что существует три состояния, должны использовать более сложное представление, чтобы справиться с этим. Таким образом, требуются классы JAXBElement. EMBL-EBI предоставляет образцы клиентов с исходным кодом, использующим JAX-WS для их служб InterProScan (SOAP) и NCBI BLAST (SOAP), которые используют тот же шаблон для своих параметров (см. http://www.ebi.ac.uk/Tools/webservices/tutorials/06_programming/java/soap/jax-ws).

person Hamish McWilliam    schedule 26.01.2012

Я считаю, что ваша проблема похожа на этот пост; есть ссылки, указывающие на документацию, а также на решение; в основном, когда вы выполняете привязку к файлам WSDL, вам нужен другой элемент верхнего уровня; принятый ответ также дает вам командную строку.

person Petru Gardea    schedule 02.12.2011