我在Maven项目中使用cxf-codegen-plugin v。3.2.4。 WSDL指的是模式:
<xsd:import namespace="http://mynamespace/"
schemaLocation="../schema/MySchema.xsd"/>
但是当生成的服务器运行时,已发布的wsdl指的是这样的架构:
<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注释。
请问有人可以帮我吗?
答案 0 :(得分:0)
我刚刚弄清楚了:尽管为服务生成的接口具有@WebParam批注,但是实现EndPoint的各个具体类却没有它。我认为这不会有问题,因为该接口具有注释。然后,我尝试将它们添加到参数中,然后添加!生成的xsd突然出现,我可以读取参数了!
答案 1 :(得分:0)
在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
另一个可能与之相关的stackoverflow问题:jax-ws regarding endpointinterface