不用任何框架开发web service

很讨厌webservice框架配置的繁琐
尤其是axis系列
一怒之下直接用servlet开发了
其实也很简单,关键是要获取到请求soap和响应soap,可借助soapUI来生成
soapUI的使用这里不做介绍

生成请求soap和响应soap后关键就是解析soap了
直接用的java提供的API来解析
解析请求Soap
代码如下:

Java代码 技术分享 技术分享技术分享

  1. public class SyncNotifySPReqDecoder {  

  2.     private static Logger logger = LoggerFactory.getLogger(SyncNotifySPReqDecoder.class);  

  3.       

  4.     public static SyncNotifySPReq decode(InputStream in){  

  5.         DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();  

  6.         String recordSequenceId = "0";  

  7.         List<YingZhangReceiptBody> itemList = new ArrayList<YingZhangReceiptBody>();  

  8.           

  9.         try {  

  10.             DocumentBuilder dombuilder=domfac.newDocumentBuilder();  

  11.             Document doc=dombuilder.parse(in);  

  12.               

  13.             Element root=doc.getDocumentElement();  

  14.               

  15.             //解析recordSequenceId  

  16.             NodeList recordSequenceIdNodeList = root.getElementsByTagName("recordSequenceId");  

  17.             if(recordSequenceIdNodeList.getLength() >= 1){  

  18.                 recordSequenceId = recordSequenceIdNodeList.item(0).getTextContent();  

  19.             }  

  20.   

  21.               

  22.             //解析item  

  23.             NodeList itemNodeList = root.getElementsByTagName("item");  

  24.               

  25.             for (int i = 0; i < itemNodeList.getLength(); i++) {  

  26.                 Node item = itemNodeList.item(i);  

  27.                   

  28.                 String userIdType = getNodeValue(item, "userIdType");  

  29.                 String userId = getNodeValue(item, "userId");  

  30.                 String sp_productId = getNodeValue(item, "sp_productId");  

  31.                 String updateType = getNodeValue(item, "updateType");  

  32.                   

  33.                 //UserIdType填1 为手机号码 ; UserIdType填2 为伪码  

  34.                 if"1".equals(userIdType) ){  

  35.                     YingZhangReceiptBody body = new YingZhangReceiptBody(remove86(userId), sp_productId, escapeServiceCode(updateType));  

  36.                     itemList.add(body);  

  37.                 }  

  38.             }  

  39.               

  40.         } catch (Exception e) {  

  41.             logger.error(e.getMessage(), e);  

  42.         }  

  43.           

  44.         return new SyncNotifySPReq(recordSequenceId, itemList);  

  45.     }  

  46.       

  47.       

  48.   

  49.       

  50.     //获取Node Value  

  51.     public static String getNodeValue(Node item, String nodeName){  

  52.         for(Node n=item.getFirstChild(); n != null; n=n.getNextSibling()){  

  53.             if(n.getNodeType() == Node.ELEMENT_NODE){  

  54.                 if(n.getNodeName().equals(nodeName)){  

  55.                     return n.getTextContent();  

  56.                 }  

  57.             }  

  58.         }  

  59.           

  60.         return null;  

  61.     }  

  62. }  

public class SyncNotifySPReqDecoder {
	private static Logger logger = LoggerFactory.getLogger(SyncNotifySPReqDecoder.class);
	
	public static SyncNotifySPReq decode(InputStream in){
		DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
		String recordSequenceId = "0";
		List<YingZhangReceiptBody> itemList = new ArrayList<YingZhangReceiptBody>();
		
		try {
			DocumentBuilder dombuilder=domfac.newDocumentBuilder();
			Document doc=dombuilder.parse(in);
			
			Element root=doc.getDocumentElement();
			
			//解析recordSequenceId
			NodeList recordSequenceIdNodeList = root.getElementsByTagName("recordSequenceId");
			if(recordSequenceIdNodeList.getLength() >= 1){
				recordSequenceId = recordSequenceIdNodeList.item(0).getTextContent();
			}

			
			//解析item
			NodeList itemNodeList = root.getElementsByTagName("item");
			
			for (int i = 0; i < itemNodeList.getLength(); i++) {
				Node item = itemNodeList.item(i);
				
				String userIdType = getNodeValue(item, "userIdType");
				String userId = getNodeValue(item, "userId");
				String sp_productId = getNodeValue(item, "sp_productId");
				String updateType = getNodeValue(item, "updateType");
				
				//UserIdType填1 为手机号码 ; UserIdType填2 为伪码
				if( "1".equals(userIdType) ){
					YingZhangReceiptBody body = new YingZhangReceiptBody(remove86(userId), sp_productId, escapeServiceCode(updateType));
					itemList.add(body);
				}
			}
			
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		
		return new SyncNotifySPReq(recordSequenceId, itemList);
	}
	
	

	
	//获取Node Value
	public static String getNodeValue(Node item, String nodeName){
		for(Node n=item.getFirstChild(); n != null; n=n.getNextSibling()){
			if(n.getNodeType() == Node.ELEMENT_NODE){
				if(n.getNodeName().equals(nodeName)){
					return n.getTextContent();
				}
			}
		}
		
		return null;
	}
}


写响应SOAP

Java代码 技术分享 技术分享技术分享

  1. public class SyncNotifySPResEncoder {  

  2.       

  3.     /** 

  4.      * 返回soap响应 

  5.      * @param recordSequenceId 

  6.      * @param resultCode 0: 成功; 1. 失败 

  7.   

  8.      */  

  9.     public static String encode(String recordSequenceId, int resultCode){  

  10.         StringBuilder ret = new StringBuilder("<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:soap=\"http://soap.bossagent.vac.unicom.com\">");  

  11.         ret.append("<soapenv:Header/>")  

  12.             .append("<soapenv:Body>")  

  13.             .append("<soap:orderRelationUpdateNotifyResponse soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">")  

  14.             .append("<orderRelationUpdateNotifyReturn xsi:type=\"rsp:OrderRelationUpdateNotifyResponse\" xmlns:rsp=\"http://rsp.sync.soap.bossagent.vac.unicom.com\">")  

  15.             .append("<recordSequenceId xsi:type=\"soapenc:string\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">")  

  16.             .append(recordSequenceId)  

  17.             .append("</recordSequenceId>")  

  18.             .append("<resultCode xsi:type=\"xsd:int\">")  

  19.             .append(resultCode)  

  20.             .append("</resultCode>")  

  21.             .append("</orderRelationUpdateNotifyReturn>")  

  22.             .append("</soap:orderRelationUpdateNotifyResponse>")  

  23.             .append("</soapenv:Body>")  

  24.             .append("</soapenv:Envelope>");  

  25.           

  26.         return ret.toString();  

  27.     }  

  28.       

  29. }  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。