java网络编程(3):HTTP协议调用SOAP
来源:互联网 发布:被猎头坑过 知乎 编辑:程序博客网 时间:2024/04/29 17:26
第0章:简介
简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。webService三要素:SOAP、WSDL (Web Services Description Language)、UDDI( Universal Description Discovery and Integration )之一, soap用来传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 具体实现可以搜索 Web Services简单实例 ; SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。(来源:百度百科)
第0节:SOAP消息格式
<
SOAP-ENV:
Envelope
各种属性>
<!--示例-->
<
SOAP:HEADER
>
</
SOAP:HEADER
>
<
SOAP:Body
>
</
SOAP:Body
>
</
SOAP-ENV:Envelope
>
构建模块
- 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
- 可选的 Header 元素,包含头部信息
- 必需的 Body 元素,包含所有的调用和响应信息
- 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
语法规则
- SOAP 消息必须用 XML 来编码
- SOAP 消息必须使用 SOAP Envelope 命名空间
- SOAP 消息必须使用 SOAP Encoding 命名空间
- SOAP 消息不能包含 DTD 引用
- SOAP 消息不能包含 XML 处理指令
例如:
<soapenv:Header/>
<soapenv:Body>
<dat:GetMsg>
<!--Optional:-->
<dat:req>
<!--Optional:-->
<dat:id>123</dat:id>
<!--Optional:-->
<dat:type>123</dat:type>
<!--Optional:-->
<dat:protocol>123</dat:protocol>
<!--Optional:-->
<dat:date>20140224</dat:date>
<!--Optional:-->
<dat:cursor>?</dat:cursor>
<!--Optional:-->
<dat:pagesize>?</dat:pagesize>
<!--Optional:-->
<dat:format>34</dat:format>
</dat:req>
</dat:GetMsg>
</soapenv:Body>
</soapenv:Envelope>
第1节:soapui工具
soapui官网:http://www.soapui.org/
开源中国:http://www.oschina.net/p/soapui/
使用博客:http://blog.csdn.net/hailangamy/article/details/6957355
第2节:札记
第1章:实践
HTTP协议调用SOAP处理类(SoapClientHandler.java):
package com.mcc.core.net;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* 使用HTTP协议调用SOAP处理类
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-2-24 下午2:27
*/
public class SoapClientHandler {
/**
* 通过HTTP请求方式调用WebSe
*
* @param soapUrl SOAP的URL,包括wsdl段
* @param soapRequest SOAP的请求
* @return
*/
public static String request(String soapUrl, String soapRequest,String soapAction) {
String actual = "";
HttpURLConnection connection = null;
OutputStream os = null;
PrintWriter out = null;
InputStream is = null;
BufferedReader br = null;
try {
URL url = new URL(soapUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
// 处理请求参数
os = connection.getOutputStream();
out = new PrintWriter(os);
out.println(soapRequest);
// 发送请求
out.flush();
// http status ok
if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
System.out.println("HTTP_OK");
}
// 处理返回信息
is = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
for (String line = br.readLine(); line != null; line = br.readLine()) {
builder.append(line);
}
actual = builder.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 释放资源
try {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (is != null) {
is.close();
}
if (br != null) {
br.close();
}
if (out != null) {
out.close();
}
if (connection != null) {
connection.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return actual;
}
public static void main(String args[]){
//webservice服务路径,一般为wsdl后缀
String serviceUrl = "http://192.168.1.100:8181?wsdl";
StringBuilder request = new StringBuilder();
//下面格式可以从soapui客户端工具获得
request.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:dat=\"http://dataquery.menergy.com\">");
request.append("<soapenv:Header/><soapenv:Body>");
request.append("<dat:GetInfo><dat:req>");
request.append("<dat:id>123</dat:id>");
request.append("<dat:type>123</dat:type>");
request.append("<dat:protocol>123</dat:protocol>");
request.append("<dat:date>20140224</dat:date>");
request.append("<dat:cursor></dat:cursor>");
request.append("<dat:pagesize></dat:pagesize>");
request.append("<dat:format>34</dat:format>");
request.append(" </dat:req></dat:GetInfo>");
request.append("</soapenv:Body></soapenv:Envelope>");
// 组装SOAP请求的参数
String soapRequest = request.toString();
// SOAP ACTION ,对应xmlns命名空间方法路径
String soapAction = "http://dataquery.menergy.com/GetInfo";
// 使用HTTP协议调用SOAP的数据
String response = SoapClientHandler.request(serviceUrl, soapRequest, soapAction);
//web service 返回结果
System.out.println("响应结果:\n" + response);
}
}
- java网络编程(3):HTTP协议调用SOAP
- 网络编程(3):HTTP协议详解
- Java网络编程(20):HTTP协议简介
- java 网络编程【10】 HTTP协议详解
- Java中基于HTTP协议网络编程
- Java中基于HTTP协议网络编程
- Java中基于HTTP协议网络编程
- HTTP 协议网络编程
- Java网络编程(二)-基于http协议的网络编程
- 网络编程(3)——初探HTTP协议
- Android 网络编程(一)HTTP协议
- 网络编程基础-http协议
- ios网络编程协议---http
- 网络编程02---HTTP协议
- 网络编程---http协议 ---- 陈洪鑫
- 网络编程---HTTP协议加强
- TCP/IP网络协议的通俗理解,socket,http,soap。
- TCP/IP网络协议的通俗理解,socket,http,soap。
- 调整你的爱情观
- 图像的缩放
- c++ 拷贝构造函数
- 微信火了之后不得不说的事情-微信公众号之服务号与订阅号的区别
- bzoj1015逆向思维+并查集
- java网络编程(3):HTTP协议调用SOAP
- Android Asynchronous Http Client - 开源http 多线程引擎
- 关于局域网内两主机之间单向ping通的问题
- 【OpenCV学习笔记】【函数学习】九(RGB空间各通道分离)
- 每天一条Linux命令 mount命令
- java中枚举的用法
- cocos2d-x Cygwin编译:recipe for target "xxx/libcocos2d.so" fail解决办法
- yum源
- POJ 2886 Who Gets the Most Candies?