我在多模块maven项目中有一个从WSDL文件生成的axis2 Web服务。
wsdl2java
为我生成了存根和基本骨架。
将生成的存根集成到现有业务逻辑中的最佳方法是什么?
我有几个注意事项:
mvn clean install
命令的一部分。 Maven clean
删除生成的源文件夹。我将不得不通过删除实现的业务逻辑来保护存根。services.xml
中指定服务类(并使用maven-axis2插件生成)。因此,应该保护生成的存根的某些部分不被修改。有没有办法以某种方式避免这种情况?比如在web.xml中指定服务类实现?或类似的东西?
答案 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的生成源,生成源远比盘更好更干净源。