如何避免 CXF codegen 更改模式中的元素名称?
How to avoid CXF codegen from changing element names in schema?
我在 Maven 项目中使用 cxf-codegen-plugin v. 3.2.4。 WSDL 引用架构:
<xsd:import namespace="http://mynamespace/"
schemaLocation="../schema/MySchema.xsd"/>
但是当生成的Server运行时,发布的wsdl是这样引用schema的:
<xsd:import namespace="http://mynamespace/" schemaLocation="http://localhost:9999/?xsd=1"/>
并且生成的 xsd 更改了给定方法的参数名称。原始模式具有以下定义:
<xs:complexType name="myMethod">
<xs:sequence>
<xs:element name="messageHeader" type="tns:soapMessageHeader" minOccurs="0"/>
<xs:element name="myId" type="xs:string" minOccurs="0"/>
<xs:element name="mySecondId" type="xs:string" minOccurs="0"/>
<xs:element name="myThirdId" type="xs:string" minOccurs="0"/>
<xs:element name="password" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
而生成的架构具有以下内容:
<xs:complexType name="myMethod">
<xs:sequence>
<xs:element name="arg0" type="tns:soapMessageHeader" minOccurs="0"/>
<xs:element name="arg1" type="xs:string" minOccurs="0"/>
<xs:element name="arg2" type="xs:string" minOccurs="0"/>
<xs:element name="arg3" type="xs:string" minOccurs="0"/>
<xs:element name="arg4" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
它将元素名称从定义的名称更改为 "arg0"、"arg..."。我不需要这样做。
我的 pom 有这个:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${source.wsdl.path}</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/MyServiceDefinition.wsdl</wsdl>
<extraargs>
<extraarg>-impl</extraarg>
<extraarg>-verbose</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
为服务自动生成的接口具有@WebParam 注释。
有人能帮帮我吗?
我刚刚弄明白了:虽然为服务生成的接口有@WebParam 注释,但是实现 EndPoint 的相应具体 class 没有它。我认为这不是问题,因为接口有注释。然后我尝试将它们添加到参数中,瞧!生成的xsd一下子就出来了,可以读取参数了!
在http://www.benmccann.com/web-services-tutorial-with-apache-cxf中,作者指出了endpointInterface注解属性的用法,以尊重自动生成的界面中的注解(由cxf本身):
@WebService(endpointInterface = "com.company.auth.service.AuthService",
serviceName = "corporateAuthService")
此替代方案不需要额外的 xml 配置。
Tomcat EE 文档为我们提供了一个完整的示例:http://tomee.apache.org/examples-trunk/simple-webservice
另一个可能相关的 Whosebug 问题:jax-ws regarding endpointinterface
我在 Maven 项目中使用 cxf-codegen-plugin v. 3.2.4。 WSDL 引用架构:
<xsd:import namespace="http://mynamespace/"
schemaLocation="../schema/MySchema.xsd"/>
但是当生成的Server运行时,发布的wsdl是这样引用schema的:
<xsd:import namespace="http://mynamespace/" schemaLocation="http://localhost:9999/?xsd=1"/>
并且生成的 xsd 更改了给定方法的参数名称。原始模式具有以下定义:
<xs:complexType name="myMethod">
<xs:sequence>
<xs:element name="messageHeader" type="tns:soapMessageHeader" minOccurs="0"/>
<xs:element name="myId" type="xs:string" minOccurs="0"/>
<xs:element name="mySecondId" type="xs:string" minOccurs="0"/>
<xs:element name="myThirdId" type="xs:string" minOccurs="0"/>
<xs:element name="password" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
而生成的架构具有以下内容:
<xs:complexType name="myMethod">
<xs:sequence>
<xs:element name="arg0" type="tns:soapMessageHeader" minOccurs="0"/>
<xs:element name="arg1" type="xs:string" minOccurs="0"/>
<xs:element name="arg2" type="xs:string" minOccurs="0"/>
<xs:element name="arg3" type="xs:string" minOccurs="0"/>
<xs:element name="arg4" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
它将元素名称从定义的名称更改为 "arg0"、"arg..."。我不需要这样做。
我的 pom 有这个:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${source.wsdl.path}</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/MyServiceDefinition.wsdl</wsdl>
<extraargs>
<extraarg>-impl</extraarg>
<extraarg>-verbose</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
为服务自动生成的接口具有@WebParam 注释。
有人能帮帮我吗?
我刚刚弄明白了:虽然为服务生成的接口有@WebParam 注释,但是实现 EndPoint 的相应具体 class 没有它。我认为这不是问题,因为接口有注释。然后我尝试将它们添加到参数中,瞧!生成的xsd一下子就出来了,可以读取参数了!
在http://www.benmccann.com/web-services-tutorial-with-apache-cxf中,作者指出了endpointInterface注解属性的用法,以尊重自动生成的界面中的注解(由cxf本身):
@WebService(endpointInterface = "com.company.auth.service.AuthService",
serviceName = "corporateAuthService")
此替代方案不需要额外的 xml 配置。
Tomcat EE 文档为我们提供了一个完整的示例:http://tomee.apache.org/examples-trunk/simple-webservice
另一个可能相关的 Whosebug 问题:jax-ws regarding endpointinterface