JAX-WS service implementation class name customization not working

I'm using Maven to generate the implementation code for a web service. Originally, this code was generated from a WSDL and schema using something else (probably a wizard in Eclipse). The service implementation class name that jaxws-maven-plugin generates is MyService_MyServieSOAPImpl. When this was originally generated, the implementation class was named MyService_SOAPImplementation. I'm guessing that the wizard that Eclipse uses allows the user to choose the name of the implementation class. I tried using the sei element, but it does not work. Here's a snippet of the wsimport plugin in my POM:

<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>
            ...

From some of the documents I've read, it looks like sei is only applicable for wsgen, not wsimport. If that is so, is there any way to force a name for the implementation class name?


UPDATE

Ok, so from my reading, it should be possible to do this with a JAX-WS binding file, not directly in the POM file.

I've created my binding file like this:

<?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>

But this still doesn't seem to have any effect - wsimport is still producing the implementation as MyService_MyServiceSOAPImpl.

Upvotes: 1

Views: 4989

Answers (2)

GWTNewbie
GWTNewbie

Reputation: 395

In case this helps someone, two changes are required in OPs bindings.xml file to get it to work:

  1. The first change was already suggested by MGE - changing the wsdl:portType in the Xpath to wsdl:service
  2. The namespace for class name has to be 'jaxws', so

change to this:

<jaxws:class name="MyServiceSOAPImpl"/>

from

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

Upvotes: 2

Michael Edgar
Michael Edgar

Reputation: 420

Try changing your

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

to

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

Note that the second part of the node path is service and not portType. You would use portType to customize the service interface, not the implementation.

As an aside it's important to note that JAX-WS bindings (seemingly) need to be in their own XML file (per WSDL) and not included with JAXB bindings.

Someone may find the list of JAX-WS bindings here to be useful: http://docs.oracle.com/cd/E13222_01/wls/docs103/webserv/data_types.html#wp227312

Upvotes: 2

Related Questions