Я использую плагин 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" />
Спасибо, это, похоже, решило проблему. Есть ли способ настроить это внутри плагина, а не корректировать файл WSDL? –
Кажется неправильным, чтобы WSDL содержал жестко закодированный путь для XSD-файла. Это должно быть проблемой конфигурации сборки. –