簡體   English   中英

Java中的SOAP客戶端編程

[英]SOAP Client programming in Java

我的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"/>

謝謝!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM