Веб-сервис Microsoft и клиент CXF: JAXB не может понять "s: схема" - PullRequest
8 голосов
/ 22 августа 2011

У меня есть обычный веб-сервис Microsoft и обычный CXF последней версии с Java / JDK 1.6, Eclipse и т. Д. Когда я запускаю wsdl2java, часть JAXB выдает ошибку «Брошено JAXB: неопределенное объявление элемента s: schema '"

Часть wsdl, которая вызывает это выглядит так:

<s:element name="GetDepartmentsResponse">
 <s:complexType>
  <s:sequence>
   <s:element minOccurs="0" maxOccurs="1" name="GetDepartmentsResult">
    <s:complexType>
     <s:sequence>
      <s:element ref="s:schema" /> 
      <s:any /> 
     </s:sequence>
    </s:complexType>
   </s:element>
  </s:sequence>
 </s:complexType>
</s:element>

Могу ли я просто удалить <s:element ref="s:schema" /> везде и сохранить <s:any/>?Это выглядит как обычное препятствие для интраоперабельности веб-сервисов Java <-> Microsoft.Но я не могу найти обходной путь для CXF.

Спасибо

Ответы [ 2 ]

8 голосов
/ 22 августа 2011

Обычно вы можете удалить схему ref. Возможно, вам придется изменить <s:any> на <s:any maxOccurs="2"> или аналогичный, чтобы убедиться, что есть место как для элемента схемы, так и всего, что за ним следует.

0 голосов
/ 26 октября 2017

Лично я бы не советовал изменять ваш WSDL.WSDL определяет контракт, налагаемый службой, и это не то, что вы должны изменить в своем клиенте.Если вы посмотрите на ответ здесь https://stackoverflow.com/a/19126124/1732319, он описывает, как вы можете wsdl2java правильно обработать s:schema.

Я использую плагин CXF codegen maven в своем проектеи имеют следующую конфигурацию:

<configuration>
    <fork>once</fork>
    <additionalJvmArgs>-Djavax.xml.accessExternalDTD=all -Djavax.xml.accessExternalSchema=all</additionalJvmArgs>
    <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
    <wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
    <defaultOptions>
        <bindingFiles>
            <bindingFile>http://www.w3.org/2001/XMLSchema.xsd</bindingFile>
            <bindingFile>${basedir}/src/main/resources/customisation.xjb</bindingFile>
        </bindingFiles>
    </defaultOptions>
</configuration>

customisation.xjb взято из ответа, на который я ссылаюсь выше.

...