【问题标题】:JAX-WS service implementation class name customization not workingJAX-WS 服务实现类名自定义不起作用
【发布时间】:2014-02-24 21:09:12
【问题描述】:

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

<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 的身份生成实现。

【问题讨论】:

    标签: java web-services maven jax-ws wsimport


    【解决方案1】:

    尝试改变你的

    <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

    【讨论】:

      【解决方案2】:

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

      1. MGE 已经建议了第一个更改 - 将 Xpath 中的 wsdl:portType 更改为 wsdl:service
      2. 类名的命名空间必须是“jaxws”,所以

      改成这样:

      <jaxws:class name="MyServiceSOAPImpl"/>
      

      来自

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 2023-03-11
        • 2012-12-16
        • 2023-03-07
        • 2023-03-17
        相关资源
        最近更新 更多