【问题标题】:SOAP Client programming in JavaJava 中的 SOAP 客户端编程
【发布时间】:2012-10-13 22:30:06
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您能否添加一个有问题的 XML 示例(只是破坏 XML 部分的 sn-p)?
  • ?为什么?您是否打算避免使用所有适合该工作的库?
  • 我刚刚编辑了问题,以便您做出回应。

标签: java xml http soap request


【解决方案1】:

我发现响应是分块格式的,这意味着这些行是十六进制数字,给出了分块部分的长度。所以第一行给出了第一个块的长度,然后新行带有另一个十六进制数字,依此类推。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多