2

我专门使用 WebSphere Integration Developer V7,但我也可以使用 Rational Software Architect V 7.5.1(因为我两者都有)。

上下文:我正在尝试创建一个 JAX-WS 客户端来调用 WebSphere Process Server V7 中的 Human Task Manager 和 Business Flow Manager 服务,这些服务通过 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 并传递它需要的东西。有人遇到过这种情况吗?

4

1 回答 1

4

好的。我花了很长时间研究这个,阅读红皮书和 developerworks 文章,用我的头敲击键盘,我终于找到了地方。不是一直到那里,而是差不多。(希望一些 IBM 的东西更容易找到……但你可以使用你所得到的东西。平心而论,根据我所阅读的内容,它是有道理的并且非常强大。)

不管怎样,这里是 Rational 和 WebSphere 工具的诀窍:您必须首先创建一个空的 Java 项目。这是制作可移植 Web 服务客户端的关键之一。

所以到目前为止:

  1. 在 IDE 中创建一个空的 Java 项目。我更喜欢在 Rational Application Developer/Software Architect 或 WebSphere Integration Developer 中使用 Java EE 透视图。
  2. 将 WSDL 和模式导入 IDE 中的另一个空通用项目,而不是新创建的 Java 项目。
  3. 右键单击主 WSDL 并选择生成 Web 服务客户端。
  4. 这里的另一个关键:确保在出现的向导中将客户端项目更改为您在第一步中创建的 Java 项目。默认情况下,向导将尝试以新的或现有的动态 Web 项目为目标,这不是您想要的。
  5. 确保选择 JAX-WS 作为实现。确保您选择您希望客户端是“可移植的”,并确保您告诉向导将 WSDL 包含在 Java Project 客户端中。
  6. 在您准备好一切(并且您的本地服务器正在运行)之前,Rational/WebSphere 工具现在应该将 JAX-WS Web 服务客户端生成到 Java 项目中。

精彩的!伟大的!现在您有一个 Java 项目(也称为 jar),您可以使用它来使其可移植。但是,您如何让 IBM 工具满意并将安全策略附加到客户端?

首先,我了解到最好在 WebSphere Application Server/Enterprise Service Bus/Process Server 的管理控制台中附加安全策略。尝试手动编写所有代码的安全性有太多事情需要尝试,即使 IBM 为您提供了 API 来执行此操作。相信我。在服务器上定义安全性然后将其分配给客户端更容易。

无论如何....让它将 jar 视为 Web 客户端。这意味着将 jar 作为 J2EE Utility Jar 附加到 EAR 项目是行不通的。EAR 不是“网络级别”,而是“应用级别”。所以要做到这一点,您需要在 J2EE Module Dependencies 屏幕中将 Java 项目与 EAR 相关联,而不是作为实用程序 Jar。而是选中“lib”框。这意味着它可以可见/挂载到动态 Web 项目/war 的 lib 目录中(您也必须这样做)。令人惊讶的是,管理控制台现在会将您的客户端 jar 视为真正的 JAX-WS Web 服务客户端!

起初这可能看起来很奇怪,但它确实有点道理。毕竟,您正在处理Web服务并且您正在使用Web 协议,因此在某些方面将客户端置于应用程序的“ Web 级别”是有意义的。

编辑:我弄乱了安全策略,我发现 这篇开发人员工作文章对我帮助最大。请特别注意清单 2 ClientTest.java。可悲的是,您必须将所有安全性编码到您的客户端中才能使其最干净地工作。然后这是另一个问题。IBM 将允许您从在 WebSphere 外部运行的客户端创建用户名令牌,但它们不允许您在 WebSphere 外部创建 LTPA 令牌。所以要测试这些类型的令牌,你必须在本地打包和部署你的客户端来测试它。

于 2010-12-07T17:27:07.117 回答