跨平台获取外部系统的数据解析成json并传输到前台展示成列表
最近在做项目的过程中,做过这样一个功能,通过soap协议跨平台获取外部系统文件柜的信息,并将所需要的字段解析出来传输至前台页面上展示成列表的形式。说实话,做了这么多的soap协议项目,做过编写PC服务端webservice服务并将服务提供给外部系统移动端APP调用、当然也给自己做的app调用。做过三方接口相互调用桥接的服务,中间穿插中间件总线服务,将网闸打通,实现内外网服务互通;做过客户端调用服务端接口实现数据传输的服务。诸如此类的项目都是基于webservice服务发布及调用。当然也做过http服务的发布,http服务的发布则涉及到struts配置文件将发布的服务映射到发布服务的地址上,通过外部系统调用的方式,把json数据传输给外部系统。现在这个项目中则与之前的大不一样,虽然看上去是接收服务作为客户端将数据解析。但这个对于数据的实时性要求比较高,且打通自己前台跟后台数据的传输,这其实也是一种http的服务。以下是代码部分:
package com.strongit.oa.filebox;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import net.sf.json.JSONArray;
import org.apache.axis.Constants;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.struts2.config.ParentPackage;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.apache.struts2.dispatcher.ServletActionRedirectResult;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import com.strongit.oa.common.user.IUserService;
import com.strongit.oa.common.user.model.Organization;
import com.strongmvc.webapp.action.BaseActionSupport;
/**
* @desc 获取取件箱信息action类
* @author lanyq
*
*/
@SuppressWarnings("unchecked")
@ParentPackage("default")
@Results( { @Result(name = BaseActionSupport.RELOAD, value = "filebox.action", type = ServletActionRedirectResult.class) })
public class FileBoxAction extends BaseActionSupport{
private IUserService userService;
@Autowired
public void setUserService(IUserService userService) {
this.userService = userService;
}
public IUserService getUserService() {
return userService;
}
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @desc 获取待取件列表
*
*/
public String getToDoFileBoxList() throws Exception{
List<String> lst=new ArrayList<String>();
JSONArray json=new JSONArray();
//获取当前用户所在机构单位的名称
String curOrg="";
List<Organization> list=userService.getCurrentUserOrgAndDept();
if(list!=null&&list.size()>0){
curOrg=list.get(0).toString();
}
//创建XML文档对象
Document xmlDoc = DocumentHelper.createDocument();
xmlDoc.setXMLEncoding("utf-8");
//创建根元素节点
Element rootElement = xmlDoc.addElement("GetFileBoxs");
//创建根元素节点下的子节点,设置节点值
Element element1 = rootElement.addElement("DeptList");
Element element2 = element1.addElement("DeptName");
element2.addText(curOrg);
String xml = xmlDoc.toString();
String url="http://130.14.5.3/efiles/webservice/webserver.asmx";
Service service = new Service();
Call call = null;
try {
call = (Call)service.createCall();
call.setSOAPActionURI("http://www.Htky.com.cn/");
}catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
call.setTargetEndpointAddress(new URL("http://130.14.5.3/efiles/webservice/webserver.asmx"));
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
call.setOperationName(new QName("http://www.Htky.com.cn/","GetFileBoxs"));
//call.setOperationName("GetFileBoxs");
call.setSOAPActionURI("http://www.Htky.com.cn/GetFileBoxs");
call.addParameter(new QName("http://www.Htky.com.cn/","_Xml"), XMLType.SOAP_VECTOR, ParameterMode.IN);
call.setUseSOAPAction(true);
//call.setReturnType(XMLType.SOAP_VECTOR);
call.setEncodingStyle(Constants.NS_URI_XMLSOAP);
Object[] params = new Object[]{xmlDoc.asXML()};
String resultStr = "";
try {
resultStr = (String)call.invoke(params);
// resultStr = (String)call.invoke("http://www.Htky.com.cn/GetFileBoxs", "GetFileBoxs", params);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(resultStr);
if(resultStr!=null){
try {
Document document=DocumentHelper.parseText(resultStr);
List<?> fileboxIdList=document.selectNodes("//*[name()='ns0:FileBoxId'");//投箱ID号
List<?> fileCodeList=document.selectNodes("//*[name()='ns0:FileCode'");//条码编号
List<?> numberIdList=document.selectNodes("//*[name()='ns0:NumberId'");//文件份号
List<?> comeDeptList=document.selectNodes("//*[name()='ns0:ComeDept'");//发文单位
List<?> comeNoList=document.selectNodes("//*[name()='ns0:ComeNo'");//发文文号
List<?> outerFileNoList= document.selectNodes("//*[name()='ns0:OuterFileNo'");//发文文号
List<?> fileNameList=document.selectNodes("//*[name()='ns0:FileName'");//文种或刊名
List<?> fileTitleList=document.selectNodes("//*[name()='ns0:FileTitle'");//文件标题
List<?> fileSecretList=document.selectNodes("//*[name()='ns0:FileSecret'");//密级
List<?> fileEmergList=document.selectNodes("//*[name()='ns0:FileEmerg'");//紧急程度
List<?> remarkList=document.selectNodes("//*[name()='ns0:Remark'");//备注
List<?> sendTimeList=document.selectNodes("//*[name()='ns0:SendTime'");//投箱时间
List<?> alreadyCountList=document.selectNodes("//*[name()='ns0:AlreadyCount'");//份数
for(int a=0;a<fileboxIdList.size();a++){
Element fileboxIdElement=(Element) fileboxIdList.get(a);
lst.add(fileboxIdElement.getText());
Element fileTitleElement=(Element) fileTitleList.get(a);
lst.add(fileTitleElement.getText());
Element fileCodeElement=(Element) fileCodeList.get(a);
lst.add(fileCodeElement.getText());
Element comeDeptElement=(Element) comeDeptList.get(a);
lst.add(comeDeptElement.getText());
Element fileEmergElement=(Element) fileEmergList.get(a);
lst.add(fileEmergElement.getText());
Element alreadyCountElement=(Element) alreadyCountList.get(a);
lst.add(alreadyCountElement.getText());
Element fileSecretElement=(Element) fileSecretList.get(a);
lst.add(fileSecretElement.getText());
Element sendTimeElement=(Element) sendTimeList.get(a);
lst.add(sendTimeElement.getText());
Element remarkElement=(Element) remarkList.get(a);
lst.add(remarkElement.getText());
}
json=JSONArray.fromObject(lst);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return json.toString();
}
以下是调用成功返回的数据:
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://www.Htky.com.cn/">
<NewDataSet>
<Table>
<FileBoxId>33790</FileBoxId>
<FileCode>002010216001433</FileCode>
<NumId>000</NumId>
<ComeDept>省政府办公厅</ComeDept>
<ComeNo>2016 68号</ComeNo>
<OuterFileNo></OuterFileNo>
<FileName></FileName>
<FileTitle>政府办公厅关于印发债务管理办法的通知</FileTitle>
<FileSecret>无</FileSecret>
<FileEmerg>无</FileEmerg>
<Remark></Remark>
<SendTime>2016-10-27 00;00:00</SendTime>
<AlreadyCount>1</AlreadyCount>
</Table>
<Table>
<FileBoxId>33757</FileBoxId>
<FileCode>002010216001432</FileCode>
<NumId>000</NumId>
<ComeDept>省政府办公厅</ComeDept>
<ComeNo>2016 86号</ComeNo>
<OuterFileNo></OuterFileNo>
<FileName></FileName>
<FileTitle>省政府关于表彰参加里约奥运会和残奥会有功人员及单位的决定</FileTitle>
<FileSecret>无</FileSecret>
<FileEmerg>无</FileEmerg>
<Remark></Remark>
<SendTime>2016-10-28 00;00:00</SendTime>
<AlreadyCount>1</AlreadyCount>
</Table>
..............
</string>
拿到这些xml数据,我要一个个字段解析,将我需要的字段展示在前台,不需要的我就不解析。注意:在解析的过程中大家要注意这点,众所周知,dom4j解析数据用的比较多,其中sax解析是在这里面用的比较多的,saxreader解析IO流,解析xml一直是主流的方式解析数据。其中,解析的时候需要构造文档对象,然后把所需要的节点数据解析出来,如上代码所示。
说实话,后台做完解析之后,我有个地方很困惑,json是用list好呢?还是用map的方式好呢?还是将所有解析出来的的属性都通过一个bean的方式封装一次转化成json再传到前台来解析呢?这个问题想了好久。到最后决定使用json list去解析,为什么这样说,因为不管怎么样,bean也好,map也好都是要转成前台能解析的,其实map也可以解析。本人使用list的方式,根据构造的数据去解析字段。
前台通过解析json数据:
以下是我在网上找的一个事例:由于事情没做完,我只能做这么一个设想了,大家可以发挥自己的聪明才智,多评论才是哈。
前台解析的时候bean用easyui-datagrid控件去解析里面的属性。
<script type="text/javascript">
$(function () { //
debugger;
$.ajax({
type: "get",
url: "../App_Code/MaterialInfo.cs",
dataType: "json",
success: function (Json) {
alert(Json);
var obj = eval(Json);
$("#maintable tbody tr").remove();
for (var i = 0; i < obj.length; i++) {
var row = $("#content").clone();
row.find("#ID").text(obj[i].ID);
row.find("#MaterialCode").text(obj[i].MaterialCode); row.find("#MaterialName").text(obj[i].MaterialName);
row.find("#Size").text(obj[i].Size);
row.find("#Unit").text(obj[i].Unit);
row.find("#Type").text(obj[i].Type);
row.find("#Mangent").text(obj[i].Mangent);
row.find("#text").text(obj[i].text);
row.appendTo("#maintable");
}
},
error: function () {
alert("加载失败");
}
})
})
</script>
HTML:
<table id="maintable" class="table" width="100%" layoutH="138">
<thead>
<tr>
<th width="80"></th>
<th width="80">ID</th>
<th width="120">物料编码</th>
<th width="120">物料名称</th>
<th width="100">规格</th>
<th width="150">单位</th>
<th width="80" align="center">类型</th>
<th width="80">生产部门</th>
<th width="80">备注</th>
</tr>
</thead>
<tbody>
<tr id="content" target="sid_user" rel="1">
<td width="80"></td>
<td id="ID" width="80">2</td>
<td id="MaterialCode" width="120">2</td>
<td id="MaterialName" width="120">2</td>
<td id="Size" width="100">2</td>
<td id="Unit" width="150">2</td>
<td id="Type" width="80" align="center">2</td>
<td id="Mangent" width="80">2</td>
<td id="text" width="80">2</td>
</tr>
</tbody>
</table>
使用list去解析如下:
<s:iterator var="ent" value="list">
<s:if test="%{#statu.odd}">
<font color="red"><s:property value="#ent" />
</font>
</s:if>
<s:else>
<s:property value="#ent" />
</s:else>
</s:iterator>
跨平台获取外部系统的数据解析成json并传输到前台展示成列表相关推荐
- python获取当前时间的函数_java/python中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数...
java转换成秒数 Date类有一个getTime()可以换回秒数,例如: public classDateToSecond {public static voidmain(String[] args ...
- 如何获取表格中的数据并以json格式存储?
在开发的过程中,不一定所有数据都是单条存储的,有的时候也会出现将多条数据进行 整合,以另外一种形式存储数据库. 这篇文章介绍的就是将一个表格形式的数据转化成json格式进行存储. 此处给出的实例图如下 ...
- python 爬虫 获取bilibili search搜索数据,返回json格式
话不多说直接上代码 测试用例 : 搜索java为关键词的 时长在60分钟以上的视频 import requests import json import osheaders = {"user ...
- json数据解析,json数据转为java对象
在Android开发过程中,经常需要与后台进行数据的交互,JSON作为一种轻量级的数据格式,经常被 后台作为传输数据的格式,将数据传输到客户端.JSON有两种格式,一种是对象格式的,另一种是数组格式的 ...
- JSON基础与数据解析、JSON方法、AJAX初识
JSON JavaScript Object Notation js对象标记 是对象,是轻量级数据交互的格式,不能有方法 它基于 JavaScript 语法,但与之不同:JavaScript不是JSO ...
- java pdf输出图片_Java PDF转换成图片并输出给前台展示
首先需要导入所需工具类 org.apache.pdfbox fontbox 2.0.1 org.apache.pdfbox pdfbox 2.0.1 cn.hutool hutool-all 4.1. ...
- 从mysql取出数据封装成json中遇到特殊字符自动转成unicode解决方案
@Testpublic void xxx() throws ParseException, UnsupportedEncodingException, Exception {ArrayList< ...
- linux下json数据解析,JSON数据解析 - iOS学习笔记_Linux编程_Linux公社-Linux系统门户网站...
在之前的<iOS学习--xml数据解析(九)>http://www.linuxidc.com/Linux/2014-02/97020p9.htm 介绍了xml数据解析,这一篇简单介绍一下J ...
- iOS - XML 数据解析
前言 @interface NSXMLParser : NSObjectpublic class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mark ...
最新文章
- 【图论】图,实现图(三种方式),二分图 详解
- Ehcache 缓存监控配置
- 广州程序员辞职创业卖菠萝油,放弃30万年薪
- 科技感大屏展示设计,数据可视化设计
- 答题获得思科T-shirt
- 使用Linq时要注意的事项
- java 控件汉字显示方格
- 下载faceScrub人脸数据库(单线程版本)
- JAVA设对话框的位置,setLocation/setBounds皆可
- 5元的小乌龟吃什么_小乌龟吃什么最好?
- JsDroid2开发教程
- 论文阅读: 3D Human Pose Estimation in the Wild by Adversarial Learning
- spark性能优化(二)数据倾斜问题
- Pytorch实现人脸多属性识别
- 五险一金 | 养老保险及其退休金计算
- 百度地图爬虫——小试牛刀
- Google Chrome误删书签的恢复方式!
- CAD图纸如何批量转换JPG格式?
- 五分钟学后端技术:一篇文章告诉你如何学习云计算!
- python 随机森林参数说明
热门文章
- 应用程序逆向分析 有道词典_逆向工程媒体应用程序(并使其中的所有故事免费)...
- 裁员!又裁员!!!功能测试一个组直接裁掉?
- EPLAN元件符号--电机保护开关
- SB1:spring boot简单的使用Idea开发
- Linux中Netlink实现热插拔监控——内核与用户空间通信
- 2021-06-02Leetcode49.字母异位词分组
- dsp广告和信息流广告区别_信息流、DSP、联盟广告、SEM有什么区别?
- 科汛CMS中栏目的顺序调整后栏目错位的解决办法
- 用Docker安装Redmine
- windows软件-----办公效率提高