Веб-служба Microsoft и клиент CXF: JAXB не понимает схему s:

У меня есть обычный веб-сервис 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.


person Community    schedule 22.08.2011    source источник


Ответы (2)


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

person Daniel Kulp    schedule 22.08.2011

Лично я бы не советовал изменять ваш 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 взято из ответа, на который я ссылаюсь выше.

person Martin Cassidy    schedule 26.10.2017
comment
В моем случае это работает без файла customisation.xjb и с использованием XMLSchema.xsd в автономном режиме. - person JuanMoreno; 13.02.2020