You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by David Ojeda <do...@integra.la> on 2008/11/06 02:05:56 UTC

Axis2 and maven2 aar generation pom (sample pom)

Hello axis and maven users,

Sorry to double post, but I have been struggling for some days with maven2 and axis2 code generation for a web service implementation and sometimes I don't know where to ask 
questions. Maybe you could excuse my double posting since I am not making a question, but explaining a solution for my problem.

I want to make a maven project for a webservice implementation using axis2. It has been very hard because I need to use the xmlbeans databinding and the maven plugins don't 
work for me in this case.

I found a great solution for a multi module project that generates an aar artifact of a webservice, when another project uses this aar artifact. See
http://stackoverflow.com/questions/73491

However, this did not work completely for me because:
1. I need the java2wsdl to generate xmlbeans stub classes. Easy to do when using wsdl2java, but when using the axis2-wsdl2code-maven-plugin it is not possible
2. Because of reason 1, I need to generate xmlbeans classes for xsd and wsdl files. The xmlbeans-maven-plugin has a known bug that cannot generate classes for wsdl. It is fixed but 
not patched to the trunk.
3. I do not want to generate sources every time I compile the project. I just need to run the generate-sources phase once.

So I managed to solve my problem with the pom.xml below. This pom only generates an aar file that I was able to hot-deploy to an axis2 server. I don't have the parent pom yet nor 
the module that packs the aar file in a war, but it's a good start.

I just hope it is useful for someone else in the future. Also if anyone wants to take a look and tell me if there is something wrong with it, please tell me.

Thanks,

pom.xml:
 <?xml version="1.0"?>
<!--
    Project for web service aar generation using axis2 and xmlbeans databinding
    Author: David Ojeda dojeda /at/ integra.la
    Date: 20081105 
 -->
<project>
    <parent>
        <artifactId>ws-parent</artifactId>
        <groupId>my.group</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.group</groupId>
    <artifactId>ws-aar</artifactId>
    <packaging>aar</packaging>
    <name>ws-aar</name>
    <version>0.0.1-SNAPSHOT</version>
    <url>http://example.org</url>
    <profiles>
        <!--
            Profile for axis and xmlbeans source generation. It will activate if the directory
            target/generated-sources does not exist. Therefore, it will only run once
            or every time a clean is made.
        -->
        <profile>
            <id>sourcegen</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <file>
                    <missing>target/generated-sources</missing>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.3</version>
                        <executions>
                            <!--
                                Execution for generating the xmlbeans classes and .xsb It is used
                                instead of xmlbeans-maven-plugin because this plugin does not
                                support wsdl files. See http://jira.codehaus.org/browse/MXMLBEANS-42
                            -->
                            <execution>
                                <id>xmlbeans-source-code-generation
                                </id>
                                <phase>generate-sources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <tasks>
                                        <java classname="org.apache.xmlbeans.impl.tool.SchemaCompiler"
                                            fork="true">
                                            <arg
                                                line="
                                                -javasource 1.5
                                                -srconly
                                                -src target/generated-sources/xmlbeans 
                                                -d target/generated-sources/xmlbeans
                                                src/main/wsdl 
                                                src/main/xsd
                                                src/main/xsd/NStoPkg.xsdconfig" />
                                            <classpath refid="maven.dependency.classpath" />
                                            <classpath refid="maven.compile.classpath" />
                                            <classpath refid="maven.runtime.classpath" />
                                        </java>
                                    </tasks>
                                </configuration>
                            </execution>
                            <!-- 
                                Execution for generation the axis service side classes.
                                It is used instead of axis2-wsdl2code-maven-plugin because
                                this plugins does not have all the command line options (such as
                                -Ewdc).
                                After code generation, the developer must copy the service 
                                implementation classes in target/generated-sources/axis2/ to
                                src/main/java. 
                                Usually  it is every class that does not extends 
                                org.apache.xmlbeans.XmlObject  i.e. Skeleton, MessageReceiver, 
                                Faults.  The developer may not want to copy these files if he/she
                                already has a copy in src/main/java.
                                It would be a nice feature to copy them automatically 
                                if they do not exist but the "everything that does not extend 
                                XmlObject" part seems difficult
                            -->
                            <execution>
                                <id>axis2-source-code-generation</id>
                                <phase>generate-sources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <tasks>
                                        <java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true">
                                            <!-- the WSDL file should be defined in the arg line -->
                                            <arg
                                                line="
                                        -o target/generated-sources/axis2/
                                        -ss
                                        -sd
                                        -d xmlbeans
                                        -Ewdc 
                                        --noBuildXML 
                                        -uri src/main/wsdl/WSSomeService.wsdl" />
                                            <classpath refid="maven.dependency.classpath" />
                                            <classpath refid="maven.compile.classpath" />
                                            <classpath refid="maven.runtime.classpath" />
                                        </java>
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <version>1.2</version>
                        <!--
                            Execution that adds the directory target/generated-sources/xmlbeans
                            as a source directory. It contains the generated classes of xmlbeans
                         -->
                        <executions>
                            <execution>
                                <id>add-source</id>
                                <phase>generate-sources</phase>
                                <goals>
                                    <goal>add-source</goal>
                                </goals>
                                <configuration>
                                    <sources>
                                        <source>target/generated-sources/xmlbeans
                                        </source>
                                    </sources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.axis2</groupId>
                <artifactId> axis2-aar-maven-plugin</artifactId>
                <version>1.4.1</version>
                <extensions>true</extensions>
                <configuration>
                    <!--
                        This fileset includes the services.xml, wsdl and xsd that were
                        used when generating axis and xmlbeans classes. This must be
                        included in the aar in order to obtain the wsdl and xsd. Also,
                        services.xml should be included or else axis2 will not deploy
                        the webservice.
                        The schemaorg_apache_xmlbeans directory is excluded since we need
                        the one generated by xmlbeans and not by axis2.
                     -->
                    <fileSets>
                        <fileSet>
                            <directory>target/generated-sources/axis2/resources
                            </directory>
                            <outputDirectory>META-INF</outputDirectory>
                            <includes>
                                <include>*.xml</include>
                                <include>*.xsd</include>
                                <include>*.wsdl</include>
                            </includes>
                            <excludes>
                                <exclude>schemaorg_apache_xmlbeans/**/*
                                </exclude>
                            </excludes>
                        </fileSet>
                    </fileSets>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <!-- 
        Most, if not all, axis2 dependencies are under the 'provided' scope
        since we do not want to have huge aar files. A dependant project
        should use this project artifact to build a war, the dependant project
        should include the axis2 jars in its WEB-INF/lib 
    -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2</artifactId>
            <version>1.4.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-java2wsdl</artifactId>
            <version>1.4.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-xmlbeans</artifactId>
            <version>1.4.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

-- 
David Ojeda


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org