wsimport: добавление Binding, когда XSD встроен в WSDL? - PullRequest
2 голосов
/ 03 декабря 2011

Я пытаюсь сгенерировать некоторый код 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.

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

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

<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>
1 голос
/ 26 января 2012

Сервис игл EMBL-EBI EMBOSS (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).

0 голосов
/ 03 декабря 2011

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

...