I want to share my solution for the Axis/Maven 2.0 integration. I was
able to get both, java2wsdl and wsdl2java, running, using the Ant trick
for java2wsdl.

I was wrong with the point about the build life cycle. WSDL creation
fits very well into it!

As long as there is no maven plug-in for java2wsdl the Axis Ant Task
must be used along with an external Ant build file as recommended in the
antrun plug-in documentation. You can use the following pom.xml to let
the wsdl2java plug-in generate the source:

<project xmlns="http://maven.apache.org/POM/4.0.0";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd";>

  <parent>
    <groupId>com.myco</groupId>
    <artifactId>webservices</artifactId>
    <version>1.0-SNAPSHOT</version>  
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.myco</groupId>
  <artifactId>WS-IMPL</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Webservice Impl</name>

  <build>
    <plugins>
        
      <plugin>
        <!-- 
        As long as the java2wsdl-maven-plugin is not there we 
        have to use the antrun plug-in to do the job.
         -->
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <configuration>
              <tasks>
                <ant antfile="java2wsdl.xml" target="generate"/>
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
        
      <!-- The order of these two plug-ins is important 
      to make sure that the Ant task is run before the sources
      are generated using the wsdl2java-maven-plugin below.
      -->

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>wsdl2java-maven-plugin</artifactId>
        <version>0.4-SNAPSHOT</version>
        <configuration>
        </configuration>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <configuration>               
          <!-- configuration, see
http://mojo.codehaus.org/wsdl2java-maven-plugin/generate-mojo.html -->
<sourceDirectory>${basedir}/target/generated-wsdl</sourceDirectory>             
    
                <packageSpace>com.myco.webservices</packageSpace>
                <serverSide>true</serverSide>
            </configuration>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>axis</groupId>
      <artifactId>axis</artifactId>
      <version>1.2.1</version>
    </dependency>
      
    <dependency>
      <groupId>axis</groupId>
      <artifactId>axis-jaxrpc</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>axis</groupId>
      <artifactId>axis-wsdl4j</artifactId>
      <version>1.5.1</version>
    </dependency>
      
    <dependency>
      <groupId>axis</groupId>
      <artifactId>axis-saaj</artifactId>
      <version>1.2.1</version>
    </dependency>
      
    <dependency>
      <groupId>com.myco</groupId>
      <artifactId>WS-API</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

  </dependencies>
</project>

The java2wsdl.xml Ant Build file looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Java2Wsdl" default="generate">
        
  <path id="classpath">
    <fileset dir="${axis.home}/lib">
        <include name="*.jar"/>
    </fileset>
    <pathelement path="${java.class.path}"/>
  </path>

  <path id="axis.classpath">
    <path refid="classpath"/>

    <!--  Add the classes of the API module --> 
    <pathelement path="../WS-API/target/classes" />
  </path>
        
  <taskdef name="axis-java2wsdl"
        classname="org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask" >
    <classpath refid="classpath" />
  </taskdef>

  <target name="generate" description="Generates the WSDL files">
    <mkdir dir="target/generated-wsdl"/>
    <axis-java2wsdl classpathref="axis.classpath"
      output="target/generated-wsdl/MyService.wsdl"
      classname="com.myco.webservices.MyService"
      namespace="urn:MyService"
      location="http://localhost:8080/axis/services/MyService";
    >
      <mapping namespace="urn:MyService"
        package="com.myco.webservices" />
    </axis-java2wsdl>
  </target>

</project>


When the Maven plug-in for java2wsdl will be available, one could
replace the Ant stuff with this simpler code:

  <build>
    <plugins>
      <plugin>
        <artifactId>java2wsdl-maven-plugin</artifactId>
        <version>...</version>
        <configuration>
        <!-- -->
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

This solution is not very elegant, as I needed to hard-code the location
of the WS-API classes in the Ant build file. You need to change that for
your implementation to match the location of your module that contains
the class from which the WSDL file shall be created.

My last open question is how to best implement the
MyServiceSaopBindingImpl, because it gets created in the
generated-sources folder and I do not want to change it there because it
gets overwritten each time the source files are generated. A solution
would perhaps be to provide a different implementation of
com.myco.MyService but that requires to change the reference in
deploy.wsdd to the subclass. But that's something for tomorrow. :)


However, I hope this helps a bit for the moment.


Cheers,
Christoph


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to