java連接siebel的webservice中的接口,包括請求頭驗證token

import java.net.URL;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeader;
import javax.xml.soap.MimeHeaders;
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.SOAPHeader;
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;

/**

  • 功能描述:模擬客戶端發生soap報文調用服務器,服務器返回soap報文
  • @author tansy

*/
public class SysClient {

public static void main(String args[]) {  
    try {  
        // 創建連接  
        //實例化一個soap連接對象工廠  
        SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory  
                .newInstance();  
        //實例化一個連接對象
        SOAPConnection connection = soapConnFactory.createConnection();  
        //實例化一個消息對象
        MessageFactory messageFactory = MessageFactory.newInstance();  
        //實例化一個消息
        SOAPMessage message = messageFactory.createMessage();
       
        MimeHeaders mimeHeader=message.getMimeHeaders();
        //mimeHeader.setHeader("Content-Type", "text/xml;charset=UTF-8");
        //一開始這裏沒有定義soapaction,報了找不到web...錯誤,xxx代表需要調用的方法名
        mimeHeader.setHeader("SOAPAction", "\"document/http://siebel.com/CustomUI:xxxxxxxxx\"");
        //獲取消息中soap消息部分的句柄
        SOAPPart soapPart = message.getSOAPPart();
        
        //獲取soap消息部分中的信封句柄
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.setPrefix("soapenv");
        envelope.removeNamespaceDeclaration("SOAP-ENV");
   
        //添加namespace
        envelope.addNamespaceDeclaration("cus", "http://siebel.com/CustomUI");
        envelope.addNamespaceDeclaration("web", "http://siebel.com/webservices");
   
       
        //創建請求頭
        SOAPHeader header = envelope.getHeader();
       //添加驗證,爲了token
		if (header == null)
		header = envelope.addHeader();
		header.setPrefix("soapenv");
        header.removeNamespaceDeclaration("SOAP-ENV");
		header.addChildElement("SessionToken", "web").addTextNode("");
		header.addChildElement("SessionType", "web").addTextNode("None");
		//密碼
		header.addChildElement("PasswordText", "web").addTextNode("a");
		//用戶名
		header.addChildElement("UsernameToken", "web").addTextNode("b");
		
   		//請求體
		SOAPBody body = envelope.getBody();  
		body.setPrefix("soapenv");
		body.removeNamespaceDeclaration("SOAP-ENV");
		SOAPElement bodyElement=body.addChildElement("xxxxxx", "cus");
		bodyElement.addChildElement("AllFlag", "cus").addTextNode("Y");
        // 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://xxxx:10082/eai_chs/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&WSSOAP=1");  
        System.out.println("URL----"+url);  
        // 響應消息  
        SOAPMessage reply = connection.call(message, url);  
        //reply.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");  
        // 打印服務端返回的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(""); 
        //返回接收到的內容
        SOAPPart response=reply.getSOAPPart();
       // log.info("返回的內容--------"+response.getEnvelope().getBody().getTextContent());
        connection.close();  
        /* 
         * 模擬客戶端A,異常處理測試 
         */  
        SOAPBody ycBody = reply.getSOAPBody();  
        Node ycResp = ycBody.getFirstChild();  
        System.out.println("returnValue:"+ycResp.getTextContent());  
    } catch (Exception e) {  
        e.printStackTrace();  
        System.out.println(e.getMessage());  
    }  
}  

}

注意:如果出現下列錯誤信息,一定要添加soapaction

<?xml version="1.0" encoding="UTF-8"?>

SOAP-ENV:BodySOAP-ENV:FaultSOAP-ENV:Server不存在包含 ‘http://siebel.com/CustomUI:xxxxx’ 操作的有效 Web 服務。(SBL-EAI-04313)<siebelf:siebdetail xmlns:siebelf=“http://www.siebel.com/ws/fault”>siebelf:logfilenameEAIObjMgr_chs_0283_296747489.log</siebelf:logfilename>siebelf:errorstacksiebelf:errorsiebelf:errorcodeSBL-EAI-04313</siebelf:errorcode>siebelf:errorsymbolIDS_EAI_WS_OP_NOT_FOUND</siebelf:errorsymbol>siebelf:errormsg不存在包含 ‘http://siebel.com/CustomUI:xxxxx’ 操作的有效 Web 服務。(SBL-EAI-04313)</siebelf:errormsg></siebelf:error></siebelf:errorstack></siebelf:siebdetail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章