2014-04-30 5 views
1

Я использую плагин Apache cxf-codegen-plugin Maven, чтобы попытаться сгенерировать классы Java из файла WSDL. Я получаю следующее сообщение об ошибке:Как связать файлы XSD с помощью плагина Apache CXF Maven?

Part <parameters> in Message <{http://www.foo.com/bar}PushCommandSoapIn> referenced Type <{http://www.foo.com/bar}CommandMessage> can not be found in the schemas

рассматриваемого типа (CommandMessage) определяется в файле XSD, который я пытался сослаться, используя следующий POM файл:

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>2.7.11</version> 
    <executions> 
    <execution> 
     <id>generate-sources</id> 
     <phase>generate-sources</phase> 
     <configuration> 
     <wsdlOptions> 
      <wsdlOption> 
      <wsdl>${basedir}/src/main/resources/wsdl/SomeService.wsdl</wsdl> 
      <dependencies> 
       <!-- Here I try to reference the XSD --> 
       <dependency>${basedir}/src/main/resources/wsdl/SomeTypes.xsd</dependency> 
      </dependencies> 
      </wsdlOption> 
     </wsdlOptions> 
     </configuration> 
     <goals> 
     <goal>wsdl2java</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Любые предложения Почему я получаю сообщение об ошибке? Я не уверен, что добавление <dependency> является правильным способом, но я изо всех сил пытался найти документацию, описывающую ссылки на файлы XSD.

Вот фрагмент кода из файла WSDL, который относится к отсутствующей типа:

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
     xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
     xmlns:bar="http://www.foo.com/bar" 
     targetNamespace="http://www.foo.com/bar"> 
    <wsdl:message name="PushCommandSoapIn"> 
    <wsdl:part name="parameters" element="bar:CommandMessage" /> 
    </wsdl:message> 

Вот заголовок и фрагмент из файла XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<schema targetNamespace="http://www.foo.com/bar" 
     xmlns:bar="http://www.foo.com/bar" 
     xmlns="http://www.w3.org/2001/XMLSchema" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
     elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd" /> 
    ... 
    <element name="CommandMessage" type="bar:CommandMessageType" substitutionGroup="bar:Message" final="#all" /> 

ответ

2

Ваш WSDL потребуется Элемент wsdl: type содержит в нем схему с импортом. В принципе, wsdl должен знать о схеме.

<wsdl:types> 
    <xsd:schema> 
     <xsd:import namespace="http://www.foo.com/bar" schemaLocation="bar.xsd"/> 
    </xsd:schema> 
</wsdl:types> 
+0

Спасибо, это, похоже, решило проблему. Есть ли способ настроить это внутри плагина, а не корректировать файл WSDL? –

+1

Кажется неправильным, чтобы WSDL содержал жестко закодированный путь для XSD-файла. Это должно быть проблемой конфигурации сборки. –

Смежные вопросы