0

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

ありがとうございました!

4

1 に答える 1

0

応答がチャンク形式であることがわかりました。これは、これらの行がチャンク部分の長さを示す16進数であることを意味します。したがって、最初の行は最初のチャンクの長さを示し、新しい行には別の16進数が続きます。

于 2012-10-14T09:22:43.257 に答える