JAX-WS服务实现类名自定义不起作用



我正在使用Maven生成web服务的实现代码。最初,此代码是使用其他东西(可能是Eclipse中的向导)从WSDL和模式生成的。jaxws-maven-plugin生成的服务实现类名为MyService_MyServieSOAPImpl。当它最初生成时,实现类被命名为MyService_SOAPImplementation。我猜Eclipse使用的向导允许用户选择实现类的名称。我尝试使用sei元素,但它不起作用。以下是我的POM:中wsimport插件的一个片段

<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<id>generateMyServiceFromWSDL</id>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<genJWS>true</genJWS>
<bindingDirectory>${basedir}/src/main/bindings</bindingDirectory>
<bindingFiles>
<bindingFile>otherSchema.episode</bindingFile>
</bindingFiles>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>MyService.wsdl</wsdlFile>
</wsdlFiles>
<wsdlLocation>${project.basedir}/src/main/resources/wsdl/MyService.wsdl</wsdlLocation>
<sourceDestDir>${project.basedir}/src/main/java</sourceDestDir>
<sei>com.myCompany.MyService_SOAPImplementation</sei>
<xdonotoverwrite>true</xdonotoverwrite>
<xnocompile>true</xnocompile>
<xdebug>true</xdebug>
<verbose>true</verbose>
<target>2.0</target>
</configuration
</execution>
...

从我读过的一些文档来看,sei似乎只适用于wsgen,而不适用于wsimport。如果是这样的话,有什么方法可以强制为实现类名命名吗?


更新

好吧,根据我的阅读,应该可以使用JAX-WS绑定文件来完成这项工作,而不是直接在POM文件中。

我创建了这样的绑定文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
jaxws:wsdlLocation="src/main/webapp/wsdl/MyService.wsdl">
<jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='MyService']">
<!-- change the generated SEI class -->
<jxb:class name="MyServiceSOAPImpl"></jxb:class>
</jaxws:bindings>
</jaxws:bindings>

但这似乎仍然没有任何效果——wsimport仍在以MyService_MyServiceSOAPImpl的形式生成实现。

尝试更改

<jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='MyService']">

<jaxws:bindings node="wsdl:definitions/wsdl:service[@name='MyServiceService']">

注意,节点路径的第二部分是service而不是portType。您将使用portType来自定义服务接口,而不是实现

顺便说一句,需要注意的是,JAX-WS绑定(似乎)需要在它们自己的XML文件中(根据WSDL),而不是包含在JAXB绑定中。

有些人可能会发现这里的JAX-WS绑定列表很有用:http://docs.oracle.com/cd/E13222_01/wls/docs103/webserv/data_types.html#wp227312

如果这对某人有帮助,需要在OP的bindings.xml文件中进行两项更改才能使其工作:

  1. MGE已经提出了第一个更改——将Xpath中的wsdl:portType更改为wsdl:service
  2. 类名的命名空间必须是"jaxws",因此

更改为:

<jaxws:class name="MyServiceSOAPImpl"/>

来自

<jxb:class name="MyServiceSOAPImpl"></jxb:class>

最新更新