我一直在使用rpclib来自动生成WSDL并在Python中实现它。
然后我想使用JavaEE调用具有此WSDL的Web服务*,因此我只使用Eclipse中的创建向导中的来自WSDL的Web服务选项(带有OEPE的Indigo 3.7.1) ),但随后Ant构建失败,异常(简称):
weblogic.wsee.tools.WsBuildException Error running JAX-WS wsdlc
Caused by java.lang.NoSuchMethodException: javax.xml.bind.annotation.XmlElementRef.required()
我该怎么办?如何使用JavaEE调用Web服务?
* Web服务配置为:Apache HTTP Server 2.2.2 + mod_wsgi 3.3 + Python 2.6.5 + rpclib 2.6.1。
答案 0 :(得分:3)
好的,第二次偶然发现你的帖子,所以我会详细说明之前的评论:)。
首先,我概括一下你的设置:
调用WS的常规选项:
第一个选项在您的设置中不起作用,因为DI只能在容器管理环境中工作(请参阅我的评论)。这意味着WS类和执行类必须位于同一个容器中(例如,同一个服务器)。
剩下的就是手动生成WS存根。因此,您可以使用自己答案中提到的wsimport
工具。有几种不同的方法可以使用此工具。让我们看一下CLI使用:
%IDE_WORKSPACE%/your project/src
stub
wsimport -keep <http://yourwsdl?wsdl>
返回IDE:
现在,您可以通过从生成的port
- 文件中获取service
来使用生成的存根文件连接到WS
public class WsClient {
public static void main(String[] args) {
//Create Service
'GeneratedFile'Service service = new 'GeneratedFile'Service();
//create proxy
'GeneratedFile' proxy = service.get'GeneratedFile'Port();
//invoke
System.out.println(proxy.yourMethod(yourParam));
}
}
最后提示:
wsimport
工具中有一个option可以直接在导入例程中设置它。wsimport
工具。一旦设置,它应该加速你的工作。希望这有帮助,玩得开心!
编辑:只是为了澄清:
使用wsimport
工具后,您应该有一个包含图像中所示文件的目录。为了使这个例子清楚,你需要从RequestFileService
(这是我的WS操作)获得 Service ,如RequestFileService service = new RequestFileService();
,之后你需要一个此服务上的端口,如RequestFile proxy = service.getRequestFilePort();
在此之后,您可以使用端口proxy.yourMethod(yourParam);