3

我正在尝试从内联 WSDL 更改 cxf 生成源的类名。我使用 xpath 指定的绑定一直被忽略。

下面是我的绑定文件:

<jaxws:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns="http://java.sun.com/xml/ns/jaxws"
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
    targetNamespace="http://www.example.org/Small/"
    version="1.0">

    <jaxb:bindings node="//xsd:element[@name='NewOperationRequest']">
      <jaxb:class name="xyz"/>
    </jaxb:bindings>
</jaxws:bindings>

下面是我的wsdl文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/Small/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Small" targetNamespace="http://www.example.org/Small/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://www.example.org/Small/">
      <xsd:element name="NewOperationX">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="in" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="NewOperationResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="out" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="NewOperationRequest">
    <wsdl:part element="tns:NewOperationX" name="parameters"/>
  </wsdl:message>
  <wsdl:message name="NewOperationResponse">
    <wsdl:part element="tns:NewOperationResponse" name="parameters"/>
  </wsdl:message>
  <wsdl:portType name="Small">
    <wsdl:operation name="NewOperation">
      <wsdl:input message="tns:NewOperationRequest"/>
      <wsdl:output message="tns:NewOperationResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="SmallSOAP" type="tns:Small">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="NewOperation">
      <soap:operation soapAction="http://www.example.org/Small/NewOperation"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="Small">
    <wsdl:port binding="tns:SmallSOAP" name="SmallSOAP">
      <soap:address location="http://www.example.org/"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

下面是我的 cxf pom 插件:

     <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
            <execution>
                <configuration>
                    <sourceRoot>
                        target/generated-sources
                    </sourceRoot>
                    <wsdlOptions>
                        <wsdlOption>
                            <wsdl>${basedir}/src/main/webapp/WEB-INF/wsdl/small.wsdl</wsdl>
                            <bindingFiles>
                               <bindingFile>${basedir}/src/main/webapp/WEB-INF/wsdl/small.xjb</bindingFile>
                             </bindingFiles>
                        </wsdlOption>
                    </wsdlOptions>
                </configuration>
                <goals>
                    <goal>wsdl2java</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

我找不到使用 CXF 的内联 WSDL 的自定义绑定示例。任何帮助表示赞赏。谢谢,

4

1 回答 1

0

我认为您在这里遇到了命名空间问题。您的内部绑定需要是jaxws绑定而不是jaxb绑定。

尝试以下作为您最里面的绑定而不是您的<jaxb:bindings>元素(我还修改了您的 xpath):

<jaxws:bindings node="wsdl:definitions/wsdl:message[@name='NewOperationRequest']">
        <class name="xyz"/>
</jaxws:bindings>       

在Apache CXF 站点的 JAXWS定制部分下,有一个类似的示例重命名了端口类型。

有关更多选项,这里是 GitHub 上的一个链接,指向一个JAX-WS 示例绑定文件,该文件演示了您可以自定义的 wsdl 的各个部分。

于 2019-02-20T01:39:04.167 回答