java soap 操作和發送soap消息


  • package gov.hn12396.appintegration.mule.client;  
  •   
  • import gov.hn12396.appintegration.mule.util.EncoderUtil;  
  •   
  • import java.net.URL;  
  • import java.util.Calendar;  
  •   
  • import javax.xml.soap.MessageFactory;  
  • import javax.xml.soap.SOAPBody;  
  • import javax.xml.soap.SOAPConnection;  
  • import javax.xml.soap.SOAPConnectionFactory;  
  • import javax.xml.soap.SOAPElement;  
  • import javax.xml.soap.SOAPEnvelope;  
  • import javax.xml.soap.SOAPMessage;  
  • import javax.xml.soap.SOAPPart;  
  • import javax.xml.transform.Source;  
  • import javax.xml.transform.Transformer;  
  • import javax.xml.transform.TransformerFactory;  
  • import javax.xml.transform.stream.StreamResult;  
  •   
  • import org.w3c.dom.Node;  
  •   
  • /** 
  •  * 功能描述:模擬客戶端A-即服務調用者,通過該類模擬客戶端發送soap報文給mule, 
  •  * 同時把mule的響應報文打印出來做測試 
  •  * @author liuxp 
  •  * 
  •  */  
  • public class SynClient {  
  •   
  •     public static void main(String args[]) {  
  •   
  •         try {  
  •   
  •             // 創建連接  
  •             // ==================================================  
  •             SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory  
  •                     .newInstance();  
  •             SOAPConnection connection = soapConnFactory.createConnection();  
  •   
  •             //  創建消息對象  
  •             // ===========================================  
  •             MessageFactory messageFactory = MessageFactory.newInstance();  
  •             SOAPMessage message = messageFactory.createMessage();  
  • //          message.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "gb2312");  
  •   
  •             // 創建soap消息主體==========================================  
  •             SOAPPart soapPart = message.getSOAPPart();// 創建soap部分  
  •             SOAPEnvelope envelope = soapPart.getEnvelope();  
  •             SOAPBody body = envelope.getBody();  
  •             //  根據要傳給mule的參數,創建消息body內容。具體參數的配置可以參照應用集成接口技術規范1.1版本  
  •             // =====================================  
  •             SOAPElement bodyElement = body.addChildElement(envelope.createName(  
  •                     "process""Request""http://esb.service.com/"));  
  •             bodyElement.addChildElement("ServiceCode").addTextNode("10000061");  
  •             bodyElement.addChildElement("OrigAppId").addTextNode("999");  
  •             bodyElement.addChildElement("HomeAppId").addTextNode("998");  
  •             Calendar c = Calendar.getInstance();  
  •             String reqTime = String.valueOf(c.getTimeInMillis());  
  •             bodyElement.addChildElement("ReqTime").addTextNode(reqTime);  
  •             bodyElement.addChildElement("IpAddress").addTextNode("10.212.40.112");  
  •             bodyElement.addChildElement("OrigSerialNo").addTextNode("201205242011");  
  •             //(ServiceCode+ OrigAppId+ ReqTime+ IpAddress)簽名  
  •             String AppSignature = "10000061"+"999"+reqTime+"10.212.40.112"+"123456";  
  •             bodyElement.addChildElement("AppSignature").addTextNode(EncoderUtil.md5(AppSignature));  
  •             bodyElement.addChildElement("Version").addTextNode("014");  
  • //          bodyElement.addChildElement("RelSessionId").addTextNode("RelSessionId");  
  • //          bodyElement.addChildElement("ReplyCode").addTextNode("ReplyCode");  
  •             bodyElement.addChildElement("ReplyVersion").addTextNode("05");  
  •             bodyElement.addChildElement("TimeOut").addTextNode("30");  
  • //          bodyElement.addChildElement("FtpDir").addTextNode("FtpDir");  
  • //          bodyElement.addChildElement("FileList").addTextNode("FileList");  
  •             bodyElement.addChildElement("serviceParas").addTextNode("<param><name>apptest</name><password>apptest</password></param>");  
  •             // Save the message  
  •             message.saveChanges();  
  •             // 打印客戶端發出的soap報文,做驗證測試  
  •             System.out.println(" REQUEST: ");  
  •             message.writeTo(System.out);  
  •             System.out.println(" ");  
  •             /* 
  •              * 實際的消息是使用 call()方法發送的,該方法接收消息本身和目的地作為參數,並返回第二個 SOAPMessage 作為響應。 
  •              * call方法的message對象為發送的soap報文,url為mule配置的inbound端口地址。 
  •              */  
  •             URL url = new URL("http://localhost:9003/WebServiceSyn/process");  
  •             System.out.println(url);  
  •             // 響應消息  
  •             // ===========================================================================  
  •             SOAPMessage reply = connection.call(message, url);  
  •             //reply.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "gb2312");  
  •             // 打印服務端返回的soap報文供測試  
  •             System.out.println("RESPONSE:");  
  •             // ==================創建soap消息轉換對象  
  •             TransformerFactory transformerFactory = TransformerFactory  
  •                     .newInstance();  
  •             Transformer transformer = transformerFactory.newTransformer();  
  •             // Extract the content of the reply======================提取消息內容  
  •             Source sourceContent = reply.getSOAPPart().getContent();  
  •             // Set the output for the transformation  
  •             StreamResult result = new StreamResult(System.out);  
  •             transformer.transform(sourceContent, result);  
  •             // Close the connection 關閉連接 ==============  
  •             System.out.println("");  
  •             connection.close();  
  •             /* 
  •              * 模擬客戶端A,異常處理測試 
  •              */  
  •             SOAPBody ycBody = reply.getSOAPBody();  
  •             Node ycResp = ycBody.getFirstChild();  
  •             System.out.print("returnValue:"+ycResp.getTextContent());  
  •         } catch (Exception e) {  
  •             e.printStackTrace();  
  •             System.out.println(e.getMessage());  
  •         }  
  •     }  
  • }  

  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM