亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

使用java解析Infor XA ERP SystemLink請求響應報文

2024-06-28 16:03:53
字體:
來源:轉載
供稿:網友

    Infor XA ERP的SystemLink響應報文是一段比較復雜的xml,里面記錄了操作是否成功的狀態以及操作結果或者錯誤說明。

   對SystemLink解析,就是從響應的xml報文里面解析出操作結果狀態,如果操作失敗,則提取錯誤消息。因為Infor XA ERP的SystemLink請求分為事務請求、非事務請求,所以解析也有一點點不同,具體細節這里不再說明。直接上代碼,看我是如何用java代碼解析報文的

解析抽象類:

package cn.markwins.yinfor.utils.xml;import java.util.List;import org.xml.sax.helpers.DefaultHandler;import cn.markwins.yinfor.utils.vo.systemlink.SystemLinkMessage;public abstract class SystemLinkStockDefaultHandler extends DefaultHandler{	/* 返回的消息  */	PRotected SystemLinkMessage systemLinkMessage = null;	protected List<String> systemLinkExceptionList = null;	public SystemLinkMessage getSystemLinkMessage() {		return systemLinkMessage;	}		protected String preTagName = null;}

解析非事務類型的SystemLink報文:
package cn.markwins.yinfor.utils.xml;import java.util.ArrayList;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import cn.markwins.yinfor.utils.common.StringTools;import cn.markwins.yinfor.utils.vo.systemlink.SystemLinkMessage;/** * @Description 無事務控制單一的SystemLink響應報文xml解析器 * @author 李yi輝 * @date 2016年7月5日 */public class SystemLinkTransactionNHandler extends SystemLinkStockDefaultHandler {	private boolean messageTypeError = false;	private boolean responseTag = false;	private boolean exceptionTag = false;	private boolean messageTag = false;	private int errMsgIndex = 0;		@Override	public void startDocument() throws SAXException {		systemLinkMessage = new SystemLinkMessage();		systemLinkExceptionList = new ArrayList<>();		systemLinkMessage.setStatus(true);	}		@Override	public void startElement(String uri, String localName, String qName,			Attributes attributes) throws SAXException {		if(qName.matches("[A-Za-z0-9]+Response$")){			responseTag = true;			if("LoginResponse".equals(qName)){				if("false".equals(attributes.getValue("actionSucceeded"))){					systemLinkMessage.setStatus(false);				}			}					}else{			switch (qName) {			case "Exception":				exceptionTag = true;				errMsgIndex = 0;				break;			case "Response":				if("true".equals(attributes.getValue("hasErrors"))){					systemLinkMessage.setStatus(false);				}				break;			case "Message":				messageTag = true;				if("error".equals(attributes.getValue("type"))){					messageTypeError = true;					++errMsgIndex;				}				break;			default:				break;			}		}				this.preTagName = qName;	}		@Override	public void characters(char[] ch, int start, int length)			throws SAXException {		//異常信息節點		if(messageTypeError && messageTag && exceptionTag && "Text".equals(this.preTagName)){			String text = null;			if(!responseTag){	//還沒進入任何Response就出現異常信息,則表示SystemLink服務器異常,處理失敗				systemLinkMessage.setStatus(false);			}			if(!systemLinkMessage.getStatus()){				text = new String(ch, start, length);			}			if(!StringTools.isNullOrWhiteSpace(text)){//				if(systemLinkExceptionList.isEmpty()){	//只取最后一個error類型的消息響應//					systemLinkExceptionList.add(text);//				}else{//					systemLinkExceptionList.set(0, text);//				}				if(errMsgIndex == 2 && systemLinkExceptionList.size() < 2){	//如果有2個或2個以上的錯誤,則第一個錯誤肯定是泛泛總結描述有錯誤					systemLinkExceptionList.set(0, text);				}else{					//其它情況,則是具體的錯誤信息					systemLinkExceptionList.add(text);				}			}		}	}	@Override	public void endElement(String uri, String localName, String qName)			throws SAXException {		if(qName.matches("[A-Za-z0-9]+Response$")){			responseTag = false;		}else{			switch (qName) {			case "Message":				messageTag = false;				messageTypeError = false;				break;			case "Exception":				exceptionTag = false;				break;			default:				break;			}		}				this.preTagName = null;	}		@Override	public void endDocument() throws SAXException {		if(!systemLinkMessage.getStatus()){			systemLinkMessage.setSystemLinkExceptionList(systemLinkExceptionList);		}	}}

解析事務類型的SystemLink響應報文:

package cn.markwins.yinfor.utils.xml;import java.util.ArrayList;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import cn.markwins.yinfor.utils.common.StringTools;import cn.markwins.yinfor.utils.vo.systemlink.SystemLinkMessage;/** * @Description 事務控制的SystemLink響應報文xml解析器 * @author 李yi輝 * @date 2016年7月5日 */public class SystemLinkTransactionYHandler extends SystemLinkStockDefaultHandler {	private boolean messageTypeError = false;	private boolean responseTag = false;	private boolean exceptionTag = false;	private boolean messageTag = false;	private int errMsgIndex = 0;	private String responseName = null;	private Integer txReqIndex = null;		@Override	public void startDocument() throws SAXException {		systemLinkMessage = new SystemLinkMessage();		systemLinkExceptionList = new ArrayList<>();		systemLinkMessage.setStatus(true);	}		@Override	public void startElement(String uri, String localName, String qName,			Attributes attributes) throws SAXException {		if(qName.matches("[A-Za-z0-9]+Response$")){			responseTag = true;			if("LoginResponse".equals(qName)){				if("false".equals(attributes.getValue("actionSucceeded"))){					systemLinkMessage.setStatus(false);				}			}else{				responseName = attributes.getValue("name");				if(!StringTools.isNullOrWhiteSpace(responseName)){					int dashIndex = responseName.lastIndexOf('_');					if(dashIndex > 1){						txReqIndex = Integer.valueOf(responseName.substring(dashIndex + 1, responseName.length()));					}				}			}		}else{			switch (qName) {			case "Exception":				exceptionTag = true;				errMsgIndex = 0;				break;			case "Response":				if("true".equals(attributes.getValue("hasErrors"))){					systemLinkMessage.setStatus(false);				}				break;			case "Message":				messageTag = true;				if("error".equals(attributes.getValue("type"))){					messageTypeError = true;					++errMsgIndex;				}				break;			default:				break;			}		}				this.preTagName = qName;	}		@Override	public void characters(char[] ch, int start, int length)			throws SAXException {		//異常信息節點		if(messageTypeError && messageTag && exceptionTag && "Text".equals(this.preTagName)){			String text = null;			//還沒進入任何Response就出現異常信息,則表示SystemLink服務器異常,處理失敗			if(!responseTag){				systemLinkMessage.setStatus(false);			}			//systemLink響應錯誤消息			if(!systemLinkMessage.getStatus()){				text = new String(ch, start, length);			}			if(!StringTools.isNullOrWhiteSpace(text)){				if(errMsgIndex == 2 && systemLinkExceptionList.size() < 2){	//如果有2個或2個以上的錯誤,則第一個錯誤肯定是泛泛總結描述有錯誤					systemLinkExceptionList.set(0, text);				}else{					//其它情況,則是具體的錯誤信息					if(txReqIndex != null && txReqIndex > 0){						text = txReqIndex + ":" + text;					}					systemLinkExceptionList.add(text);				}			}		}	}	@Override	public void endElement(String uri, String localName, String qName)			throws SAXException {		if(qName.matches("[A-Za-z0-9]+Response$")){			responseTag = false;			responseName = null;			txReqIndex = null;		}else{			switch (qName) {			case "Message":				messageTag = false;				messageTypeError = false;				break;			case "Exception":				exceptionTag = false;				break;			default:				break;			}		}				this.preTagName = null;	}		@Override	public void endDocument() throws SAXException {		if(!systemLinkMessage.getStatus()){			systemLinkMessage.setSystemLinkExceptionList(systemLinkExceptionList);		}	}}

最后這個就是通用調用入口的工具類:

package cn.markwins.yinfor.utils.xml;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.apache.log4j.Logger;import cn.markwins.yinfor.utils.common.StreamTools;import cn.markwins.yinfor.utils.common.StringTools;import cn.markwins.yinfor.utils.vo.systemlink.SystemLinkMessage;/** * @Description SystemLink響應消息解析器 * @author 李yi輝 * @date 2016年7月6日 */public class SystemLinkRespMessageTools {		private static Logger logger = Logger.getLogger(SystemLinkRespMessageTools.class);		/**	 * @Description 解析systemLink消息響應	 * @param systemLinkRespXML systemLink的xml響應消息	 * @param transactionFlag 解析方式	 * 							true:事務類型systemLink xml響應	 * 							false:非事務類型systemLink xml響應	 * @return SystemLinkMessage 解析后的消息封裝	 */	public static SystemLinkMessage parseStockSystemLinkRespXML(String systemLinkRespXML, boolean transactionFlag) {		SystemLinkMessage systemLinkMessage = new SystemLinkMessage();		systemLinkMessage.setStatus(false);		List<String> systemLinkExceptionList = new ArrayList<>();				//長時間無響應		if(StringTools.isNullOrWhiteSpace(systemLinkRespXML)){			systemLinkExceptionList.add("XA系統長時間無響應,請于Infor XA系統檢查是否已過賬,并反饋系統管理員");			systemLinkMessage.setSystemLinkExceptionList(systemLinkExceptionList);			logger.error("Infor XA SystemLink 長時間無響應,無響應報文");			return systemLinkMessage;		}				//響應報文非標準化的xml,sax無法解析,特殊處理		/*1、com.pjx.xsaa.entry.ServerNotFoundException*/		if(systemLinkRespXML.contains("com.pjx.xsaa.entry.ServerNotFoundException")){			systemLinkExceptionList.add("過賬失敗,Infor XA SystemLink Server未開啟,請反饋系統管理員");			systemLinkMessage.setSystemLinkExceptionList(systemLinkExceptionList);			return systemLinkMessage;		}				//解析報文		try {			SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();			SAXParser saxParser = saxParserFactory.newSAXParser();			SystemLinkStockDefaultHandler handler = null;						if(transactionFlag){				handler = new SystemLinkTransactionYHandler();	//開啟systemLink事務的解析器			}else{				handler = new SystemLinkTransactionNHandler();	//沒啟SystemLink事務的解析器			}						saxParser.parse(StreamTools.getInputStreamFromString(systemLinkRespXML), handler);			SystemLinkMessage systemLinkMessageParsed = handler.getSystemLinkMessage();			if(systemLinkMessageParsed == null || systemLinkMessageParsed.getStatus() == null){				systemLinkExceptionList.add("系統異常,請于XA ERP檢查是否已過賬,并反饋系統管理員");				systemLinkMessage.setSystemLinkExceptionList(systemLinkExceptionList);				logger.error("SystemLink消息解析異常,無法提取解析狀態");				return systemLinkMessage;			}						systemLinkMessage.setStatus(systemLinkMessageParsed.getStatus());			systemLinkMessage.setSystemLinkExceptionList(systemLinkMessageParsed.getSystemLinkExceptionList());		} catch (Exception e) {			systemLinkMessage.setStatus(false);			systemLinkExceptionList.add("系統異常,請于XA ERP檢查是否已過賬,并反饋系統管理員");			systemLinkMessage.setSystemLinkExceptionList(systemLinkExceptionList);			logger.error("系統異常,請于Infor XA系統檢查是否已過賬,并反饋系統管理員--SystemLink消息解析異常", e);		} 				return systemLinkMessage;	}}

http://blog.csdn.net/yihuiworld


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产美女久久精品| 美女av一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看| 欧美一乱一性一交一视频| 亚洲人成网7777777国产| 日韩av免费看| 亚洲精品一区二区三区不| 国产精品va在线播放| 中文字幕精品在线视频| 亚洲精品按摩视频| 国产精品爽爽爽爽爽爽在线观看| 亚洲网站在线播放| 91av网站在线播放| 国产精品久久久久久久久借妻| 欧美成人黑人xx视频免费观看| 精品日韩视频在线观看| 亚洲毛片在线观看.| 久久久精品视频成人| 欧美另类极品videosbest最新版本| 国产日韩精品综合网站| 欧美性高潮床叫视频| 庆余年2免费日韩剧观看大牛| 欧美黑人极品猛少妇色xxxxx| 欧美中文在线视频| 欧美黑人一区二区三区| 精品亚洲国产成av人片传媒| 91香蕉嫩草影院入口| 4444欧美成人kkkk| 欧美激情精品久久久| 国产不卡一区二区在线播放| 成人a在线视频| 欧美激情综合色| 国产欧美一区二区三区在线| 亚洲国产小视频| 欧美亚洲在线视频| 中文字幕日韩视频| 亚洲性日韩精品一区二区| 色综合久综合久久综合久鬼88| 91久久在线观看| 欧美性极品xxxx娇小| 国产极品精品在线观看| 中文字幕亚洲情99在线| 5566成人精品视频免费| 久久99精品国产99久久6尤物| 成人疯狂猛交xxx| 色综合91久久精品中文字幕| 午夜精品久久久久久久久久久久久| 日韩大片免费观看视频播放| 国产亚洲人成网站在线观看| 色一情一乱一区二区| 欧美中在线观看| 欧美激情成人在线视频| 欧美激情中文网| 欧美理论电影在线播放| 黄网站色欧美视频| 国产激情久久久久| 亚洲黄色av女优在线观看| 日韩精品久久久久| 欧美激情日韩图片| 国产综合香蕉五月婷在线| 欧美激情精品久久久久| 国产亚洲在线播放| 欧美多人乱p欧美4p久久| 国产精品日韩在线一区| 欧美日韩黄色大片| 亚洲成人久久电影| 亚洲国产成人精品久久久国产成人一区| 欧美亚洲视频一区二区| 欧美亚洲国产另类| 91久久久久久久一区二区| 亚洲视频专区在线| 综合136福利视频在线| 91情侣偷在线精品国产| 国产精品自产拍在线观| 欧美激情三级免费| 国产成人精品免费久久久久| 欧美日韩视频在线| 欧洲美女免费图片一区| 亚洲少妇中文在线| 57pao国产精品一区| 8x拔播拔播x8国产精品| 亚洲毛片在线免费观看| 色香阁99久久精品久久久| 欧美一区二区三区免费观看| 国产中文字幕91| 91亚洲午夜在线| 91av视频在线| 中文字幕少妇一区二区三区| 亚洲精品日韩激情在线电影| 成人性生交大片免费看小说| 亚洲精品久久久一区二区三区| 国产91精品在线播放| 亚洲黄色免费三级| 中文字幕日韩精品有码视频| 日韩视频在线免费观看| 国a精品视频大全| 久久久综合av| 国产日韩精品入口| 欧美性极品少妇精品网站| 精品一区二区三区四区在线| 日韩成人av在线| 亚洲欧洲国产伦综合| 欧美在线视频a| 亚洲美女在线视频| 亚洲女性裸体视频| 日本不卡视频在线播放| 亚洲电影成人av99爱色| 国产精品第一视频| 92国产精品视频| 亚洲人成电影网站| 国精产品一区一区三区有限在线| 狠狠躁夜夜躁久久躁别揉| 久久精品成人欧美大片| 欧美成人免费小视频| 久久久久久久久久久免费| 海角国产乱辈乱精品视频| 亚洲国产91精品在线观看| 国产啪精品视频网站| 欧美精品久久久久久久免费观看| 欧美贵妇videos办公室| 在线日韩日本国产亚洲| 国内精品久久久久影院优| 亚洲欧美成人在线| 尤物yw午夜国产精品视频| 92国产精品久久久久首页| 国产女人精品视频| 亚洲欧美在线免费观看| 成人国产精品免费视频| 亚洲国产精品专区久久| 日韩成人激情在线| 日韩大胆人体377p| 欧美高清不卡在线| 久久伊人91精品综合网站| 亚洲欧美日韩一区二区三区在线| 欧美孕妇毛茸茸xxxx| 一区二区三区回区在观看免费视频| 日韩美女免费线视频| 欧美日韩综合视频网址| 国产欧美一区二区三区久久人妖| 日韩专区中文字幕| 最近2019中文字幕第三页视频| 成人免费观看49www在线观看| 欧美成人免费小视频| 国产一级揄自揄精品视频| 亚洲老司机av| 日韩精品免费在线观看| 日韩av中文字幕在线播放| 亚洲free性xxxx护士hd| 国产欧美精品一区二区三区介绍| 欧美午夜激情在线| 日本精品视频在线| 国产97在线|日韩| 亚洲美女精品成人在线视频| 亚洲三级av在线| 国产亚洲欧美aaaa| 久久久这里只有精品视频| 欧美性生交xxxxx久久久| 亚洲天堂av高清| 热门国产精品亚洲第一区在线| 欧美大片欧美激情性色a∨久久| 欧美一级电影免费在线观看| 97超碰蝌蚪网人人做人人爽| 久久好看免费视频| 欧美性猛交xxxx乱大交|