1

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

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

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

我有几个考虑:

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

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

4

2 回答 2

1

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

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

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

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

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

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

于 2013-06-26T09:26:16.583 回答
0

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

第一步

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

然后您必须配置Axis maven 插件才能将存根源生成到目标文件夹中,如下所示

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

如果为generateServerSideInterfacetrue,插件会生成一个名为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 服务来说,axis 并不是更好的选择,兼容 JAX-WS 的框架是最好的选择,这里是使用jax-ws maven 插件的方法,生成源要好得多,并且比轴源更干净。

于 2013-06-27T15:45:44.193 回答