我正在尝试构建一个maven项目,一个包含webservices的OSGi包。我使用JAX-WS和所有@WebService
注释来指定我拥有的Web服务。要在客户位置加载这些Web服务,通常使用wsgen
和wsimport
来导出/导入WSDL文件。我打算使用jaxws-maven-plugin来这样做,但问题在于:在同一个maven项目中创建和使用webservices
该软件包可以同时充当服务器和客户端。它可以将自己注册为同一捆绑包的父节点(运行在不同的JVM /主机上)的客户端。所以这个maven项目/ bundle为webservice定义了一个接口并定义了实现这个接口的实现类。像往常一样,接口和类都使用@WebService
注释。
@WebService
public interface Example {
public void callMe();
}
@WebService
public class ExampleImpl implements Example {
public void callMe() {};
}
在我的代码某处
然后:
Endpoint p = Endpoint.publish(
"http://localhost:8080/example",
new ExampleImpl());
的jaxws:wsgen goal读取注释和创建输出文件(.class文件,.java文件,WSDL文件,根据配置... )。但是如何在jaxws:wsimport目标中使用这些文件来运行相同的mvn package
?在同一个Maven项目我想用这个Web服务,所以我需要写的东西是这样的:
ExampleImplService service = new ExampleImplService();
Example port = service.getExampleImplPort();
port.callMe();
的jaxws:gen
目标是在process-classes
阶段运行,因为它需要读取编译的类,但jaxws:import
必须运行在generate-sources
阶段,准备编译所有内容。现在我遇到了鸡蛋问题。我需要编译的类通过wsgen
生成输出文件,但是我需要wsgen
的输出文件在阶段的阶段maven的wsimport
。我的第一次尝试是将jaxws:wsgen
目标分配到generate-sources
阶段,但当然由于这些类缺少/尚未编译,因此它不起作用。
我有什么方法可以解决这个问题?我应该执行antrun
目标编译一些类(即只与@WebService
注解的类)之前的generate-sources
阶段,因此jaxws:wsgen
可以使用它(在这一阶段),创建输出文件,这些文件在generate-sources
使用jaxws:wsimport
相?还有其他方法可以解决这个鸡蛋问题吗?在同一个maven项目中,是否还有其他“maven方法”来编译webservices的服务器和客户端部分?它应该顺便说一句。从一个干净的mvn clean
构建运行,所以我不想/像任何解决方案,如“运行mvn package
两次先生成webservices文件,然后再编译一切”。换句话说:mvn clean package
应该编译整个maven项目/ osgi包。
在其他溶液中,以质疑认为不需要在同一个项目中的“生成存根”。然而,在我的项目中情况正是如此,所以存根不得晚于`generate-source`阶段生成。 – Progman 2011-02-15 08:02:20