我们在RAD 8中开发了一个jax-ws客户端。我们希望通过传递这个JAR使客户端可以访问应用程序。所以我创建了一个java项目,生成了客户端,然后在它周围编写了一个小包装器来“漂亮”。
我将它分发到一个网络应用程序,它工作正常。但现在我在服务和客户端上添加了像WS-Transaction这样的“策略集”。事实证明,简单的Java项目不支持Web服务客户端的正确“Project Facets”,所以我不能这样做。什么样的项目会让我把这些方面设置成一个我可以传递的罐子?我知道我可以在webapp中完成它,但我不希望用户必须知道如何运行生成或使用生成的客户端(用户不太友好)。
- 什么类型的项目允许Web服务客户端jar获取策略集? - 如何在项目已存在后更改项目类型?该项目已经在源代码管理中,我不想重新创建整个项目。
答案 0 :(得分:0)
由于您没有提及任何特定的应用服务器,我只是从WAS的角度回答(因为这就是我所知道的以及我猜你正在使用的内容)。
对于使用策略集和绑定配置的服务客户端,必须将客户端(@WebServiceRef注释)注入到某个容器受管组件中。这可以是servlet,portlet,EJB等。然后,每个应用程序都需要将策略集和绑定应用于它们的客户端实例。所以基本上谁在使用它需要配置它。你不能只做一次而且每个人都分享。至少不是你想要的。
我之前遇到过项目问题。我的解决方案是使用EJB作为容器管理组件,将客户端实例注入其中。我为EJB组件配置了一次客户端。然后,EJB只为服务API方法实现了一个愚蠢的外观。然后,所有serlvets都会获得对EJB的引用(通过更多注入或JNDI查找)并通过EJB调用服务客户端。它最终只是一个额外的层来进行服务调用,但这意味着我们为所有servlet配置一次客户端,而不是为每个servlet单独配置一次。