在WebSphere Portlet Factory 中调用Web Service

日期: 2008-04-10 作者:王丙山张欣宋林南 来源:TechTarget中国

  通过WebSphere Portlet Factory(WPF),开发者非常方便实现 Web Service 和 Portlets 的通信。开发者无需花费大量的时间去学习 SOAP,WSDL,XML schema(xsd) 等 Web Service 技术,使用 WPF 即可开发出健壮、功能强大的 Web Service 和实现对各种风格的 Web Service 的调用。WPF 隐藏了 Web Service 的内部实现细节,通过 WPF 的丰富的构建器自动生成 Web Service 和实现 Web Service 的调用,WPF 使得 Web Service 的整合开发更加的容易和快捷。


  引言


  在《在 WebSphere Portlet Factory 中 Web Service 的创建》这篇文章中讲解了如何创建 Web Service, 接下来我们将通过一个示例讲解在 WPF 下如何进行 Web Service 的 WSDL、SOAP、HTTP、LOCAL 方式调用和工程的测试。


  本文所讲解示例的开发及运行环境:


  WebSphere Integration Developer (WID) 6.0.1 : 用来集成 WebSphere Portlet Factory,作为开发环境。WebSphere Portlet Factory 是一种开发组件,可以通过 Rational Software Development Platform(RSDP) 或 WebSphere Integration Developer(WID) 来作为其集成平台


  WebSphere Portal Server6.0: 用来作为项目的运行环境


  调用 Web Service


  调用 Web Service,主要使用 WPF 中的 Web Service Call Builder 构建器通过 WSDL,SOAP,HTTP,LOCAL 四种方式对 SOAP Web Service,REST Web Service 进行调用。



  图 1 调用 Web Service 的架构图:
 
  创建新工程


  创建新工程的方法请参阅上述创建 Web Service 小节中创建新工程的方法。当然也可以将调用 Web Service 的 Model 放入同一工程 TestCallService 中。本文档讲解的示例即在同一工程中。


  创建新模型(Model)


  新建一个名称为 TestCall 的 Model。新建 Model 的方法请参阅上述创建 Web Service 小节中新建 Model 的方法,创建完成后, 如图 2



  图 2. 模型(Model)目录图
 
  构建器 (Builder) 的引用


  Web Service 调用示例中需要用到的构建器如下所示:


  Web Service Call Builder:此 Builder 是 Web Service 调用的核心构建器,通过此构建器实现对 Web Service 接口 WSDL 文件的解析和 Client 端与 Server 端通信程序的生成
Method Builder:在此方法中调用 Web Service Call Builder,对 Web Service 的请求参数和返回结果进行处理。


  Variable Builder:存储请求参数和返回结果。
  Page Builder:将各种构建器集中到此构建器中,并显示给客户。
  Text Builder:将返回结果值放入此构建器中,以使其在 Page 上显示出来。
  Button Builder:点击此 button 触发 Method Builder,进行 Web Service 的调用。


  (一)Web Service Call Builder


  在 TestCall Model 中新建一个 Web Service Call Builder(新建方法请参考《在 WebSphere Portlet Factory 中创建 Web Service》文章中 Method builder 的创建),打开 Web Service Call Builder 编辑器, 如图 3



  图 3. Web Service Call Builder 编辑器
 
  从图中可以看到 Service Call Type 一共有四个可选项,在进行下一步工作之前,我们必须先将这四种服务调用类型讲解一下:


  a. WSDL 类型


  适用于 SOAP Web Service,调用以 WSDL 文件来描述服务,以 SOAP 作为访问协议的 Web Service 时都可以采用此调用类型。


  此调用类型使用范围广泛,使用方便,只要拥有 Web Service 的 WSDL 文件即可生成 Web Service 的 Client 调用程序(如果 WSDL 文件 Import 了其它的文件,使用此调用类型除了拥有 WSDL 文件外,还需拥有 Import 需要的文件,比如 Schema 文件 )。


  b. SOAP 类型


  适用于 SOAP Web Service,调用以 SOAP 作为访问协议的 Web Service 时都可以采用此调用类型。


  使用此调用类型必须事先知道 Web Service 对外的接口情况,比如暴露的方法名称,参数,服务地址等。


  c. HTTP 类型


  适用于 REST Web Service,调用以 REST 风格构建的 Web Service 时可以使用此调用类型。


  此处要注意一点,不要误解为 HTTP 调用类型就是可以调用以 HTTP 为通讯协议的 Web Service。例如 SOAP Web Service 也是以 HTTP 为通讯协议的。关于 REST Web Service 的知识请参阅 http://www.xfront.com/REST-Web-Services.html


  d. LOCAL 类型


  仅适用于调用基于 WPF 开发的 Web Service。


  下面让我们以实例讲解这四种调用类型:


  a. WSDL 类型


  如图 4



  图 4. Web Service Call Builder 编辑器(WSDL 模式)
 
  如图所示


  (1) 在 Name 中输入 Web Service Call 构建器的名称 callservice


  (2) 在 Service Call Type 中选中 WSDL 选项


  (3) WSDL URL:输入用来描述服务的 WSDL 文档的 URL


  (a) 可以输入本地 WSDL 文件地址。本例子即是采用这种方式,输入 d:/ WebServiceModel.wsdl,此处的 WebServiceModel.wsdl 文件是通过 Flashget 下载工具从 http://localhost:10038/TestCallService/webengine/WebServiceModel/Action!getWSDL 地址中得到的,WSDL 文件的名字是随意命名的。


  (b) 可以输入 WSDL 文件的服务器地址。例如可以直接输入 http://localhost:10038/TestCallService/webengine/WebServiceModel/Action!getWSDL,条件是此 WSDL 文件所对应的 Web Service 处于运行状态。


  (4) Refresh/fetch WSDL:点击此按钮获得 WSDL 文件所描述的内容。


  (5) Operation:选择想要执行的操作,列出的每个操作将指示操作类型是 RPC 还是 Document。


  (6) AutoCreate Input vars:选中此复选框可强制 Web Service 调用构建器重新生成每个服务调用所需要输入的参数,在构建器上点击 Apply 按钮后,将会在 Web 应用程序树形视图的“变量”部分中看到这些变量,它们的名称格式为“_argN_”, 如图 5



  图 5. Web 应用程序树形视图
 
  这些变量不会出现在构建器调用列表中,但您可以使用方法来获取和设置它们的值,并且它们会在引用选择器中列出。


  此处将要使用的是我们自定义的变量,虽然是使用自定义变量,但是也要首先选定 AutoCreate Input Vars,这样做的目的是由此来生成自定义变量所需的 Schema 结构。我们稍后将讲解自定义变量。


  (7) Inputstr(query):当选中 AutoCreate Input Vars 后,在此输入框中将会自动显示出自动创建的变量名,当然也可以点击选择按钮,打开引用选择器来选择我们自己定义的变量。关于如何引用自定义变量,我们将稍后讲解。


  (8) Inputstr documentation:Web Service 所需参数的描述信息。由 Builder 根据 WSDL 文件自动生成。


  (9) Reply:Web Service 返回结果的名称和类型。由 Builder 根据 WSDL 文件自动生成。


  (10) Service description:Web Service 的描述信息。由 Builder 根据 WSDL 文件自动生成。


  (11) URL:Web Service 服务地址。由 Builder 根据 WSDL 文件自动生成。


  (12) Method description:Web Service 中方法的描述信息。由 Builder 根据 WSDL 文件自动生成。


  (13) SOAP Action:调用方法的名称一般在此处给出,并且 SOAP Action 会包含在 HTTP Request Header 中。由 Builder 根据 WSDL 文件自动生成。


  (14) Service URL(override):可以通过在此处输入该服务的另一个 URL 来覆盖 WSDL 文档中指定的服务 URL,此处作为测试,输入了 http://webserviceurl/TestCallService/servlet/AxisServlet,此 URL 中的主机地址是随意写的,因为下面要进行覆盖,但是 TestCallService/servlet/AxisServlet 这部分必须正确填写为 Service 的 URL,而不是 WSDL 文件的地址。


  (15) Service Hostname(override):Web Service 所在主机的地址。


  (16) Service Port(override):Web Service 的端口号。


  其余几个配置, 如图 6



  图 6. 辅助配置项目图
 
  上图所示,包含了服务连接时间限制,附加 SOAP 头,HTTP 头,Service 访问身份验证,Service 访问代理设置等,此处这些设置均采用如图所示的默认值。


  所有的设置按照上述所示设置完成后,点击 Apply 按钮完成此构建器的创建。


  b. SOAP 类型


  如图 7



  图 7. Web Service Call Builder 编辑器(SOAP 模式)
 
  如图所示:


  (1) Name:在同一个 Web Service Call Builder 中进行 SOAP 方式调用


  (2) Service Call Type:选中 SOAP 选项


  (3) SOAP URL:输入服务的地址 http://localhost:10038/TestCallService/servlet/AxisServlet
注意:此处需要的是服务的地址,而不是 WSDL 文件的地址。


  (4) Target Method:输入要调用的方法 getQueryResult,信息来自于 WSDL 文件。


  (5) Method Namespace:输入上述方法的命名空间 http://wbs.com,信息来自于 WSDL 文件。


  (6) Schema Namespace:输入 Schema 的名称空间 http://www.w3.org/2001/XMLSchema,信息来自于 WSDL 文件


  (7) SOAP Action:调用方法的名称一般在此处给出,并且 SOAP Action 会包含在 HTTP Request Header 中。此处设置为空值。信息来自于 WSDL 文件


  (8) Literal Data:如果目标 SOAP 服务是文档样式,则选中此复选框。如果 SOAP 服务是 RPC 样式,则可以不选中此复选框。由于本文中的服务是文档样式的,因此选中该复选框。


  (9) Arguments:输入要传递至服务的每个参数的参数名、类型和参数值。参数名根据需要命名即可;类型选择 IXml,选择 IXml 的原因是从 WSDL 文件中可以看出服务的参数类型是复杂类型;参数值应用我们自定义的变量,关于自定义变量,我们将稍后讲解。


  (10) Reply:返回值类型选择为 IXml。选择 IXml 的原因是从 WSDL 文件中可以看出服务的返回类型是复杂类型。


  其余几个配置, 如图 8



  图 8. 辅助配置项目图
 
  上图所示,包含了服务连接超时, SOAP 头,HTTP 头,Service 访问身份验证,Service 访问代理设置等,此处这些设置均采用如图所示的默认值。


  所有的设置按照上述所示设置完成后,点击 Apply 按钮完成此构建器的创建。


  c. HTTP 类型


  我们以一个 Servlet 为例来模拟 REST Web Service 的调用。在进行 HTTP 调用之前,请先将附件中的 Servlet 部署到 WPS 或者 WAS 上。 如图 9



  图 9. Web Service Call Builder 编辑器(HTTP 模式)
 
  如图所示:


  (1) Name:在同一个 Web Service Call Builder 中进行 HTTP 方式调用


  (2) Service Call Type:选中 HTTP 选项


  (3) URL:在此处输入 REST Web Service 的地址(Servlet 的地址)http://localhost:9080/TestServlet/service/rest


  (4) HTTP Request Type:选择 HTTP 请求方法,此处我们选中 GET 方法,当然也可以选中 POST 方法


  (5) Arguments:输入 Web Service 所需的参数名称,此处输入”name”,该名称必须要和 REST Web Service(Servlet) 要求的参数名一致。参数值随意写入”dashan”。此处可以直接填值,也可以引用自定义的变量。


  (6) HTTP Reply Schema Type:如果响应类型为 XML,则可以根据返回的类型来定义一个 Schema Builder,然后通过点击选择按钮,打开引用选择器来引入此模式,当然也可以直接在此处填写类型 IXml。


  (7) Timeout(seconds):连接超时设置。


  (8) Follow Redirect:遵循重定向,缺省情况下启用。如果不想要服务请求遵循任何重定向,则禁用此复选框。


  (9) Forced Content-Type:强制内容类型,如果来自 HTTP 服务的响应是除 HTML 以外的其他内容,则将内容类型设置为适当的值,如 text/xml


  (10) Parse All Reply tabs:解析所有应答标记,缺省情况下启用。如果返回的结构非常复杂,则可禁用此复选框以使 Factory 不检查服务调用返回的结构中的所有标记。


  (11) Wrap reply in tab:在 标记中合并应答,启用此复选框(缺省值),在 标记中合并返回的 HTTP 响应数据。这将在 结尾标记之前产生 ….. 和任何其他内容。禁用此复选框以返回响应 IXml 中的第一个子元素。如果您期望返回内容类型为“text/xml”并因此只获得未合并的 XML 内容,则禁用此复选框很有用。


  其余几个配置, 如图 10



  图 10. 辅助配置项目图
 
  上图所示,包含了 HTTP 头,日志,存 / 伪根,Service 访问身份验证等设置,此处这些设置均采用如图所示的默认值。


  所有的设置按照上述所示设置完成后,点击 Apply 按钮完成此构建器的创建。


  d. LOCAL 类型


  如图 11



  图 11. Web Service Call Builder 编辑器(LOCAL 模式)
 
  如图所示:


  (1) Name:在同一个 Web Service Call Builder 中进行 LOCAL 方式调用。


  (2) Service Call Type:选中 LOCAL 选项。


  (3) Model:点击选择按钮打开模型选择器, 如图 12



  图 12. 模型选择器
 
  如图所示,选中 WebServiceModel 然后点击 OK 按钮


  (4) Refresh/fetch WSDL:点击此按钮,构建器将对 WebServiceModel 进行解析,根据其中所包含的 Web Service 信息生成客户端调用程序。


  (5) Operation:选择想要执行的操作,列出的每个操作将指示操作类型是 RPC 还是 Document


  (6) AutoCreate input vars:选中此复选框,将由 Builder 来自动生成 Web Service 所需的参数。此处将要使用的是我们自定义的变量,虽然是使用自定义变量,但是也要首先选定 AutoCreate Input Vars,这样做的目的是由此来生成自定义变量所需的 Schema 结构。我们稍后将讲解自定义变量。


  (7) Inputstr(query):当选中 AutoCreate Input Vars 后,在此输入框中将会自动显示出自动创建的变量名,当然也可以点击选择按钮,打开引用选择器来选择我们自定义的变量。


  (8) Inputstr documentation:Web Service 所需参数的描述信息。由 Builder 根据 WebServiceModel 中的 Web Service 描述信息自动生成


  (9) Reply:Web Service 返回结果的名称和类型。由 Builder 根据 WebServiceModel 中的 Web Service 描述信息自动生成


  (10) Service Description:Web Service 的描述信息。由 Builder 根据 WebServiceModel 中的 Web Service 描述信息自动生成


  (11) Method Description:Web Service 中方法的描述信息。由 Builder 根据 WebServiceModel 中的 Web Service 描述信息自动生成


  (12) Logging:日志处理,选择想要构建器执行的记录的类型(如果存在)。信息将写至应用程序服务器的控制台以及 Factory 的日志文件中,此信息有助于调试服务出现的问题,此处采用默认值


  (13) Dummy/stub result:伪/存根结果,提供要返回的值,而并非实际调用该服务所产生的结果。例如,可启用此功能以便在开发应用程序期间进行测试,这样就可以在不需要其他目标模型就位的情况下运行该模型了,此处采用默认值。


  所有的设置按照上述所示设置完成后,点击 Apply 按钮完成此构建器的创建。


  (二)Method Builder


  创建调用 Web Service Call Builder 的 Method Builder(新建方法请参考《在 WebSphere Portlet Factory 中创建 Web Service》文章中 Method builder 的创建), 如图 13



  图 13. Method Builder 编辑器
 
  方法名 :InvokeServiceCall


  参数 :为空值(默认值)


  方法体 :见清单 3


  清单 3.
               
   webAppAccess.callMethod(“callservice.invoke”);
   //invoke Web Service call builder callservcie.
   //Get returned value from callservice_reply variable,the
   variable callservice_reply is yielded by Web Service call builder
    //and the variable store the returned value after call Web Service.
   String result =(String) webAppAccess.getVariables().
   getString(“callservice_reply”);
   webAppAccess.getVariables().setString(“getResult”,result);
   //put result into getResult variable.
   System.out.println(“result==”+webAppAccess.getVariables().
   getString(“getResult”));
   webAppAccess.processPage(“page1”);//redirect page1.
 
  (三)Variable Builder


  (A) 创建变量 querystr


  在讲述 WSDL 调用,SOAP 调用,LOCAL 调用的时候,提到参数可以引用自定义变量,下面以 WSDL 调用为例讲解。 如图 14



  图 14. Variable Builder 编辑器
 
  如图所示:


  (1) Name:输入参数的名称 querystr


  (2) Type:点击选择按钮打开变量类型引导器, 如图 15



  图 15. 变量类型引导器
 
  如图选中 query 对象,然后点击 OK 按钮。


  注意:在选择对象时,要注意选择合适节点层次的对象。


  引导器中的 callservice_WSDLSchema 类型即是在 Web Service Call Builder 编辑器中,选中 AutoCreate Input Vars 后产生的。


  (3) Namespace:命名空间由构建器根据 callservice_WSDLSchema 自动产生。


  (4) Namespace Prefix:命名空间前缀由构建器根据 callservice_WSDLSchema 自动产生。此处是空值。


  (5) Create sample data:点击此按钮,构建器根据 callservice_WSDLSchema 类型在 Initial Value 中生成变量的结构 , 如 清单 4


  清单 4.
               
   http://wbs.com“>
   string
  

 
  (6) Initial Value:初始值,用任意值替换 string 中的 string。例如替换后形成如 清单 5


  清单 5.
               
   http://wbs.com“>
   My World
  

 
  完成以上几项设置后,点击 Apply 按钮完成此 Variable Builder 的创建。


  在 Web Service Call Builder 中的变量引用, 如图 16




 
  图 16. 变量引用
 
  如图所示,取消选择 AutoCreate Input Vars,然后点击选择按钮打开变量引导器, 如图 17



  图 17. 变量类型引导器
 
  选中需要的参数对象,然后点击 OK 按钮。


  注意:在选择对象时,要注意选择合适节点层次的对象。


  (B) 创建变量 getResult


  如图 18




  
  图 18. Variable Builder 编辑器
 
  请读者朋友按照中所示进行此变量的创建。


  (四)Page Builder


  此 Builder 在创建 Model 的时候自动创建, 如图 19



  图 19. Page Builder 编辑器
 
  用 清单 6 中的代码替换其 Page Contents(HTML) 中的初始代码:


  清单 6.
               
  
  
  
  
  


  


   Test WPF Call Web Service


   Please click CallWebService button
   for calling Web Service

  
  
  


  

   The Result value:

   <
   !–Invoke showResult Text builder–>
  

  

  
  
 
  (五)Text Builder


  如图 20



  图 20. Text Builder 编辑器
 
  请读者朋友按照图中所示进行此文本构建器的创建


  (六)Button builder


  如图 21



  图 21. Button builder 编辑器
 
  请读者朋友按照图中所示进行此按钮构建器的创建。


  测试工程


  配置运行, 如图 22



  图 22. 配置运行图解
 
  选中 TestCall.model,点击右键,如图所示,打开运行管理器, 如图 23



  图 23. 运行管理器
 
  选中 WebSphere Portlet Factory,点击 New 按钮创建一个新的运行实例,将其命名为 testcallwebservice,然后点击 Run 按钮进行测试。


  测试结果: 如图 24



 


  图 24. 测试结果图(点击按钮之前)
 
  点击 CallWebService 按钮调用 Web Service 后的结果, 如图 25



  图 25. 测试结果图(点击按钮之后)
 
  此结果页面是采用 WSDL,SOAP,LOCAL 调用方式产生的。


  采用 HTTP 方式调用产生的结果页面 如图 26



  图 26. 测试结果图(点击按钮之后)
 
  扩展


  本文中的 Web Service 调用示例所调用的 Web Service 是由 WebSphere Portlet Factory 创建的,为了使读者更好的体会 Web Service Call Builder 的使用,我们又提供了一个更为复杂的 Web Service(请见附件)供读者学习使用,当然读者朋友也可以调用其他语言开发的 Web Service(比如 .net 开发的 Web Service 等)


  注意:本文提供的更为复杂的 Web Service 的开发工具采用的是 WID6.0,运行环境是 WebSphere Process Server6.0,当然学习者也可以将其直接布署到 WebSphere Application Server6.0 下面。


  总结


  本文向读者朋友讲解了在 WPF 下 Web Service 的调用和工程的测试及 Web Service 的一些相关知识。请读者朋友结合附件中给出的源码阅读此文章,并且自己动手结合此篇教程做出自己的例子,这样更能深入的理解此篇文章。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐