[英]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.