0
点赞
收藏
分享

微信扫一扫

java 访问webservices 其中一种方式


 内含 map 转xml方法

package com.kingdee.eas.custom.devinterface.purchase;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import sun.misc.BASE64Encoder;

public class CommonUtils {
	 
	 public static  void  purchaseWebservice() throws Exception{
		   final BASE64Encoder encoder = new BASE64Encoder();
		   //1:创建服务地址  
	        URL url = new URL("https://s1.saxxxxxx");  
	        //2:打开到服务地址的一个连接  
	        HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
	        //3:设置连接参数  
	        //3.1设置发送方式:POST必须大写  
	        connection.setRequestMethod("POST");  
	        //3.2设置数据格式:Content-type  
	        connection.setRequestProperty("content-type", "text/xml;charset=utf-8");  
	        //3.3设置输入输出,新创建的connection默认是没有读写权限的,  
	        connection.setDoInput(true);  
	        connection.setDoOutput(true);  
	        
	        //加密
	        String nameAndPassWord="XXXX:gst";
	        final byte[] textByte = nameAndPassWord.getBytes("UTF-8");
	        String encodedText = encoder.encode(textByte);
	    	connection.setRequestProperty("Authorization", "Basic "+encodedText);
	        //4:组织SOAP协议数据,发送给服务端  
	    	
	    	Map<String, Object> dataMap = new LinkedHashMap<String, Object>(); //默认
	    	dataMap.put("urn:ERPReceiptNumber", "rc01");
		     
 	    	ArrayList rowsList = new ArrayList ();
	    	
 	   	    Map<String, Object> dataRowMap = new LinkedHashMap<String, Object>();  
	    	Map<String, Object> rowMap = new LinkedHashMap<String, Object>();
	    	rowMap.put("urn:AmountAccepted", 1);
	    	rowMap.put("urn:AmountCurrency", "CNY");
	    	rowMap.put("urn:DateOfDelivery", "2023-04-01");
	    	rowMap.put("urn:IsReceivingByCount", false);
	    	rowMap.put("urn:ReceivableLineItemId", 1);
	    	rowMap.put("urn:ReceivedDate", "2023-04-01");
	    	dataRowMap.put("urn:item", rowMap);
	    	
	    	rowsList.add(dataRowMap);
	    	dataMap.put("urn:ExternalReceiptItems", rowsList);
	    	dataMap.put("urn:HeaderExtrinsics", "<![CDATA[<Extrinsics><Extrinsic name=\"cus_PostingDate\">2023-02-20T10:00:00Z</Extrinsic></Extrinsics>]]>");
	    	dataMap.put("urn:OriginatingSystem", "EAS");
	    	dataMap.put("urn:ReceivableId", "C40-V3-R56");
	       
	    	byte[] callMapToXML = CommonUtils.callMapToXML(dataMap);
	    
			String strRead = new String(callMapToXML);
	    	
	        OutputStream os = connection.getOutputStream();  
	        os.write(callMapToXML);  
	        //5:接收服务端的响应  
	        int responseCode = connection.getResponseCode();  
	        if(200 == responseCode){//表示服务端响应成功  
	            InputStream is = connection.getInputStream();  
	            InputStreamReader isr = new InputStreamReader(is);  
	            BufferedReader br = new BufferedReader(isr);  
	            StringBuilder sb = new StringBuilder();  
	            String temp = null;  
	            while(null != (temp = br.readLine())){  
	                sb.append(temp);  
	            }  
	            System.out.println(sb.toString());  
	            is.close();  
	            isr.close();  
	            br.close();  
	        }  
	        os.close();  
	 }
 
 
	 
	 public static byte[] callMapToXML(Map map) {
			System.out.println("将Map转成Xml, Map:" + map.toString());
			StringBuffer sb = new StringBuffer();
			sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append("\r\n");
			sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:Ariba:Buyer:vrealm_150174\">").append("\r\n");
			sb.append("<soapenv:Header>").append("\r\n");
			sb.append("<urn:Headers>").append("\r\n");
			sb.append("<urn:variant>vrealm_150174</urn:variant>").append("\r\n");
			sb.append("<urn:partition>prealm_150174</urn:partition>").append("\r\n");
			sb.append("</urn:Headers>").append("\r\n");
			sb.append("</soapenv:Header>").append("\r\n");
			sb.append("<soapenv:Body>").append("\r\n");
			sb.append("<urn:ExternalReceiptImportRequest partition=\"?\" variant=\"?\">").append("\r\n");
			sb.append("<urn:ExternalReceiptInputBean_Item>").append("\r\n");
			sb.append("<urn:item>").append("\r\n");
			sb.append("<urn:ASNReference/>").append("\r\n");
			mapToXMLTest2(map, sb);
		 
			sb.append("</urn:item>").append("\r\n");
			sb.append("</urn:ExternalReceiptInputBean_Item>").append("\r\n");
			sb.append("</urn:ExternalReceiptImportRequest>").append("\r\n");
			sb.append("</soapenv:Body>").append("\r\n");
			sb.append("</soapenv:Envelope>").append("\r\n");
			
			sb.append("\r\n");
			System.out.println("将Map转成Xml, Xml:" + sb.toString());
			try {
				return sb.toString().getBytes("GBK");
			} catch (Exception e) {
				System.out.println(e);
			}
			return null;
		}
	 
		
		
		
		
		
		private static void mapToXMLTest2(Map map, StringBuffer sb) {
			Set set = map.keySet();
			for (Iterator it = set.iterator(); it.hasNext();) {
				String key = (String) it.next();
				Object value = map.get(key);
				if (null == value)
					value = "";
				if (value.getClass().getName().equals("java.util.ArrayList")) {
					ArrayList list = (ArrayList) map.get(key);
					sb.append("<" + key + ">");
					for (int i = 0; i < list.size(); i++) {
						HashMap hm = (HashMap) list.get(i);
						mapToXMLTest2(hm, sb);
					}
					sb.append("</" + key + ">");
					sb.append("\r\n");
				} else {
					if (value instanceof HashMap) {
						sb.append("<" + key + ">");
						mapToXMLTest2((HashMap) value, sb);
						sb.append("</" + key + ">");
						sb.append("\r\n");
					} else {
						sb.append("<" + key + ">" + value + "</" + key + ">");
						sb.append("\r\n");
					}
	 
				}
	 
			}
		}
		
		
		 
		
		
		
		
		
	 
		public static Map xmlToMap(String xmlStr, boolean needRootKey) throws DocumentException {
		    Document doc = DocumentHelper.parseText(xmlStr);
		    Element root = doc.getRootElement();
		    Map<String, Object> map = (Map<String, Object>) xml2map(root);
		    if(root.elements().size()==0 && root.attributes().size()==0){
		        return map;
		    }
		    if(needRootKey){
		        //在返回的map里加根节点键(如果需要)
		        Map<String, Object> rootMap = new HashMap<String, Object>();
		        rootMap.put(root.getName(), map);
		        return rootMap;
		    }
		    return map;
		}
	 
		/**
		 * xml转map 不带属性
		 * @param e
		 * @return
		 */
		private static Map xml2map(Element e) {
		    Map map = new LinkedHashMap();
		    List list = e.elements();
		    if (list.size() > 0) {
		        for (int i = 0; i < list.size(); i++) {
		            Element iter = (Element) list.get(i);
		            List mapList = new ArrayList();
	 
		            if (iter.elements().size() > 0) {
		                Map m = xml2map(iter);
		                if (map.get(iter.getName()) != null) {
		                    Object obj = map.get(iter.getName());
		                    if (!(obj instanceof List)) {
		                        mapList = new ArrayList();
		                        mapList.add(obj);
		                        mapList.add(m);
		                    }
		                    if (obj instanceof List) {
		                        mapList = (List) obj;
		                        mapList.add(m);
		                    }
		                    map.put(iter.getName(), mapList);
		                } else
		                    map.put(iter.getName(), m);
		            } else {
		                if (map.get(iter.getName()) != null) {
		                    Object obj = map.get(iter.getName());
		                    if (!(obj instanceof List)) {
		                        mapList = new ArrayList();
		                        mapList.add(obj);
		                        mapList.add(iter.getText());
		                    }
		                    if (obj instanceof List) {
		                        mapList = (List) obj;
		                        mapList.add(iter.getText());
		                    }
		                    map.put(iter.getName(), mapList);
		                } else
		                    map.put(iter.getName(), iter.getText());
		            }
		        }
		    } else
		        map.put(e.getName(), e.getText());
		    return map;
		}
	 
		
		/**
		 * xml转map 带属性
		 * @param xmlStr
		 * @param needRootKey 是否需要在返回的map里加根节点键
		 * @return
		 * @throws DocumentException
		 */
		public static Map xml2mapWithAttr(String xmlStr, boolean needRootKey) throws DocumentException {
			Document doc = DocumentHelper.parseText(xmlStr);
			Element root = doc.getRootElement();
			Map<String, Object> map = (Map<String, Object>) xml2mapWithAttr(root);
			if(root.elements().size()==0 && root.attributes().size()==0){
				return map; //根节点只有一个文本内容
			}
			if(needRootKey){
				//在返回的map里加根节点键(如果需要)
				Map<String, Object> rootMap = new HashMap<String, Object>();
				rootMap.put(root.getName(), map);
				return rootMap;
			}
			return map;
		}
	 
		/**
		 * xml转map 带属性
		 * @param e
		 * @return
		 */
		private static Map xml2mapWithAttr(Element element) {
			Map<String, Object> map = new LinkedHashMap<String, Object>();
	 
			List<Element> list = element.elements();
			List<Attribute> listAttr0 = element.attributes(); // 当前节点的所有属性的list
			for (Attribute attr : listAttr0) {
				map.put("@" + attr.getName(), attr.getValue());
			}
			if (list.size() > 0) {
	 
				for (int i = 0; i < list.size(); i++) {
					Element iter = list.get(i);
					List mapList = new ArrayList();
	 
					if (iter.elements().size() > 0) {
						Map m = xml2mapWithAttr(iter);
						if (map.get(iter.getName()) != null) {
							Object obj = map.get(iter.getName());
							if (!(obj instanceof List)) {
								mapList = new ArrayList();
								mapList.add(obj);
								mapList.add(m);
							}
							if (obj instanceof List) {
								mapList = (List) obj;
								mapList.add(m);
							}
							map.put(iter.getName(), mapList);
						} else
							map.put(iter.getName(), m);
					} else {
	 
						List<Attribute> listAttr = iter.attributes(); // 当前节点的所有属性的list
						Map<String, Object> attrMap = null;
						boolean hasAttributes = false;
						if (listAttr.size() > 0) {
							hasAttributes = true;
							attrMap = new LinkedHashMap<String, Object>();
							for (Attribute attr : listAttr) {
								attrMap.put("@" + attr.getName(), attr.getValue());
							}
						}
	 
						if (map.get(iter.getName()) != null) {
							Object obj = map.get(iter.getName());
							if (!(obj instanceof List)) {
								mapList = new ArrayList();
								mapList.add(obj);
								// mapList.add(iter.getText());
								if (hasAttributes) {
									attrMap.put("#text", iter.getText());
									mapList.add(attrMap);
								} else {
									mapList.add(iter.getText());
								}
							}
							if (obj instanceof List) {
								mapList = (List) obj;
								// mapList.add(iter.getText());
								if (hasAttributes) {
									attrMap.put("#text", iter.getText());
									mapList.add(attrMap);
								} else {
									mapList.add(iter.getText());
								}
							}
							map.put(iter.getName(), mapList);
						} else {
							// map.put(iter.getName(), iter.getText());
							if (hasAttributes) {
								attrMap.put("#text", iter.getText());
								map.put(iter.getName(), attrMap);
							} else {
								map.put(iter.getName(), iter.getText());
							}
						}
					}
				}
			} else {
				// 根节点的
				if (listAttr0.size() > 0) {
					map.put("#text", element.getText());
				} else {
					map.put(element.getName(), element.getText());
				}
			}
			return map;
		}
 
	 
	 
 
	 
	

}

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:Ariba:Buyer:vrealm_150174">
   <soapenv:Header>
      <urn:Headers>
            <urn:variant>vrealm_150174</urn:variant>
            <urn:partition>prealm_150174</urn:partition>
      </urn:Headers> 
   </soapenv:Header>
   <soapenv:Body>
      <urn:ExternalReceiptImportRequest partition="?" variant="?">
         <!--Optional:-->
         <urn:ExternalReceiptInputBean_Item>
            <!--Optional:-->
            <urn:item>
               <!--You may enter the following 6 items in any order-->
               <urn:ASNReference/>
               <urn:ERPReceiptNumber>rc01</urn:ERPReceiptNumber>
               <urn:ExternalReceiptItems>
                  <!--1 or more repetitions:-->
                  <urn:item>
                     <!--You may enter the following 12 items in any order-->
                     <urn:AmountAccepted>1</urn:AmountAccepted>
                     <urn:AmountCurrency>CNY</urn:AmountCurrency>
                     <urn:AmountRejected/>
                     <urn:Comment/>
                     <urn:DateOfDelivery>2023-04-01</urn:DateOfDelivery>
                     <urn:IsReceivingByCount>false</urn:IsReceivingByCount>
                     <urn:LineExtrinsics/>
                     <urn:NumberAccepted/>
                     <urn:NumberRejected/>
                     <urn:ReceivableLineItemId>1</urn:ReceivableLineItemId>
                     <urn:ReceivedDate>2023-03-29T05:45:07+08:00</urn:ReceivedDate>
                     <urn:ReceivingType/>
                  </urn:item>
               </urn:ExternalReceiptItems>         
               <urn:HeaderExtrinsics>
               <![CDATA[<Extrinsics><Extrinsic name="cus_PostingDate">2023-02-20T10:00:00Z</Extrinsic></Extrinsics>]]>
             </urn:HeaderExtrinsics>
               <urn:OriginatingSystem>EAS</urn:OriginatingSystem>
               <urn:ReceivableId>C40-V3-R56</urn:ReceivableId>
            </urn:item>
         </urn:ExternalReceiptInputBean_Item>
      </urn:ExternalReceiptImportRequest>
   </soapenv:Body>
</soapenv:Envelope>

举报

相关推荐

0 条评论