多模块maven项目中的Axis2 Web服务

时间:2013-06-14 08:05:23

标签: java web-services maven axis2

我在多模块maven项目中有一个从WSDL文件生成的axis2 Web服务。

wsdl2java为我生成了存根和基本骨架。

将生成的存根集成到现有业务逻辑中的最佳方法是什么?

我有几个注意事项:

  • 最简单的方法是在存根中实现业务逻辑。但我相信这会导致麻烦:
    • 现在正在生成存根作为mvn clean install命令的一部分。 Maven clean删除生成的源文件夹。我将不得不通过删除实现的业务逻辑来保护存根。
    • 我不想将生成的存根中的任何内容提交到VCS中。我想保持清洁。
  • 可以选择在另一个源文件夹中扩展存根类。这消除了先前方法的缺点,但为舞台带来了新的东西:
    • 据我从AXIS2文档中了解到,我必须在services.xml中指定服务类(并使用maven-axis2插件生成)。因此,应该保护生成的存根的某些部分不被修改。

有没有办法以某种方式避免这种情况?比如在web.xml中指定服务类实现?或类似的东西?

2 个答案:

答案 0 :(得分:0)

Axis2符合 JAX-WS ,因此您可以使用wsimport工具代替wsdl2java。我假设您已采用合同第一种方法,并且您正在从WSDL文件生成存根。这是wsimport maven插件的doc。很多事情都可以改变(例如destDir)。

Maven clean删除生成的源文件夹。我将不得不通过删除实现的业务逻辑来保护存根。

您实际上可以生成常规包结构的存根(可能是自己的包),并在maven clean plugin configuration中添加包含(或排除)生成的文件。如果使用此mvn plugin,则IDE应将生成的文件添加到项目类路径中。

如果我是你,我肯定会尝试尽可能多地遵守JAX-WS,因为如果你这样做,你将不会被供应商锁定到Axis2。但是您可以在将来切换到CXF,Metro或Jboss WS。 services.xml文件特定于Axis2。

因此,应该保护生成的存根的某些部分不被修改。

您可以将这些资源标记为SCM系统忽略。并将它们标记为在Eclipse中派生。这是mvn plugin。如果您这样做,开发人员会在尝试更改时收到通知。 IntelliJ IDEA中必须有类似的东西。

答案 1 :(得分:0)

你要做的就是配置maven pom,以便让maven完成工作。

第一步

首先你配置一个maven属性,我们称之为outputDirectory,该文件夹应该位于maven目标文件夹中,我通常不会在SCM中提交。

然后你必须配置Axis maven plugin以便在目标文件夹中生成存根源,如下所示

<build>
   <plugins>
      ...
          <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsdl2code</goal>
                    </goals>
                    <configuration>
                        ... your configuration ..
                        <generateServerSide>true</generateServerSide>                                     
                        <generateServerSideInterface>true</generateServerSideInterface>
                        <outputDirectory>${outputDirectory}</outputDirectory>
                         ...
                    </configuration>
                </execution>
             </executions>
          </plugin>
          ...
      </plugins>
  </build>

如果generateServerSideInterface为true,则插件会生成一个名为XXXSkeleton的接口,您可以实现该接口。

第二步

然后您必须配置maven build helper plugin,以包含生成的源。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>add-source</id>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${outputDirectory}</source>
                </sources>
            </configuration>
        </execution>
    </executions>      
</plugin>

我个人认为,对于java Web Service来说,轴不是更好的选择,JAX-WS兼容框架是最好的选择,下面是jax-ws maven plugin的生成源,生成源远比盘更好更干净源。