webService調用淺談(一)


本文主要講述,使用java語言調用webservice的幾種方法,和針對於獲取的報文文件解析的一些看法。

再次之前先推薦一種工具,soapui這個工具可以很好的實現測試webservice的連通性,並且可以直接獲取、

webservice服務上對應的值。

第一部分:調用方法

第一種方式采用soap的方式:下面是需要引用的包axis.jar

import javax.xml.*;

下面附上一部分的測試代碼:

public String getwebservice() throws Exception {  
  String temp = "";//用來存放返回的報文內容
  try {

    //實例化一個soap連接對象工廠
    SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();

    //實例化一個連接對象
    SOAPConnection connection = soapConnFactory.createConnection(); 

    //實例化一個消息對象         
    MessageFactory messageFactory = MessageFactory.newInstance();

    //實例化一個消息
    SOAPMessage message = messageFactory.createMessage();       

    //獲取消息中soap消息部分的句柄 
    SOAPPart soapPart = message.getSOAPPart();

    //獲取soap消息部分中的信封句柄
    SOAPEnvelope envelope = soapPart.getEnvelope();

    //獲取信封中需要填寫的請求報文部分的句柄
    SOAPBody body = envelope.getBody();      

    //以上內容均是實例化各個對象

    //下面函數作用為構建請求頭,一共三個參數,其中第一個參數為要訪問webservice中的那個函數的函數名(注意大小寫敏感)

    第二個參數需要按照情況來拼接,可以先訪問對方的webservice地址查看是否標簽中有這個元素

    第三個參數為訪問空間,也就是對應於wsdl文檔中的namespace內容。          
    SOAPElement bodyElement = body.addChildElement(envelope.createName(operationName , "web", targetNamespace));

    //此訪問距離假定我要訪問的webservice函數有兩個參數

    //下面是第一個參數為參數名(大小寫敏感)而第二個參數和第三個參數要視具體的webservice而定
    SOAPElement firstElemnt = bodyElement.addChildElement(envelope.createName("" , "", ""));
    Name firstName = envelope.createName("type");

    //firstName為入參一的值,后面的是入參的類型
    firstElemnt.addAttribute(firstName, "String");
    firstElemnt.addTextNode();

    //以上就是第一個參數的添加

    //下面是第二個參數的添加和第一個沒有任何區別
    SOAPElement secondElemnt = bodyElement.addChildElement(envelope.createName("" , "", ""));
    Name secondName = envelope.createName("type");
    secondElemnt.addAttribute(secondName, "String");
    secondElemnt.addTextNode();     

    //下面這句話的意思是保存消息的修改               
    message.saveChanges();

    //下面的webServiceURL為webservice的訪問地址
    String destination = webServiceURL;

    //下面為調用
    SOAPMessage reply = connection.call(message, destination);

    //如果返回的消息不為空需要進行處理
    if(reply!=null)
    {

        //這部分的處理就是將返回的值轉換為字符串的格式,也就是流和串之間的轉換
        Source source = reply.getSOAPPart().getContent();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        ByteArrayOutputStream myOutStr = new ByteArrayOutputStream();
        StreamResult res = new StreamResult();
        res.setOutputStream(myOutStr);
        transformer.transform(source,res);

        //針對於漢子的編碼格式,需要自己制定
        temp = myOutStr.toString("UTF-8"); 
    }      

    //注意!一定要關閉連接
    connection.close();
  }
  catch(Exception e)
  {
    System.out.println(e.getMessage());
  }  
  if(temp == null)
  {
   temp = "";
  }
  return temp;
 }

以上就是第一種使用java調用webservice的方法。

有興趣的朋友可以嘗試一下。

好了第一部分暫時到這里,下一篇將會介紹另外一種的調用方式。


免責聲明!

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



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