读书人

JAVA处置含有DataSet的web services

发布时间: 2012-10-31 14:37:32 作者: rapoo

JAVA处理含有DataSet的web services

?????? 本篇文章将讲述如何通过axis取得.net发布的Web services,并处理返回含有DataSet的处理结果,展现在页面上。
  涉及到的知识有:
  AXIS
??????? SAXBuilder
??????? xml

??????? 步骤如下:
  1)、生成client stub文件。
     必备条件axis开源包。JDK
    A)、比如AXIS包放在你的C盘,则需要在环境变量当中设定的东东有:
?????????????????????????? AXIS_HOME=C:\AXIS
???????????????????????????AXIS_CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;%AXIS_HOME%\lib\activation.jar;%AXIS_HOME%\lib\mail.jar
?????????????????????????? 然后加入到PATH当中:.;%?AXIS_CLASSPATH%?? (加入就可以了)
????????????????????????? 注意:很多人因为以上的配置不对,导致对AXIS学习的信心下降,其实,仔细一点就会发现在CLASSPATH当中找一找有没有版本区别。也就是每一个JAR包是不是真的存在就可以了。(哈哈,我曾为之付出了两天的时间!)
???????????????? B)、进入DOS模式,转到D盘,执行如下代码:
      java org.apache.axis.wsdl.WSDL2Java -p?<名称,最好是包名> http://10.2.10.80/FocService/FocService.asmx?wsdl,看到了吧。对.net发布为asmx的文件后面加入?wsdl就可以解决了。
      然后就会在这个<名称,最好是包名>下就会有一堆的JAVA文件,一般的话会有:
?????????????????????? xxxx.java
?????????????????????? xxxxLocator.java
???????????????????????xxxxSoap.java
????????????????????? xxxxSoapStub.java
??????????????????????其次还有以下划线_xxxx????.java的文件都是序列化的对象,也就是返回的结果对应元素。可以暂时不理它。下面就以作者生成的示例做一个引用webservice的操作。作者得到的文件如下:
?????????????????????? SearchFlightInfo.java
?????????????????????? SearchFlightInfoLocator.java
?????????????????????? SearchFlightInfoSoap.java
????????????????????? SearchFlightInfoSoapStub.java
?????????????????????? -----------------------------------
?????????????????????? _GetFlightInfoResponse_GetFlightInfoResult.java
????????????????????? _GetstrFlightInfo.java
???????????????????? _GetstrFlightInfoResponse.java
??????????????????? C)、引用方法:
    

???????????????????????????????基本思想是从得到web services后取得他的主体信息(返回的数据信息),然后生成XML文件,然后再把XML文件转换成一个JAVA序列化对象就可以了。
        如下是序列化对象的代码。
?????????????????????

java 代码 
  1. try?{ ??
  2. ????????????/** ?
  3. ?????????????*?取得前台的参数?1、航班日期?2、航班号 ?
  4. ?????????????*/??
  5. ????????????String?planDate?=?request.getParameter("day"); ??
  6. ????????????String?flyNo?=?request.getParameter("hanbanno");???
  7. ????????????/** ?
  8. ?????????????*?按照最新版本制作,最新位置在:http://10.2.10.62/OPCFltWS/SearchFlightInfo.asmx ?
  9. ?????????????*/??
  10. ????????????SearchFlightInfo?service?=?new?SearchFlightInfoLocator(); ??
  11. ????????????SearchFlightInfoSoap?client?=?service.getSearchFlightInfoSoap(); ??
  12. ????????????_GetFlightInfoResponse_GetFlightInfoResult?FOCInfo=client.getFlightInfo(planDate,?flyNo); ??
  13. ????????????String?ErrorInfo?=?client.getstrFlightInfo(planDate,?flyNo);//错误警告信息
  14. ????????????MessageElement[]?FOCElement?=?FOCInfo.get_any();//取得xml信息 ??
  15. ????????????List?FOCElementHead?=?FOCElement[0].getChildren();//消息头,DataSet对象???
  16. ????????????List?FOCElementBody?=?FOCElement[1].getChildren();//消息体信息,DataSet对象?
  17. ????????????if?(FOCElementBody.size()?<=?0){ ??
  18. ????????????????//无返回记录,则无输出 ??
  19. ????????????????return?mapping.findForward("NoRecord");? ??
  20. ????????????} ??
  21. ????????????String?nn?=?FOCElementBody.get(0).toString();//消息体的字符串形式? ??
  22. ????????????String?path?=?request.getRealPath("");? ??
  23. ????????????CommonTools.saveXMLString(nn,path+"\\FOC\\heweiya1.xml");//保存为XML形式,其中FOC目录做为固定目录 ??
  24. ????????????/** ?
  25. ?????????????????*?使用DOM4J来解析这个序列化的对象 ?
  26. ?????????????????*/??
  27. ????????????//String?path?=?request.getRealPath(""); ??
  28. ????????????Vector?OutFoc?=?CommonTools.LoadXML(path?+?"\\FOC\\heweiya1.xml"); ??
  29. ????????????request.setAttribute("OutFoc",?OutFoc); ??
  30. ????????????if?(request.getParameter("as")?!=?null)?{ ??
  31. ????????????????return?mapping.findForward("Foc1"); ??
  32. ????????????} ??
  33. ????????????return?mapping.findForward("Foc"); ??
  34. ????????}?catch?(Exception?e)?{ ??
  35. ????????????/** ?
  36. ?????????????*?服务有异常,或者服务没有启动! ?
  37. ?????????????*/??
  38. ????????????request.setAttribute("UserMsg",?"Public.FocError"); ??
  39. ????????????return?mapping.findForward("Fail"); ??
  40. ????????}??

  

  1. package?com.travelsky.kams.front.foc.webservices; ??
  2. ??
  3. public?class?FocBean?implements?java.io.Serializable{ ??
  4. ??
  5. ????private?String?acown;//航班1 ??
  6. ????private?String?fltid;//航班2 ??
  7. ????private?String?datop;//查询日期 ??
  8. ????private?String?std; ??
  9. ????private?String?sta; ??
  10. ????private?String?etd;// ??
  11. ????private?String?eta;// ??
  12. ????private?String?atd; ??
  13. ????private?String?toff;//滑出时间 ??
  14. ????private?String?tdwn;//滑到位时间 ??
  15. ????private?String?ata;//飞行状态 ??
  16. ????private?String?actyp;//机型 ??
  17. ????private?String?depstn;//起始机场 ??
  18. ????private?String?arrstn;//到达机场 ??
  19. ????private?String?plnid;//机号 ??
  20. ????/**?default?constructor?*/??
  21. ????public?FocBean()?{ ??
  22. ????} ??
  23. ??? ??
  24. ????public?String?getAcown()?{ ??
  25. ????????return?this.acown; ??
  26. ????} ??
  27. ???? ??
  28. ????public?void?setAcown(String?acown)?{ ??
  29. ????????this.acown?=?acown; ??
  30. ????} ??
  31. ????public?String?getDatop()?{ ??
  32. ????????return?this.datop; ??
  33. ????} ??
  34. ???? ??
  35. ????public?void?setDatop(String?datop)?{ ??
  36. ????????this.datop?=?datop; ??
  37. ????}??? ??
  38. ???? ??
  39. ???? ??
  40. ????public?String?getFltid()?{ ??
  41. ????????return?this.fltid; ??
  42. ????} ??
  43. ???? ??
  44. ????public?void?setFltid(String?fltid)?{ ??
  45. ????????this.fltid?=?fltid; ??
  46. ????} ??
  47. ????public?String?getStd()?{ ??
  48. ????????return?this.std; ??
  49. ????} ??
  50. ???? ??
  51. ????public?void?setStd(String?std)?{ ??
  52. ????????this.std?=?std; ??
  53. ????} ??
  54. ????public?String?getSta()?{ ??
  55. ????????return?this.sta; ??
  56. ????} ??
  57. ???? ??
  58. ????public?void?setSta(String?sta)?{ ??
  59. ????????this.sta?=?sta; ??
  60. ????} ??
  61. ????public?String?getEtd()?{ ??
  62. ????????return?this.etd; ??
  63. ????} ??
  64. ???? ??
  65. ????public?void?setEtd(String?etd)?{ ??
  66. ????????this.etd?=?etd; ??
  67. ????} ??
  68. ????public?String?getEta()?{ ??
  69. ????????return?this.eta; ??
  70. ????} ??
  71. ???? ??
  72. ????public?void?setEta(String?eta)?{ ??
  73. ????????this.eta?=?eta; ??
  74. ????} ??
  75. ????public?String?getAtd()?{ ??
  76. ????????return?this.atd; ??
  77. ????} ??
  78. ???? ??
  79. ????public?void?setAtd(String?atd)?{ ??
  80. ????????this.atd?=?atd; ??
  81. ????} ??
  82. ????public?String?getToff()?{ ??
  83. ????????return?this.toff; ??
  84. ????} ??
  85. ???? ??
  86. ????public?void?setToff(String?toff)?{ ??
  87. ????????this.toff?=?toff; ??
  88. ????} ??
  89. ????public?String?getTdwn()?{ ??
  90. ????????return?this.tdwn; ??
  91. ????} ??
  92. ???? ??
  93. ????public?void?setTdwn(String?tdwn)?{ ??
  94. ????????this.tdwn?=?tdwn; ??
  95. ????} ??
  96. ????public?String?getAta()?{ ??
  97. ????????return?this.ata; ??
  98. ????} ??
  99. ???? ??
  100. ????public?void?setAta(String?ata)?{ ??
  101. ????????this.ata?=?ata; ??
  102. ????} ??
  103. ????public?String?getActyp()?{ ??
  104. ????????return?this.actyp; ??
  105. ????} ??
  106. ???? ??
  107. ????public?void?setActyp(String?actyp)?{ ??
  108. ????????this.actyp?=?actyp; ??
  109. ????} ??
  110. ????public?String?getDepstn()?{ ??
  111. ????????return?this.depstn; ??
  112. ????} ??
  113. ???? ??
  114. ????public?void?setDepstn(String?depstn)?{ ??
  115. ????????this.depstn?=?depstn; ??
  116. ????} ??
  117. ????public?String?getArrstn()?{ ??
  118. ????????return?this.arrstn; ??
  119. ????} ??
  120. ???? ??
  121. ????public?void?setArrstn(String?arrstn)?{ ??
  122. ????????this.arrstn?=?arrstn; ??
  123. ????} ??
  124. ????public?String?getPlnid()?{ ??
  125. ????????return?this.plnid; ??
  126. ????} ??
  127. ???? ??
  128. ????public?void?setPlnid(String?plnid)?{ ??
  129. ????????this.plnid?=?plnid; ??
  130. ????} ??
  131. ??
  132. } ??

?????????????????????????????? 如下是解析XML文件变换成一个序列化的对象的JAVA代码:(其中Vecto就相关于安全的LIST了)

  1. /** ?
  2. ?????*?读取XML文件所有信息 ?
  3. ?????*/??
  4. ????public?static?Vector?LoadXML(String?path)?throws?Exception?{ ??
  5. ????????Vector?xmlVector?=?null; ??
  6. ????????FileInputStream?fi?=?null; ??
  7. ????????try?{ ??
  8. ????????????fi?=?new?FileInputStream(path); ??
  9. ????????????xmlVector?=?new?Vector(); ??
  10. ????????????SAXBuilder?sb?=?new?SAXBuilder(); ??
  11. ????????????Document?doc?=?sb.build(fi); ??
  12. ????????????Element?root?=?doc.getRootElement();?//?得到根元素 ??
  13. ????????????List?focs?=?root.getChildren();?//?得到根元素所有子元素的集合 ??
  14. ????????????Element?foc?=?null; ??
  15. ????????????FocBean?xml?=?null; ??
  16. ????????????/** ?
  17. ?????????????*?从1开始,因为0为错误警告信息 ?
  18. ?????????????*/??
  19. ????????????for?(int?i?=?1;?i?<?focs.size();?i++)?{ ??
  20. ????????????????xml?=?new?FocBean(); ??
  21. ????????????????foc?=?(Element)?focs.get(i);?//?得到第一本书元素 ??
  22. /*??????????????xml.setAta(foc.getChild("ATA").getText()); ?
  23. ????????????????xml.setAtd(foc.getChild("ATD").getText()); ?
  24. ????????????????xml.setEta(foc.getChild("ETA").getText()); ?
  25. ????????????????xml.setEtd(foc.getChild("ETD").getText()); ?
  26. ????????????????xml.setFltid(foc.getChild("FLTID").getText()); ?
  27. ????????????????xml.setSta(foc.getChild("STA").getText()); ?
  28. ????????????????xml.setStd(foc.getChild("STD").getText()); ?
  29. ????????????????xml.setTdwn(foc.getChild("TDWN").getText()); ?
  30. ????????????????xml.setToff(foc.getChild("TOFF").getText());*/??
  31. ????????????????/** ?
  32. ?????????????????*?如下是最新版本的取得实体对象的方法 ?
  33. ?????????????????*?modify?by?heweiya?2006-12-14 ?
  34. ?????????????????*/??
  35. ????????????????xml.setAta(foc.getChild("ATA").getText()); ??
  36. ????????????????xml.setAtd(foc.getChild("ATD").getText()); ??
  37. ????????????????xml.setEta(foc.getChild("ETA").getText()); ??
  38. ????????????????xml.setEtd(foc.getChild("ETD").getText()); ??
  39. ????????????????xml.setFltid(foc.getChild("FLTID").getText()); ??
  40. ????????????????xml.setSta(foc.getChild("STA").getText()); ??
  41. ????????????????xml.setStd(foc.getChild("STD").getText()); ??
  42. ????????????????xml.setTdwn(foc.getChild("TDWN").getText()); ??
  43. ????????????????xml.setToff(foc.getChild("TOFF").getText()); ??
  44. ????????????????xml.setAcown(foc.getChild("ACOWN").getText()); ??
  45. ????????????????xml.setActyp(foc.getChild("ACTYP").getText()); ??
  46. ????????????????xml.setArrstn(foc.getChild("ARRSTN").getText()); ??
  47. ????????????????xml.setDatop(foc.getChild("DATOP").getText()); ??
  48. ????????????????xml.setDepstn(foc.getChild("DEPSTN").getText()); ??
  49. ????????????????xml.setPlnid(foc.getChild("Plnid").getText()); ??
  50. ???????????????? ??
  51. ????????????????xmlVector.add(xml); ??
  52. ????????????} ??
  53. ????????}?catch?(Exception?e)?{ ??
  54. ????????????System.err.println(e?+?"error"); ??
  55. ????????}?finally?{ ??
  56. ????????????try?{ ??
  57. ????????????????fi.close(); ??
  58. ????????????}?catch?(Exception?e)?{ ??
  59. ????????????????e.printStackTrace(); ??
  60. ????????????} ??
  61. ????????} ??
  62. ????????return?xmlVector; ??
  63. ????}??

??????????还有一个代码如下:
???????????

java 代码
  1. //?把String?保存为文件 ??
  2. ????public?static?void?saveXMLString(String?XMLString,?String?fileName) ??
  3. ????????????throws?IOException?{ ??
  4. ????????File?file?=?new?File(fileName); ??
  5. ????????if?(file.exists())?{ ??
  6. ????????????file.delete(); ??
  7. ????????} ??
  8. ????????file.createNewFile(); ??
  9. ????????if?(file.canWrite())?{ ??
  10. ????????????FileWriter?fileOut?=?new?FileWriter(file); ??
  11. ????????????fileOut.write(XMLString); ??
  12. ????????????fileOut.close(); ??
  13. ????????} ??
  14. ????}??

???????????以上所述是作者调试通过。使用STRUTS做为前台,然后输出就可以了。本文章只讨论技术问题,示例当中的代码
只做为研究学习使用,并无它意。

      另外个人意见:我在外包公司工作,很累。几乎没有学习新东西的时间,希望有远大志向的人或者想追赶技术潮流的人不要应聘这类公司。 

1 楼 xly_971223 2006-12-14 国内公司都差不多,非外包公司也不一定能学到东西 2 楼 liusu 2006-12-30 我按照你的方法成功实现了调用,万分感谢! 3 楼 ray_linn 2006-12-30 这个字强~ 看了半天不知道怎么打出来的 4 楼 kiss.988 2007-03-11 好方法,值得我去认真思考一番。

读书人网 >Web前端

热点推荐