【问题标题】:jax-ws client distributed in a jar分布在 jar 中的 jax-ws 客户端
【发布时间】:2013-06-24 17:06:28
【问题描述】:

我们有一个在 RAD 8 中开发的 jax-ws 客户端。我们希望通过传递这个 JAR 来让应用程序可以使用该客户端。所以我做了一个java项目,生成了客户端,然后在它周围写了一个小包装来“漂亮起来”。

我将它分发到一个网络应用程序,它工作正常,一切都很好。但是现在我在服务和客户端上添加了像 WS-Transaction 这样的“策略集”。事实证明,简单的 java 项目不支持 Web 服务客户端的正确“项目方面”,所以我不能这样做。什么样的项目可以让我将这些方面设置成一个可以传递的罐子?我知道我可以在 webapp 中做到这一点,但我不希望用户必须知道如何运行生成或使用生成的客户端(这对用户不太友好)。

-什么类型的项目允许 web 服务客户端 jars 获取策略集? -项目已经存在后如何更改其类型?该项目已经在源代码控制中,我不想重新创建整个项目。

【问题讨论】:

    标签: java web-services jax-ws rad websphere-7


    【解决方案1】:

    由于您没有提及任何特定的应用服务器,我将仅从 WAS 的角度回答(因为这是我所知道的并且我猜您正在使用的)。

    对于使用策略集和绑定配置的服务客户端,必须将客户端注入(@WebServiceRef 注释)到某个容器管理的组件中。这可以是 servlet、portlet、EJB 等。然后,每个应用程序都需要将策略集和绑定应用到它们的客户端实例。因此,本质上,使用它的人需要对其进行配置。你不能只做一次,每个人都分享。至少不是你想要的。

    我之前在一个项目上遇到过问题。我的解决方案是使用 EJB 作为容器管理组件,将客户端实例注入其中。我为 EJB 组件配置了一次客户端。然后,EJB 只是为服务 API 方法实现了一个哑外观。然后所有的 servets 只获得对 EJB 的引用(通过更多注入或 JNDI 查找)并通过 EJB 调用服务客户端。它最终成为一个额外的层,只是为了进行服务调用,但这意味着我们为所有 servlet 配置一次客户端,而不是为每个 servlet 单独配置一次。

    【讨论】:

    • 是的,我使用的是 WAS 7。@NickRoth,好的,所以我无法在客户端 jar 上分配策略集。但是当带有 servlet 的 webapp 包含 jar 时,我不应该在那里应用设置吗?我使用该 jar 的应用程序在服务视图中显示“AppName:null”,即使它使用此 jar 来调用服务就好了。
    • 如何获取服务客户端类的实例?
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2011-03-04
    • 1970-01-01
    • 2010-11-09
    • 2012-09-25
    相关资源
    最近更新 更多