Как связать файлы XSD с помощью плагина Apache CXF Maven?

1

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

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" />
Теги:
maven
wsdl
cxf
cxf-codegen-plugin

1 ответ

2

Вашему wsdl понадобится элемент wsdl: types, в котором есть схема с импортом. В принципе, 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. Это должно быть проблемой конфигурации сборки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню