【问题标题】:How do I link to XSD files using the Apache CXF Maven plugin?如何使用 Apache CXF Maven 插件链接到 XSD 文件?
【发布时间】:2014-06-16 23:15:33
【问题描述】:

我正在使用 Apache cxf-codegen-plugin Maven 插件尝试从 WSDL 文件生成 Java 类。我收到以下错误:

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) 在我尝试使用以下 POM 文件引用的 XSD 文件中定义:

<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>  

关于我为什么会出错的任何建议?我不确定添加 &lt;dependency&gt; 是否正确,但我很难找到描述如何引用 XSD 文件的文档。

这里是来自 WSDL 文件的 sn-p,它引用了缺失的类型:

<?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 文件的标题和 sn-p:

<?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" />

【问题讨论】:

    标签: java maven wsdl cxf cxf-codegen-plugin


    【解决方案1】:

    您的 wsdl 需要一个 wsdl:types 元素,其中包含一个带有导入的模式。基本上,wsdl 需要了解架构。

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

    【讨论】:

    • 谢谢,这似乎已经解决了这个问题。有没有办法在插件中进行配置,而不是调整 WSDL 文件?
    • 让 WSDL 包含 XSD 文件的硬编码路径似乎是错误的。这应该是构建配置问题。
    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多