2012-10-13 21 views
0

我的Java應用程序有一個非常有趣的問題。我正在嘗試創建一個SOAP客戶端,但我不想使用內置或任何其他外部庫來使其工作。我想了解它是如何工作的,並設置所有請求和標題信息。用Java編程的SOAP客戶端編程

該程序正在工作。我可以發送請求並獲得回覆。但是,當響應更大時,我會在xml響應中產生一些「垃圾」,它會創建一個新行並顯示字符串,例如:b50,51b,5a8,9ed或15b。這些字符串在響應中隨機地打破xml結構。

我的代碼是:

package soapclient.client; 

import java.io.*; 
import java.net.*; 
/** 
* 
* @author stom7 
*/ 
public class Client { 

    private BufferedReader _reader; 
    private DataOutputStream _writer; 
    private Socket _socket; 

    public void connect() { 

     try 
     { 
      _socket = new Socket("**.***.***.***", 80); 
     } 
     catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
      return; 
     } 

     System.out.println("Connected successfully!"); 

     try 
     { 
      _reader = new BufferedReader(new InputStreamReader(_socket.getInputStream())); 
      _writer = new DataOutputStream(_socket.getOutputStream()); 
     } 
     catch (IOException ex) { 
      System.out.println(ex.getMessage()); 
      return; 
     } 

     System.out.println("Streams created successfully!"); 

     String content = "The soap request in xml format"; 

     String request = "POST the_path HTTP/1.1\r\n" 
       + "Host: the_host\r\n" 
       + "Content-Type: application/soap+xml; charset=utf-8\r\n" 
       + "Content-Length: " + content.length() + "\r\n" 
       + "\r\n" 
       + content; 
     try { 
      _writer.writeBytes(request); 
      _writer.flush(); 

      String line; 

      while ((line = _reader.readLine()) != null) { 
       System.out.println(line); 
      } 

     } 
     catch(IOException ex) { 
      System.out.println(ex.getMessage()); 
     } 

     try 
     { 
      _reader.close(); 
      _writer.close(); 
      _socket.close(); 
     } 
     catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
     }  
    } 
} 

即使在第一行有一個問題:

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

或者:

<xsd:element maxOccurs="1" minOccurs="1 
b50 
" name="in6" nillable="true" type="xsd:string"/> 

謝謝!

+0

你可以添加一個有問題的XML的樣本(只是打破XML的部分的一個片段)? – RonK

+0

?爲什麼?你是否打算避開所有適合這項工作的圖書館? – bmargulies

+0

我剛剛編輯了問題,以便您可以回覆。 – stomseven

回答

0

我發現響應是分塊格式,這意味着這些行是十六進制數字,給出了分塊部分的長度。所以第一行給出了第一個塊的長度,然後一個新行出現了另一個十六進制數,依此類推。