快速业务通道

用JAXM开发Web服务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
业务方法        SOAPMessage msg=new XMLBusinessDelegate().listAllBook();        System.out.println("this is the reply.....");        msg.writeTo(System.out);        msg.saveChanges();//注意,在返回消息之前要调用这个方法        return msg;//返回消息      }      catch(Exception ex)      {      ex.printStackTrace();       //处理错误….      return null;      }    } }

用JAXM开发Web服务(6)

时间:2011-02-07 IBM 陈亚强

在这个例子里,由于接收到的消息不含任何参数,故没有对它进行处理,一般情况下,接收的消息是有参数的,并且服务端需要使用这个参数来调用业务层组件,如当用户按类别查找图书时,服务端需要获得类别的名字,例程7是按类别查找图书的服务端Servlet的部分代码,我们看服务端是怎么获得客户端的请求参数。

例程7 ListByCategory的部分代码

public SOAPMessage onMessage (SOAPMessage message)    {   try   {     …   SOAPEnvelope env=message.getSOAPPart().getEnvelope();   Iterator it=env.getBody().getChildElements( env.createName("books","GetBookByCategory","http://hellking.webservice.com"));   SOAPElement books=(SOAPElement)it.next();   Iterator it2=books.getChildElements( env.createName("category","GetBookByCategory","http://hellking.webservice.com"));   String category=((SOAPElement)it2.next()).getValue();         //这里的category是从SOAP 消息中读出的参数   SOAPMessage msg=new XMLBusinessDelegate().listByCategory(category);        msg.saveChanges();        return msg;//返回处理消息      }      catch(Exception ex)      {      ex.printStackTrace();      //处理错误….      return null;//如果出错,一般返回SOAPFault,这里简化了。      }    }

SAAJ API为解析SOAP 消息提供了很好的支持,注意上面的黑体子,它是读取获得查找图书类别参数category的代码,这个参数是客户端设置的,在以后我们将看到客户端怎么设置这个参数。

总结一下,JAXM服务端Servlet处理消息的步骤是:

获得消息(onMessage)

读取消息中需要的参数

利用参数调用对应的业务处理

构建响应SOAP消息

返回处理后的消息

从上面的例子可以看出,JAXM服务端Servlet并没有处理具体的业务,而是把业务处理交给一个叫XMLBusinessDelegate业务代表的类来处理。

我们来看一下XMLBusinessDelegate是怎么来进行业务处理的。如例程8所示。

例程8 XMLBusinessDelegate的部分代码

… public class XMLBusinessDelegate { InitialContext init=null;   BookServiceFacadeHome facadeHome; OTDEngine otd;//对象到数据的转换器 public XMLBusinessDelegate()throws NamingException {   init=this.getInitialContext(); otd=new BeanToSOAPEngine(); //生成对象到数据转换器实例    } public static InitialContext getInitialContext() throws javax.naming.NamingException   {     //更据不同的EJB容器,使用不同的url和连接工厂来获得上下文,然后返回… } //业务方法,按类别查找图书 public SOAPMessage listByCategory(String category)   {    try   {    Object objref = init.lookup("ejb/bookservicefacade");      facadeHome = (BookServiceFacadeHome) jav

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号