IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

IBM WebSphere 开发者技术期刊: 运用 WebSphere Studio V5.1.1 开发 JSF 应用程序——第 5 部分

使用 Web 服务代理组件创建 JSF Web 服务客户端

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 初级

Roland Barcia (barcia@us.ibm.com), Consulting IT Specialist, IBM Software Services for WebSphere

2004 年 7 月 01 日

在这一个由 5 部分组成的系列的前面部分中,我们使用快速应用程序开发(Rapid Application Development,RAD)JSF 组件创建 Java™ Server Faces 表单,并了解了 JSF 如何利用 Web Data Object(WDO)或 Service Data Object(SDO)技术,以及现有的 J2EE 技术。最后一部分我们将要使用 JSF Web 服务组件调用 Web 服务。

引言

这一系列文章展示了 WebSphere Studio V5.1.1 中的 Java Server Faces Technology Preview 的特征,本文是其中的第 5 部分。这一系列文章包括以下几个部分:

在本系列的 第 4 部分中,我们介绍了 JSF 如何利用现有的 J2EE 技术,它使用 JavaBean 数据控件来创建一个调用现有的 EJB 应用程序的 JSF 页面。在最后这一部分,我们将使用 JSF Web 服务组件来调用 Web 服务。

JSF Web 服务组件可以在 Internet 上搜索任何标准的 Web 服务,也可以为调用 Web 服务和显示结果构建输入和输出控件。在本练习中,我们将使用第 4 部分中的 JEB JAR 来生成和部署 Web 服务。然后我们使用 JSF Web 服务来生成运行 Web 服务的控件。

要完成这一练习,您需要用到本系列第 4 部分所创建的内容。如果您还没有完成第 4 部分,在 下载文件中包含了针对这一部分的解决方案。导入前面文章所介绍的 EAR 文件,并按照 第 4 部分所介绍的测试指令来操作。要想运行这一示例,您需要创建 第 3 部分所介绍的数据库。如果您还没完成第 3 部分,请导入该解决方案,并运行应用程序,以在本文将使用的服务器配置中创建 JDBC 数据源。





回页首


从现有的 EJB 构建 Web 服务

JSF Web 服务组件在 Internet 上搜索现有的 UDDI 注册,然后使用 WSDL 文件生成适当的控件。控件使用标准的 JAX-RPC API 来调用 Web 服务。开始时,我们从现有的 EJB 组件构建一个 Web 服务,部署它,然后使用 JSF 控件从正在运行的 WebSphere Application Server Test Environment 生成它。这可以展示我们能够以多快的速度从 WebSphere Studio Application Developer(以下称为 Application Developer)构建 Web 服务和 Web 服务客户端。在本练习中,我们将使用 StockFacade Session Bean 中的 accessCompanyInfo 方法:

  1. 在 Application Developer 中,从主菜单中选择 File => New => Other...,然后从左边的列表中选择 Web Services,在右面板中选择 Web Service(图 1)。选择 Next
    图 1. 创建一个新的 XML 服务
    图 1. 创建一个新的 XML 服务
  2. 在 Web Services 对话框(图 2)中,为 Web services type 选择 EJB Web service,并确保只选中 Start Web service in Web projectCreate folders when necessary选项。单击 Next
    图 2. Web 服务选项
    图 2. Web 服务选项
  3. 在 Service Deployment Configuration 对话框(图 3)中,为 EJB Project 选择 StockSystemEJB,为 Router project 选择 PersonalTradeJSF。这将会在 EJB 项目中配置 EJB Web 服务描述符和端点。然后 Web 项目会包含必要的路由器。单击 Next
    图 3. 服务部署配置
    图 3. 服务部署配置
  4. 然后,点击 Browse EJB beans按钮(图 4)。
    图 4. Web Services EJB Selection
    图 4. Web Services EJB Selection
  5. 选中 StockFacadeSession Bean,然后单击 OK
    图 5. 浏览 EJB Bean
    图 5.  浏览 EJB Bean
  6. 注意,现在会话 bean 信息已填充(图 6)。单击 Next
    图 6. 完成的 Web Service EJB Selection 对话框
    图 6. 完成的 Web Service EJB Selection 对话框
  7. 在 Web Service Java Bean Identity 对话框(图 7)中,选中 getCompanyInfo复选框,然后单击 Next
    图 7. Web Service Java Bean Identity
    图 7. Web Service Java Bean Identity
  8. 如果您收到 Web Services Warning ,请选择 Yes to All,这样您就可以重载并预生成 EJB Web 服务接口。
    图 8. Web Services Warning
    图 8. Web Services Warning
  9. 在 publication 对话框(图 9)中,选择 Finish。不要选择任何的 UDDI Registry。
    图 9. Web Service Publication
    图 9. Web Service Publication
  10. 完成时,服务器会启动,然后可以部署 Web 服务了。
    图 10. 服务器状态
    图 10. 服务器状态
  11. JSF Web 服务客户端依赖于为构建页面数据而激活的 Web 服务。在页面中放置 Web 服务代理组件之前,您有机会测试 Web 服务。





回页首


构建 JSF Web 服务客户端

现在,我们可以构建 JSF Web 服务客户端。

  1. 首先,创建一个新的 Faces JSP 页面:
    1. 在 Application Developer 中,在 WebContent 目录下创建一个新的 Faces JSP 页面,并将其命名为 companyInfoWS.jsp (图 11)。
      图 11. 创建 Faces JSP 文件
      图 11. 创建 Faces JSP 文件
    2. 请记住在工作区中选择现有的 User-Defined Page Template(图 12)。
      图 12. Page Template File Selection
      图 12. Page Template File Selection
      现在,JSP 页面会在编辑器中打开。

  2. 要在页面数据中添加 Web 服务代理,请执行以下操作:
    1. 在 Page Data 对话框中,右键单击 JSP scripting,然后选择 New => Web Service Proxy(图 13)。
      图 13. Page Data
      图 13. Page Data
    2. 在 Add Web Service Proxy Bean 对话框中,选择 New
      图 14. Add Web Service Proxy Bean
      图 14. Add Web Service Proxy Bean
    3. Web Service Discovery Home 屏幕将显示(图 15)。这里,您可以通过 Internet 或在您自己的正在运行 UTE 服务器的工作区中调用任何兼容的 Web 服务。选择 Web Services from your workspace
      图 15. Web Service Directory Home
      图 15. Web Service Directory Home
    4. 如果服务器正在运行,则会显示到公司信息 Web 服务的链接(图 16)。单击该链接。
      图 16. Web Services Information 显示
      图 16. Web Services Information 显示
    5. 选择 StockFacade端口,然后单击 Details 按钮。
      图 17. Web Services 信息列表
      图 17. Web Services 信息列表
    6. WebSphere Studio Web Service Explorer 将启动。请选择 getCompanyInfo链接(图 18)。
      图 18. WSDL Binding Details
      图 18.  WSDL Binding Details
    7. 在 symbol 中键入 IBM ,然后选择 Go
      图 19. Invoke a WSDL Operation
      图 19. Invoke a WSDL Operation
    8. 在底部框架中,您会看到调用的结果(图 20)。也可以检查 SOAP 信封来检验 Web 服务是否真正在工作。完成时,关闭 Web Service Explorer。
      图 20. 调用结果
      图 20. 调用结果
    9. 返回到选择 StockFacade 的 JSF Web Service Proxy 向导,单击 getCompanyInfo(图 21)。
      图 21. Web 服务信息列表
      图 21. Web 服务信息列表
    10. 再一次为 Web Services Warning 选择 Yes to All。完成时,这将创建 Web 服务代理,并将其添加为页面数据(图 22)。单击 OK
      图 22. 创建的 Web 服务代理 bean
      图 22. 创建的 Web 服务代理 bean
    11. 该页面数据现在有可用于页面的 Web 服务。The page data now has the Web service available to the page.
      图 23. 带有可用的 Web 服务的页面数据
      图 23.  带有可用的 Web 服务的页面数据
  3. 现在,我们可以在页面中添加 Web 服务控件:
    1. 在 Application Developer 中,将 getCompanyInfo方法拖到 JSP 页面,如图 24 所示。
      图 24. 在 JSP 页面中添加 Web 服务控件
      图 24. 在 JSP 页面中添加 Web 服务控件
    2. 这一操作将会创建一个输入表单。如图 25 中突出显示的标签所示。
      图 25. 更改输入表单中的标题
      图 25. 更改输入表单中的标题
    3. 在 Attributes 视图中选择 Heading 3选项。
      图 26. 字段属性
      图 26. 字段属性
    4. 将文本更改为 Get Company Information 。接下来选中输入控件旁边的标签(图 27)。
      图 27. 更改输入表单的字段标签
      图 27. 更改输入表单的字段标签
    5. 转到 Attributes 视图,将该字段选择为 Header 字段(图 28)。
      图 28. 字段属性
      图 28. 字段属性
    6. 将文本更改为 Enter Symbol ,然后选择 Invoke按钮。
      图 29. 更改按钮标签
      图 29. 更改按钮标签
    7. 转到 Attributes 视图,并在 Label 字段中键入 Get Company Information
      图 30. 字段属性
      图 30. 字段属性
    8. 您可能会在生成的代码后面看到一个错误。如果有,则表明当前驱动器没有为 Web 服务抛出的自定义异常添加批处理块。我们可以修复这个错误。
      图 31. Java Resources 错误
      图 31. Java Resources 错误
    9. 在 Task 视图中,右键单击该错误并选择 Quick Fix
      图 32. Quick Fix 选项
      图 32. Quick Fix 选项
    10. 选中 Add catch clause to surrounding try选项。
      图 33. 可用的快速修复
      图 33. 可用的快速修复
    11. 选中的修复会添加 try 代码块(图 34)并打开生成的 Java 类。请关闭 Java 类。
      图 34. Try 块
      图 34. Try 块
    12. 选择 JSP 中的 Button,转到 Quick Edit 视图。将 C:\JSFLAB\Lab5\CodeSnippet1.txt 中的代码粘贴到每个 catch 块中。结果如图 35 所示。
      图 35. 包含快速修复代码的 Catch 块
      图 35. 包含快速修复代码的 Catch 块
    13. 我们将在按钮组件中添加错误消息,这允许我们在以后拖放错误组件并将它与按钮组件相关联。
  4. 现在,我们来添加输出组件。将 Web 服务拖到屏幕上,这样就会在 Page Data 视图中创建一个结果 Company Info Bean。我们需要将该组件拖到页面中。在缺省情况下,它只会打印对象 ID。
    1. 如图 36 所示,将 getCompanyInfoResultBean拖到页面中;替换掉该处原来的 resultBean 组件。
      图 36. 在 JSP 页面中添加 CompanyInfo
      图 36. 在 JSP 页面中添加 CompanyInfo
    2. 选中 Create output components,然后单击 OK
      图 37. Select drop action
      图 37. Select drop action
    3. 将标签更新为 Company Information ,然后再次通过 Attributes 视图将它定为 Header 3
      图 38. 更改标题标签
      图 38. 更改标题标签
    4. 通过 Attributes 视图将每个字段标签更新为标题单元格。
      图 39. 更改字段标签
      图 39. 更改字段标签
  5. 现在,我们在页面中添加错误控件。该错误控件将会链接到屏幕中的按钮上。我们在捕捉到异常时设置此错误。
    1. 选择 Display Error组件。
      图 40. Display error
      图 40. Display error
    2. 将该组件拖放到 Enter Symbol 标签上。
      图 41. 放置 Display error 组件
      图 41. 放置 Display error 组件
    3. 选择输出组件(图 42)。
      图 42. 选择输出组件
      图 42. 选择输出组件
    4. 在 Attributes 对话框中,将错误控件链接到 ID 按钮上(如第 4 部分所做的)。
      图 43. 将错误控件与按钮相关联
      图 43. 将错误控件与按钮相关联
    5. 保存关闭JSP。





回页首


测试 JSF Web 服务客户端

我们现在可以来测试 Web 服务成功执行的情况及发生错误的情况:

  1. 在 Server 视图中重启项目,如图 44 所示。
    图 44. 重启项目
    图 44. 重启项目
  2. 右键单击 companyInfoWS.jsp并选择 Run on Server
    图 45. 运行 JSP
    图 45. 运行 JSP
  3. 在 Select Tasks 对话框中选择 Finish(图 46)。
    图 46. 选择任务
    图 46. 选择任务
  4. 这样会在浏览器中显示页面。请为 Symbol 键入 IBM ,然后选择 Get Company Information按钮。
    图 47. 测试 JSP
    图 47. 测试 JSP
  5. 成功的测试结果会在输入表单的正下方显示(图 48)。
    图 48. 成功的结果
    图 48. 成功的结果
  6. 现在,我们来测试不正确的 symbol:键入 IBB ,然后单击 Get Company Information
  7. 会显示错误输出组件(图 49)。
    图 49. 错误结果
    图 49. 错误结果

如果完成,则停止服务器。





回页首


结束语

在这个由五部分组成的系列的结束篇中,我们展示了如何通过 WebSphere Studio Application Developer 的 Java Server Faces 组件来快速地构建面向服务的应用程序,以及如何构建 Web 服务的客户端。我们以现有的 EJB 组件为基础,快速地生成一个 Web 服务。另外,我们还部署和运行了 Web 服务,并使用 JSF Web Service Client Component 来为 Web 服务构建 RAD 客户端。

由于这是这个系列的最后一篇文章,所以我们在 C:\JSFArticleSeries\FinalSolution 文件目录中包含了整个练习的最终解决方案 EAR。(假定您将该 zip 文件解压到 C:\

到此为止,为 WebSphere Studio V5.1.1 中的 JavaServer Faces 技术预览而推出的文章系列就结束了。我希望这一系列能够显示出 J2EE 和 Service Oriented Architecture 中 JavaServer Faces 所具有的能力和潜力。





回页首


致谢

作者真诚感谢 Beverly DeWitt 对本文所做的贡献。






回页首


下载

名字大小下载方法
JSFArticleSeriesP5.zip15.1 MBHTTP
关于下载方法的信息


参考资料



关于作者

Roland Barcia是位于纽约/新泽西州 Metro 区的 IBM Software Services for WebSphere 的 IT 顾问专家。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款