JAVA基础:为Web服务构建Struts应用程序(六)

日期: 2007-12-17 作者:执木 来源:TechTarget中国

  清单 1. Action 类的部分代码   /*
  * Create a pre-defined Data Access Object
  */
  newsSearchResultVOB = new NewsSearchResult();
  /*
  * Call Business layer NewsMs’s searchNews method passing the NewsCOD
  * and get back a Collection of News
  */
  newsList = (Vector) newsMs.getNews(newsSearchResultVOB);
  /*
  * Put the NewsList in the request.
  *
  */
  request.setAttribute(SystemConstants.NEWS_LIST, newsList);
  //Set the newslist in the form
  newsFrm.setNewsDetails(newsList);
  // Set the NewsForm in the request
  request.setAttribute(mapping.getAttribute(), newsFrm);
  //return actionForward;
  return mapping.findForward("success");

  从模型服务处接收到数据访问对象后, Action 类通过传递转给模型服务的同一个数据访问对象来调用 WSManager 类中的 getStocks() 方法。 WSManager 类中的 getStocks() 方法执行 JAX-RPC 来订购股票 Web 服务。

  从股票 Web 服务获得的结果要转变成本地的 schema 并且聚集回到预定义数据访问对象中去。这个对象从它被调用的地方传回到 action 类。 清单 2 阐明了如何使用 WSManager 中的 JAX-RPC 来订购 Web 服务,以及如何将股票 Web 服务的结果转变成本地 schema 并聚集回到数据访问对象中去。

  清单 2. 订购 Web 服务及传送响应   public Vector getStocks() throws Exception {
  //Method level variables
  Vector stockValues = new Vector();
  try {
  // create service factory
  javax.xml.rpc.ServiceFactory factory =
  javax.xml.rpc.ServiceFactory.newInstance();
  // define targetNameSpace
  String targetNamespace = "http://www.themindelectric.com/"
  + "wsdl/net.xmethods.services.stockquote.StockQuote/";
  // define qname
  QName serviceName =
  new QName(targetNamespace,
  "net.xmethods.services.stockquote.StockQuoteService");
  // define portname
  QName portName =
  new QName(targetNamespace,
  "net.xmethods.services.stockquote.StockQuotePort");
  // define operation name
  QName operationName = new QName("urn:xmethods-delayed-quotes",
  "getQuote");
  //Specify wsdl location
  java.net.URL wsdlLocation =
  new java.net.URL("http://services.xmethods.net/soap/urn:xmethods-
  delayed-quotes.wsdl");
  // create service
  javax.xml.rpc.Service service =
  factory.createService(wsdlLocation, serviceName);
  // create call
  javax.xml.rpc.Call call =
  service.createCall(portName, operationName);
  //Populate an array with list of stock names
  Vector populatedStockNames = this.getPopulatedList();
  //Loop through the populated list, and for each stock get a result
  java.util.Iterator i = this.getPopulatedList().iterator();
  String stockName = null;
  Float result;
  com.ddj.wsstruts.valueobject.StockValue stockValue = null;
  while(i.hasNext()) {
  stockName = (String) i.next();
  // invoke the remote web service
  result = (Float) call.invoke(new Object[] {stockName});
  if(category.isDebugEnabled()) {
  category.debug(" The quote for " + stockName + " is: " + result);
  }
  //Set stock name and stock values in stockValue bean
  stockValue = new com.ddj.wsstruts.valueobject.StockValue();
  stockValue.setStockName(stockName);
  stockValue.setStockValue(result.toString());
  //Add the stockValue bean to stockValues vector
  stockValues.add(stockValue);
  }
  }

  一旦 Action 类调用完模型服务和 WSManager, ActionForm 中的股票值及信息内容域就会被填充。控制就被返回到 JSP 页面,从 ActionForm 获取所有必需的值并打印 UI.

 

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

执木
执木

相关推荐