我专门使用WebSphere Integration Developer V7,但我也可以使用Rational Software Architect V 7.5.1(因为我有两者)。
上下文:我正在尝试创建一个JAX-WS客户端来调用WebSphere Process Server V7中的人工任务管理器和业务流程管理器服务,这些服务通过JAX-WS公开。默认情况下,它们附加了策略集和指定某些WS-Security设置的提供程序绑定(因为这些设置未在WSDL中定义)。
我已经找到了如何使用动态Web项目使其工作。我已经能够从WSDL生成JAX-WS客户端代码。我已经能够从Process Server导出策略集和提供者和客户端绑定,并将它们导入我的工作区。我已经能够将策略集和客户端绑定附加到客户端服务。我已经能够设置一个页面和一个servlet来调用我的Web服务(以测试客户端)。我已经能够在部署描述符和websphere绑定/扩展文件中设置安全设置,以使其工作。
这一切都很精彩,但实际上我们不希望只是为了将Web服务客户端暴露给我们正在编写的其他应用程序。我们想要生成一个Web服务客户端jar并将其与其他应用程序打包在一起。
鉴于这种思路,我已经能够弄清楚如何在我的IDE中使用常规Java项目并在其中生成Web服务客户端。我还能够将策略集和客户端绑定附加到客户端。
我的问题现在是如何调用此方法的?我像以前一样用我的页面和servlet创建了一个动态Web项目来测试我的客户端。我将我的客户端项目设置为Web库依赖项,以便它可以访问客户端代码。我甚至可以像以前一样设置部署描述符来强制登录和身份验证。现在唯一的问题是我无法弄清楚如何将凭据传递给我的Web服务,因为它在自己的“jar”中。在我访问菜单以设置TokenGenerator和CallbackHandler之前。现在,由于客户端不在动态Web项目中,因此我无法访问这些菜单。所以现在我有一个“断开连接”,当然试图在服务器上运行它时它会失败。
必须有办法做到这一点。我应该能够生成一个客户端jar并将其传递给它所需要的东西。以前有人遇到过这个吗?
答案 0 :(得分:4)
确定。我花了很长时间研究这个,阅读红皮书和开发者文章,然后把头撞到我的键盘上,我终于到了某个地方。不是所有的方式,但差不多。 (希望一些IBM的东西更容易找到......但是你可以使用你所得到的东西。而且公平地说,我读过的东西是有意义的并且相当强大。)
无论如何,这是Rational和WebSphere工具的技巧:您必须首先创建一个空的Java项目。这是制作可移植Web服务客户端的关键之一。
所以到目前为止:
奇妙!大!现在你有了一个Java Project(aka jar),你可以使用它来使它可移植。但是,如何让IBM工具满意并将安全策略附加到客户端?
首先,我了解到最好将安全策略附加到WebSphere Application Server / Enterprise Service Bus / Process Server的管理控制台中。尽管IBM为您提供了API,但有许多事情需要考虑安全性以尝试手动编写所有代码。相信我。更容易在服务器上定义安全性,然后将其分配给客户端。
无论如何....为了让客户端对管理控制台可见,以便为JAX-WS安全性附加策略集和客户端绑定,它必须处于“Web级别”(缺少更好的)术语)以便将jar视为Web客户端。这意味着将jar作为J2EE Utility Jar附加到EAR项目将不起作用。 EAR不是“网络级别”,而是“应用级别”。因此,要执行此操作,您需要在J2EE Module Dependencies屏幕中将Java Project与EAR相关联,而不是作为Utility Jar。而是选中“lib”框。这意味着它可以显示/挂载到动态Web项目/战争的lib目录中(您还必须这样做)。令人惊讶的是,管理控制台现在将您的客户端jar视为真正的JAX-WS Web服务客户端!现在,您可以将策略集和客户端绑定关联到它,以满足您的安全需求!
这一开始可能看起来很奇怪,但它确实有道理。毕竟,您正在处理 web 服务并且您正在使用 Web协议,因此在某些方面将客户端置于“ Web级别< / em>“你的申请。
编辑:我搞砸了安全政策,我发现了这一点 this developer works article给了我最多的帮助。特别付款 注意清单2 ClientTest.java 。可悲的是,你必须这样做 将所有安全性编码到您的客户端,以使其工作最干净。 然后这是另一个问题。 IBM将允许您创建用户名 来自在WebSphere之外运行的客户端的令牌,但他们不会 允许您在WebSphere之外创建LTPA令牌。所以要测试那些 各种令牌,您必须在本地打包和部署您的客户端 测试一切。