WEB开发网
开发学院软件开发Java 轻松应对 WS-Security 规范互操作性挑战,第 4 部... 阅读

轻松应对 WS-Security 规范互操作性挑战,第 4 部分: 向 J2EE 1.4 Web service 服务添加 J2EE 1.3 提供者端点

 2009-11-10 00:00:00 来源:WEB开发网   
核心提示:引言本文说明如何实现 WS-Security 规范级别互操作性问题的新提供者端点解决方法,此方法需要将 J2EE 1.4 提供者应用程序与两个 Web 服务端点打包在一起:一个为 J2EE 1.3 使用者提供服务,轻松应对 WS-Security 规范互操作性挑战,第 4 部分: 向 J2EE 1.4 Web serv

引言

本文说明如何实现 WS-Security 规范级别互操作性问题的新提供者端点解决方法。此方法需要将 J2EE 1.4 提供者应用程序与两个 Web 服务端点打包在一起:一个为 J2EE 1.3 使用者提供服务,而另一为 J2EE 1.4 使用者提供服务。实现此解决方法是一项基本的编程与打包工作,不需要其他中间件基础设施。当存在大量 Web 服务使用者应用程序时,此方法能很好地进行扩展。

向 Web 服务应用程序添加新提供者端点后,任意数量的 J2EE 1.3 Web 服务使用者应用程序可使用它。重要说明:此方法最适合用于 Web 服务实现类是简单的 JavaBeans 或 Enterprise JavaBeans (EJB) 的情况。如果 Web 服务实现逻辑包含在 Servlet、服务组件体系结构(Service Component Architecture,SCA)组件或企业服务总线(Enterprise Service Bus,ESB)中介模块中,可能更难创建 Servlet 2.2 (J2EE 1.3) Web 项目并将其与 Web 服务提供者应用程序打包在一起。

虽然此解决方法引入了另一个 Web 服务端点,必须由操作团队进行保护和管理,但实现此方法所需的工作主要是应用程序开发。除了应用程序开发人员外,此方法还需要测试人员和部署人员的参与。

本文假定实现此方法的应用程序开发人员具备基本的 J2EE 和 Web 服务开发技能。

本文将使用完全实现的示例(可供在您的环境中部署)详细说明如何实现新提供者端点方法。解决方案概述部分对此方法进行详细描述;构建解决方案部分逐个介绍实现任务,从而说明所提供的示例应用程序是如何开发的;使用示例应用程序部分描述如何在运行时环境中自定义和运行示例应用程序。

解决方案概述

图 1 显示了新提供者端点解决方法的详细运行时视图。J2EE 1.3 客户机应用程序使用 Web 服务和 WS-Security 草案 13 规范与 J2EE 1.3 Web 服务进行通信。J2EE 1.4 客户机应用程序使用 Web 服务和 WS-Security V1.0 规范与 J2EE 1.4 Web 服务进行通信。然后,Web 服务端点应用程序将实例化共享库中包括的 J2EE 1.4 Web 服务类,而后者将对后端 EJB 调用 RMI/IIOP。

总的说来,我们假定您在尝试向现有 J2EE 1.4 添加新 J2EE 1.3 客户机和提供者端点。J2EE 1.4 提供者应用程序包括了一个其中包含业务逻辑的 EJB。在图 1 中,米色框表示现有 J2EE 1.4 组件,而粉色框表示新组件,本文将说明如何创建这些新组件,并将其与 J2EE 1.4 提供者应用程序 EAR 文件集成。


图 1. 新提供者端点解决方案组件
轻松应对 WS-Security 规范互操作性挑战,第 4 部分: 向 J2EE 1.4 Web service 服务添加 J2EE 1.3 提供者端点

图片看不清楚?请点击这里查看原图(大图)。

表 1 显示了创建此解决方案所需的任务和产品。


表 1. 创建解决方案所需的任务和产品

任务 环境 负责角色
1. 创建 J2EE 1.3 Web 服务端点和共享库 IBM® Rational® Application Developer应用程序开发人员
2. 修改 J2EE 1.3 Web 服务端点。 Rational Application Developer应用程序开发人员
3. 将共享库连接到 J2EE 1.3 和 J2EE 1.4 Web 服务端点。 Rational Application Developer应用程序开发人员
4. 将后端 EJB 连接到共享库、J2EE 1.3 和 J2EE 1.4 Web 服务端点。 Rational Application Developer应用程序开发人员
5. 将客户机应用程序与 J2EE 1.3 Web 服务客户机集成。 Rational Application Developer应用程序开发人员
6. 添加安全性。 Rational Application Developer应用程序开发人员
7. 在运行时环境上部署解决方案并进行单元测试。 IBM WebSphere® Application Server部署人员和测试工程师

要实现任务 1,需要使用 Rational Application Developer 中的相应向导来创建 J2EE 1.3 和 J2EE 1.4 Web 服务端点和共享库。(具体的详细示例,请参见“构建解决方案”部分的说明。)

解决方案部署工作(任务 7)需要部署以下应用程序:

客户机应用程序

提供者应用程序,其中包括以下内容:

J2EE 1.3 和 J2EE 1.4 Web 服务端点

共享库

包含 Web 服务的业务逻辑的后端 EJB

构建解决方案

此部分说明如何修改 J2EE 1.4 Web 服务提供者应用程序,以便能将其与 J2EE 1.3 和 J2EE 1.4 客户机一起使用。清单 1 所示的代码片段摘自示例应用程序,用于进行说明,以便您能了解如何将此方法应用到自己的应用程序中。表 2 说明了所需的任务。


表 2. 创建解决方案所需的步骤和产品

任务 步骤 环境 负责角色
1. 创建 J2EE 1.3 Web 服务端点和共享库   基于现有 Web 服务描述语言(Web Services Description Language,WSDL)文件创建 J2EE 1.3 框架 Java Web 服务。

创建新 Java 项目。

Rational Application Developer应用程序开发人员
2. 修改 J2EE 1.3 Web 服务端点。   从 Unit Test Environment (UTE) 删除 J2EE 1.3 Web 服务的 EAR 文件。

从其 EAR 文件中删除 J2EE 1.3 Web 服务的 Web 项目。

从工作区删除 J2EE 1.3 Web 服务的 EAR 项目。

将 J2EE 1.3 Web 服务的 Web 项目添加到 J2EE 1.4 Web 服务的 EAR 文件中。

修改 J2EE 1.3 Web 服务的 webservices.xml 文件。

从 J2EE 1.3 Web 服务删除所有的生成类。

Rational Application Developer应用程序开发人员
3. 将共享库连接到 J2EE 1.3 和 J2EE 1.4 Web 服务端点。   将共享库的 Java 项目作为实用工具库添加到 J2EE 1.4 Web 服务 EAR 文件中。

将 J2EE 1.4 Web 服务所有生成的类移动到共享库的 Java 项目中。

将共享库作为 JAR 依赖项添加到 J2EE 1.3 和 J2EE 1.4 Web 服务。

Rational Application Developer应用程序开发人员
4. 将后端 EJB 连接到共享库、J2EE 1.3 和 J2EE 1.4 Web 服务端点。   将 J2EE 1.4 EJB 和 EJBClient.jar 文件添加到 J2EE 1.4 Web 服务的 EAR 文件。

将 J2EE 1.4 EJBClient.jar 文件作为 JAR 依赖项添加到共享库的 Java 项目中。

编辑共享库的 SOAPImpl 类,并添加调用 J2EE 1.4 后端 EJB 所必需的代码。

[可选] 创建本地 EJB 接口。

编辑 J2EE 1.3 和 J2EE 1.4 Web 服务的 Web 项目中的 web.xml 文件,以添加共享库所使用的 EJB 资源引用。

Rational Application Developer应用程序开发人员
5. 将客户机应用程序与 J2EE 1.3 Web 服务客户机集成。 将客户机应用程序与 J2EE 1.3 Web 服务客户机集成。Rational Application Developer应用程序开发人员
6. 添加安全性。 配置客户机应用程序 J2EE 1.3 和 J2EE 1.4 Web 服务端点,以启用安全机制。Rational Application Developer应用程序开发人员
7. 在运行时环境上部署解决方案并进行单元测试。 将已打包的解决方案应用程序部署到运行时环境并进行测试。WebSphere Application Server部署人员和测试工程师

任务 1:创建 J2EE 1.3 Web 服务端点和共享库

此部分说明创建 J2EE 1.3 和共享库所需的基本步骤。

使用 Web Service Wizard 从现有 WSDL 创建新 J2EE 1.3 框架 Java Bean Web 服务。在 Service Deployment Configuration 面板上提供以下信息:

选择 1.3 作为 J2EE 版本。

提供新 Web 项目作为服务项目,并提供新 EAR 项目。

创建一个 Java 项目,将通过使用 Rational Application Developer 提供的 Java Project 向导作为共享库使用。

任务 2:修改 J2EE 1.3 Web 服务端点

完成了表 2 中所示的任务 1 后,就准备好执行此步骤了。此部分将说明 J2EE 1.3 Web 服务端点所需的更新。

从 UTE 删除 J2EE 1.3 Web 服务的 EAR 项目,因为 Rational Application Developer 会在创建时自动将 Web 服务 EAR 项目部署到 UTE。

使用以下方法从其 EAR 文件中删除 J2EE 1.3 Web 服务的 Web 项目:

在 J2EE 1.3 Web 服务 EAR 项目中,打开 META-INF/application.xml 文件。

单击 Module 选项卡,并单击 Modules 切换。

选择 J2EE 1.3 Web 服务的 Web 项目的 .war 文件,然后单击 Remove。

保存 application.xml 文件。

从 Rational Application Developer 工作区删除 J2EE 1.3 Web 服务的 EAR 项目。

进行以下操作,以将 J2EE 1.3 Web 服务的 Web 项目添加到现有 J2EE 1.4 Web 服务的 EAR 文件中:

在现有 J2EE 1.4 框架 Java Bean Web 服务 EAR 项目中,打开 META-INF/application.xml 文件。

单击 Module 选项卡,并单击 Modules 切换。

单击 Add。

为 J2EE 1.3 端点选择选择 Web 项目,然后单击 Finish。

保存 META-INF/application.xml 文件。

修改 webservices.xml 文件(位于 J2EE 1.3 Web 服务的 Web 项目中),以使 Port Component 选项卡上的 Service endpoint interface 与现有 J2EE 1.4 Web 项目的 webservices.xml 文件匹配。要实现此目标,请执行以下步骤:

在 J2EE 1.3 Web 服务 Web 项目中,打开 webservices.xml 文件。

单击 Port Components 选项卡,并单击 Port component implementation details 切换。

将服务端点接口从 *_Port 更新为 *_PortType。

保存 webservices.xml 文件。

删除 J2EE 1.3 Web 项目的 JavaSource 目录下生成的全部 Web 服务类。

任务 3:将共享库连接到 J2EE 1.3 和 J2EE 1.4 Web 服务端点

此部分说明连接共享库所需的步骤,共享库是一个 Java 项目,具有 J2EE 1.3 和 J2EE 1.4 Web 服务端点。

进行以下操作,将 Java 项目作为实用工具库添加到 J2EE 1.4 EAR 文件中:

在 J2EE 1.4 框架 Java Bean Web 服务 EAR 项目中,打开 META-INF/application.xml 文件。

单击 Module 选项卡,并单击 Project Utility JARs 切换。

单击 Add。

J2EE 1.3 和 J2EE 1.4 端点应用程序需要使用共享库访问 J2EE 1.4 Web 服务类。因此,现在需要将 J2EE 1.4 Web 项目的 JavaSource 目录下所有生成的 Web 服务代码移动到共享库的 Java 项目中。以下是要移动的文件的列表:

每个复杂数据类型的 Java 类。示例应用程序的相关类名称为 SampleOperationResponse。

每个复杂类型的序列化器、反序列化器和 Helper 类,即 *_Ser、*_Deser 和 *_Deser。示例应用程序相关的类名称为 SampleOperationResponse_Ser、SampleOperationResponse_Deser 和 SampleOperationResponse_Helper。

服务接口及其实现,即 *_PortType 和 *SOAPImpl。示例应用程序相关的类名称为 SampleOperationResponse_Ser、SampleOperationResponse_Deser 和 SampleServiceSOAPImpl。

图 2 显示了为示例应用程序重新分配的文件。



图 2. 重新分配的文件
轻松应对 WS-Security 规范互操作性挑战,第 4 部分: 向 J2EE 1.4 Web service 服务添加 J2EE 1.3 提供者端点

J2EE 1.3 和 J2EE 1.4 端点应用程序需要能够识别独立 JAR 文件中的 Web 服务类。因此,请进行以下操作,将 Java 项目作为 JAR 依赖项添加到 J2EE 1.3 和 J2EE 1.4 Web 项目:

在 J2EE 1.4 框架 Java Bean Web 服务 EAR 项目中,打开 META-INF/application.xml 文件。

单击 Module 选项卡,并单击 Project Utility JARs 切换。

单击 Add,并选择 Java 项目。

单击 Finish 并保存 application.xml 文件。

对每个 J2EE 1.3 和 J2EE 1.4 Web 服务 Web 项目进行以下操作:

转到相应的 Web 项目,将其突出显示,并单击右键。

单击 Properties > Java JAR Dependencies。

在 Java JAR Dependencies 上选择 Java 项目。

单击 OK。

任务 4:将后端 EJB 连接到共享库和 J2EE 1.3 及 J2EE 1.4 Web 服务端点

此部分说明将后端 EJB 连接到共享库和 J2EE 1.3 及 J2EE 1.4 Web 服务端点时所需的步骤。

进行以下操作,以将 J2EE 1.4 EJB 和 EJBClient.jar 文件添加到 J2EE 1.4 EAR 文件中:

在 J2EE 1.4 框架 Java Bean Web 服务 EAR 项目中,打开 META-INF/application.xml 文件。

单击 Module 选项卡,并单击 Modules 切换。

单击 Add。

选择 EJB 项目,并单击 Finish。

如果 EJBClient.jar 文件未包括在 Project Utility JARs 切换中,则按照以下所述操作:

单击 Module 选项卡,并单击 Project Utility JARs 切换。

单击 Add。

选择 EJB client project,并单击 Finish。

保存对 application.xml 文件的更改。

进行以下操作,以将 J2EE 1.4 EJBClient.jar 文件作为 JAR 依赖项添加到共享库的 Java 项目中:

转到您的 Java 项目,将其突出显示,并单击右键。

单击 Properties > Java JAR Dependencies。

在 Java JAR Dependencies 上选择 EJB client project。

选中相应的 JAR/Module,并单击 OK。

编辑共享库 Java 项目的 SOAPImpl 类,并添加调用 J2EE 1.4 后端 EJB 所必需的代码。下面的步骤说明如何使用 EJB Snippets 功能(用于插入调用后端 EJB 的代码):

转到 J2EE perspective。

打开 SampleServiceSOAPImp.java 文件。

将光标置于文件中。

在左下部单击 Snippets 选项卡。

展开 EJB drawer。

双击 Call an EJB create method。

在 Select EJB Reference Owner 面板中选择恰当的 EJB 会话 Bean,然后单击 Next。

在 Select Reference 面板中单击 New EJB Reference。

在 EJB Reference 面板中选择 EJB session bean。

为 Ref Type 选择 Local。如果您的后端 EJB 不包括本地接口,则执行下面的可选任务,将其添加到后端 EJB 中。

在 EJB Reference 上单击 Finish,然后在 Select Reference 面板上单击 Finish。

手动将必要的代码添加到生成的代码中,以使用后端 EJB。清单 1 中的代码片段给出了生成的代码和手动添加的代码的示例。

清单 1. Web 服务实现类代码片段
package com.test; 
             
import com.ibm.etools.service.locator.ServiceLocatorManager; 
import com.test.sessionbean.SampleEJBLocalHome; 
import com.test.sessionbean.SampleEJBLocal; 
 
public class SampleServiceSOAPImpl implements com.test.SampleService_PortType 
{ 
 private final static String STATIC_SampleEJBLocalHome_REF_NAME = "ejb/SampleEJB"; 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
 private final static Class STATIC_SampleEJBLocalHome_CLASS = SampleEJBLocalHome.class; 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
   
  public com.test.SampleOperationResponse 
             sampleOperation(java.lang.String sampleOperationRequest) 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
             throws java.rmi.RemoteException 
  {  
    SampleEJBLocal aSampleEJBLocal = createSampleEJBLocal(); 
     
    /********************************************************************************/ 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
    /* Begin manually added code to work with the sample back-end EJB    */ 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
    /********************************************************************************/ 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
    SampleOperationResponse sampleOperationResponse = new SampleOperationResponse(); 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
    sampleOperationResponse 
       .setServiceResponseString("Request string was: " + sampleOperationRequest); 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
 
    sampleOperationResponse 
       .setServiceUserName("Caller is " + anEJBBBackendLocal.getCallerName()); 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
    return sampleOperationResponse; 
     
    /********************************************************************************/ 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
    /* End of manually added code                          */ 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
    /********************************************************************************/ 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
  } 
 
  protected SampleEJBLocal createSampleEJBLocal() 
  { 
 SampleEJBLocalHome aSampleEJBLocalHome = 
           (SampleEJBLocalHome) ServiceLocatorManager 
     .getLocalHome(STATIC_SampleEJBLocalHome_REF_NAME, 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
     STATIC_SampleEJBLocalHome_CLASS); 
|-------20--------30--------40--------50--------60--------70--------80--------9| 
|-------- XML error: The previous line is longer than the max of 90 characters ---------| 
 try 
        { 
  if (aSampleEJBLocalHome != null) 
  return aSampleEJBLocalHome.create(); 
     } catch (javax.ejb.CreateException ce) 
         { 
      // TODO Auto-generated catch block 
      ce.printStackTrace(); 
     } 
     return null; 
   } 
} 

按照以下所述进行操作,以将本地主接口和本地接口类添加到 EJB 客户机项目中。

在后端 EJB 项目中,打开 META-INF/ejb-jar.xml 文件。

单击 Bean 选项卡,并突出显示相应的 Bean。

单击 Class and Interface Files 切换,然后单击 Add。

在 Add Client View 面板中,选中 Add new local and local interfaces。

单击 Finish。

保存 META-INF/ejb-jar.xml 文件。

现在可以将相关的后端 EJB 方法提升为本地方法。

实现此任务的最后一步是编辑 J2EE 1.3 和 J2EE 1.4 Web 项目的 web.xml 文件,以添加共享库中的 *SOAPImpl 类使用的 EJB 资源引用:

打开 WEB-INF/web.xml 文件。

单击 References 选项卡,然后单击 Add。

在 Add Reference 面板中选择 EJB 引用,然后单击 Next。

在 Add String for Web EJB reference 面板中,找到并突出显示会话 Bean。

确保 Ref Type 为 Local。

单击 Finish 并保存 web.xml 文件。

任务 5:将 J2EE 1.3 客户机应用程序与新 J2EE 1.3 提供者端点集成

要实现此步骤,请进行以下操作:

有关如何将 Web 服务客户机集成到客户机应用程序的详细说明,请参见本系列的第 3 部分。本文将说明如何将 Web 服务客户机集成到会话 Bean 中。可以将相同的集成技术用于客户机应用程序。

任务 6:添加安全性

任务 7:在运行时环境上部署解决方案并进行单元测试

使用示例应用程序

此部分说明如何将完全实现的示例应用程序部署到运行时环境中。要部署示例,您需要使用 WebSphere Application Server V6.0 或更高版本,以运行提供者应用程序。运行时环境应该配置为使用全局安全性,并通过相同的 LTPA 密钥使用轻量级第三方认证 (Lightweight Third Party Authentication, LTPA ) 身份验证。

使用示例应用程序的第一步是下载下载部分提供的文件。它们分别是:

SampleProjects.zip,包括示例应用程序的源代码。

SampleService.ear,提供者应用程序的可部署存档文件。

SampleClient.ear,J2EE 1.3 客户机应用程序的可部署存档文件。

下载了提供的文件后,就已经准备好进行以下操作之一了:

在远程 WebSphere Application Server 系统上运行客户机和提供者应用程序,如图 1 中所示。依次执行任务 1 到 6,以便自定义和采用远程方式运行示例应用程序,如下面列表中所示。

在相同 WebSphere Application Server 系统上以本地方式运行环境和提供者应用程序。跳过任务 1 到 3,并依次执行任务 4 到 6,如下面列表中所示。

要以本地或远程方式运行示例应用程序,必需执行以下任务:

将示例应用程序的源代码导入 Rational Application Developer 工作区。

更新必要的源文件,以反映运行时环境的主机名。

打包解决方案组件。

将应用程序部署到运行时环境。

在 WebSphere Application Server 中配置安全性。

运行示例应用程序。

此部分剩下的内容将对这些任务进行详细描述。

任务 1:导入示例应用程序的源代码

示例应用程序的源代码由表 3 中所示的各个构件组成,包含在 SampleProjects.zip 文件中(请参见下载部分)。我们使用了 Rational Application Developer 的 Project Interchange export 功能将解决方案的源代码导出到 SampleProjects.zip 文件中。此功能可帮助您将源代码方便地导入到其他 Rational Application Developer 工作区中,具体如下所述:

单击 File > Import 并选择 Project Interchange。

单击 Next,提供压缩文件的位置,然后选择所提供的解决方案。


表 3. 示例应用程序构件列表

组件 项目类型 项目名称 描述
Web 服务提供者 EAR 文件EAR 文件SampleService.ear此项目包括 application.xml 文件。
J2EE 1.3 Web 服务端点WebSampleService13Web此项目包括 web.xml 和 webservices.xml 文件。
J2EE 1.4 Web 服务端点WebSampleService14Web此项目包括 web.xml 和 webservices.xml 文件。
共享库JavaSampleServiceJAR此项目包括以下 J2EE 1.4 Web 服务类:

WSDL 中定义的在服务 SampleOperationResponse 间传递的复杂数据类型的 Java 类

Web 服务接口 SampleService_PortType 类

服务定位符 SampleServiceSOAPImpl 类

后端 EJBEJBSampleEJBService此项目包括 EJB 会话 Bean SampleEJBBean。
后端 EJBJavaSampleEJBServiceClient此项目包括以下类:

会话 Bean 的远程主接口 SampleEJBHome

会话 Bean 的远程本地接口 SampleEJBLocalHome

会话 Bean 的远程接口 SampleEJB

会话 Bean 的本地接口 SampleEJBLocal

J2EE 1.3 客户机WebSampleClient此项目包括以下两种类型的类:

使用 Servlet 2.3 规范创建的 J2EE 1.3 Servlet SampleServlet2_3

Servlet 的 Helper 类 ProviderAccessBean

J2EE 1.3 客户机EAR 文件SampleClient.ear此项目包括 web.xml 和 webservices.xml 文件。

任务 2 – 4:更新、打包示例解决方案并将其部署到运行时环境中

请执行以下步骤:

必须对客户机应用程序的源代码进行自定义,以反映运行时环境的主机名。在两个文件中提供主机名,如下面的列表中所示。为了方便起见,请查找 localhost 字符串,并使用恰当的主机名将其替换。

位于 SampleClient 项目中的定位符类 com.test.SampleService_ServiceLocator.java

位于 SampleClient 项目的 META-INF/wsdl 目录中的 WSDL 文件 sampleService.wsdl

对所需文件进行自定义之后,就准备为 Servlet 创建可部署包了。将 Web 服务提供者应用程序的 SampleService.ear 文件部署到 WebSphere Application Server 并将客户机的 Servlet SampleClient.ear 也部署到其中。

任务 5. 运行示例解决方案

接下来就可以执行以下步骤,以运行解决方案:

运行 J2EE 1.3 Servlet,将显示输入页,如图 3 中所示。

要求通过 Servlet 身份验证时,请使用用于全局安全性的属于注册中心一部分的任意用户 ID 进行身份验证。

在显示的页面上的字段中提供输入字符串,然后单击 Send 按钮。

图 3. 输入页面
轻松应对 WS-Security 规范互操作性挑战,第 4 部分: 向 J2EE 1.4 Web service 服务添加 J2EE 1.3 提供者端点

Servlet 使用要提供给后端 EJB 的输入字符串调用 J2EE 1.3 Web 服务端点。会随后在输出页上显示后端 EJB 返回的结果,如图 4 中所示:



图 4. 输出页
轻松应对 WS-Security 规范互操作性挑战,第 4 部分: 向 J2EE 1.4 Web service 服务添加 J2EE 1.3 提供者端点

输出页上显示的用户 ID 应该与用于对 Servlet 进行身份验证的 ID 相同。如果是这样,则可以确信客户机用户标识使用 WS-Security 成功传播到了提供者应用程序。

结束语

本文详细介绍了如何使用多个 Web 服务端点处理 WS-Security 规范级别的互操作性问题,并提供了示例来说明如何通过使用常见 Web 服务类处理一些缺陷。正如您所知的,此方法主要是一种直接的应用程序开发方法。如果沙箱、测试或概念验证项目中无法将 Web 服务使用者应用程序升级到 J2EE 1.4,而且无法承担建立中间件代理的成本,则最适合选择此方法。

下载

描述名字大小下载方法
Sample project files for this articleSampleProjects.zip72KBHTTP
Sample project files for this articleSampleService.ear74KBHTTP
Sample project files for this articleSampleClient.ear104KBHTTP

Tags:轻松 应对 WS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接