- 浏览: 324219 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
huangyunbin:
swc.advance(); 这个什么时候被调用是最核心的 ...
滑动窗口计数java实现 -
80后的童年2:
深入浅出MongoDB应用实战开发网盘地址:https://p ...
MongoDB 从入门到精通专题教程 -
rryymmoK:
深入浅出MongoDB应用实战开发下载地址:http://pa ...
MongoDB 从入门到精通专题教程 -
u012352249:
怎么支持多个窗口啊?
滑动窗口计数java实现 -
rryymmoK:
深入浅出MongoDB应用实战开发百度网盘下载:链接:http ...
MongoDB 从入门到精通专题教程
HttpUrlConnection 发送 SOAP 请求,SAX 解析 SOAP 响应
并附上抓包工具:wireshark
并附上抓包工具:wireshark
/* * Socket远程调用Web服务实现,并用SAX解析XML文件,适用于性能要求较高场合 */ package com.mypack.soap.client; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringReader; import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.Stack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; /** * 为了提高WebService调用效率,因此手Socket自已实现,无需依赖任何Soap引擎 * @version 1.0 * @date 2010-08-21 */ public final class SoapClientAsHttpUrlConnection { /** * apache 日志记录器,底层可切换实现 */ private static Log logger = LogFactory.getLog(SoapClientAsHttpUrlConnection.class); /** * 为了简单直接写了,最好单独写一方法并采用 Executors 启动线程,将返回值加入 BlockingQueue */ public static void main(String[] args) throws URISyntaxException, IOException, SAXException { // soap request string final String soapReuqest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body><ns1:queryUser soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns1=\"http://services.zhang.com\"><in0 xsi:type=\"ns2:UserInfo\" xsi:nil=\"true\" xmlns:ns2=\"http://tdo.zhang.com\"/></ns1:queryUser></soapenv:Body></soapenv:Envelope>"; // Web 服务所在的地址 URI uri = new URI("http://10.40.51.156:28888/testSoap/services/UserManage"); URL url = uri.toURL(); // 打开连接 HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection(); // 可读取 httpUrlConnection.setDoInput(true); httpUrlConnection.setDoOutput(true); httpUrlConnection.setRequestMethod("POST"); // set request header httpUrlConnection.setRequestProperty("SOAPAction", ""); //httpUrlConnection.setRequestProperty("Content-Length", soapReuqest.length() + ""); OutputStream os = httpUrlConnection.getOutputStream(); PrintWriter out = new PrintWriter(os); out.println(soapReuqest); out.flush(); StringBuilder sb = new StringBuilder(); // http status ok if (HttpURLConnection.HTTP_OK == httpUrlConnection.getResponseCode()) { if (logger.isDebugEnabled()) { logger.debug("HTTP_OK"); } InputStream is = httpUrlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); for (String line = br.readLine(); line != null; line = br.readLine()) { sb.append(line); } is.close(); } // Release resource os.close(); out.close(); httpUrlConnection.disconnect(); String soapResponse = sb.toString(); System.out.println(soapResponse); // parse the soap response // 底层是xces解析器,效率较高 XMLReader xmlReader = XMLReaderFactory.createXMLReader(); SimpleHandler handler = new SimpleHandler(); xmlReader.setContentHandler(handler); InputSource inputSource = new InputSource(new StringReader(soapResponse)); try { xmlReader.parse(inputSource); } catch (ExtSAXException e) { } // 便于演示,直接打出,生产环境请匆如此使用,可用日志进行 debug System.out.println("Response is " + handler.response); } /** * SAX 处理器,底层运用观察者模式 * 对于XML这种结构,运用栈进行存储 * 如果解析到目标串,利用抛出自定义异常来提前终止操作,提高效率 */ private static class SimpleHandler extends DefaultHandler { /** * 用栈缓存上下文信息 */ private final Stack<String> stack = new Stack<String>(); private String response; /** * 每次传递 16K 数据,这一点很重要,但是在这里只需要一个串,因此忽略 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { if (!stack.empty() && "queryUserReturn".equals(stack.pop())) { response = new String(ch, start, length); // 抛出异常,结束解析 throw new ExtSAXException(); } } /** * 元素开始自动触发,将开始标签压栈缓存 */ @Override public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException { if ("queryUserReturn".equals(localName)) { stack.push(localName); } } } /** * 自定义异常,用于终止解析任务 */ private static class ExtSAXException extends SAXException { private static final long serialVersionUID = 1L; } }
- Wireshark_.zip.003.zip (2.3 MB)
- 下载次数: 117
- Wireshark_.zip.001.zip (9 MB)
- 下载次数: 97
- Wireshark_.zip.002.zip (9 MB)
- 下载次数: 91
评论
4 楼
yanliyun
2013-12-13
这几个案例也下载下来损害
3 楼
yanliyun
2013-12-13
楼主这个在我控制台输出 Response is null什么情况,能不能告诉详细怎么用的
2 楼
tojaoomy
2012-04-26
还需要在
httpUrlConnection.setRequestProperty("SOAPAction", "");
后添加httpUrlConnection.setRequestProperty("Content-type", "text/xml");
才会成功。
httpUrlConnection.setRequestProperty("SOAPAction", "");
后添加httpUrlConnection.setRequestProperty("Content-type", "text/xml");
才会成功。
1 楼
playingfly
2011-12-28
好文! 很经典!
发表评论
-
滑动窗口计数java实现
2016-02-20 13:13 11917滑动窗口计数有很多使用场景,比如说限流防止系统雪崩。相比计 ... -
面向对象程序设计思想(精华)
2014-11-12 15:52 1483面向对象语言具有封装,继承,多态的特征。那么在用面象对象语言 ... -
YY直播厅蠕虫病毒代码
2014-09-22 21:52 2504本来是可以直接通过<script>标签实现的, ... -
找出序列中不重复的元素
2014-09-17 21:51 1954阿里的一个面试题: 一个序列里除了一个元素,其他元素都会重复出 ... -
Apache Http Server Rewrite
2012-06-04 13:13 1192apache的rewrite功能很强大,详细参考:http:/ ... -
java操作MQ
2011-12-30 14:21 2874package mq; import jav ... -
实现动态验证码
2011-07-08 13:10 1194import java.awt.Color; imp ... -
简单统计代码行数
2010-12-30 17:34 1472真的很多,我刚写了个程序统计了一下,我们项目才695个类 并 ... -
采用MD5单向加密
2010-11-26 10:42 1320public static String get ... -
在报表中格式化货币
2010-11-25 10:01 1766最近在用FineReport这个工具进行系统的报表开发,发现在 ... -
Struts + JSP导出Excel报表
2010-11-07 20:21 2420据我所知 Java 导 Excel 报表有三种方法: 1, 在 ... -
Java正则实现EL表达式
2010-11-04 16:19 4493public static void main(Stri ... -
js格式化货币格式
2010-11-01 13:41 3809String.prototype.asCurren ... -
Hessian 发布服务及客户端实现
2010-10-19 13:36 2110服务接口: package com.test; pub ... -
java 项目中嵌入 jetty,并发布servlet
2010-10-13 11:47 2191package com.utan.tfs.jetty; ... -
TreeSet<T> 简单实现
2010-08-26 17:31 1559package com.mypack.ds; i ... -
SAX 解析 XML 实例
2010-08-21 14:32 2409xml文件: <?xml version=" ... -
利用 Spring 中的 Resource 读取文件和网络资源
2010-08-21 12:04 3784利用 Spring 中的 Resource 读取文件和网络资源 ... -
NIO SAX
2010-08-20 18:51 1091NIO与SAX 直接上教程 -
socket 发送 soap 请求
2010-08-19 23:46 3863package com.mypack.soap.client; ...
相关推荐
5. **SOAP客户端**:在Android应用中,实现SOAP客户端意味着创建能够发送SOAP请求并解析响应的对象。这个"soap demo"应该包含解析XML响应、构造SOAP请求、调用Web服务方法等功能的代码。 6. **XML解析**:由于SOAP...
5. **解析SOAP响应**: SOAP响应同样是一个XML文档,可以使用DOM(Document Object Model)或者SAX(Simple API for XML)解析器来处理。对于天气预报查询,你可能需要解析出温度、湿度等信息。 6. **天气预报查询...
- 解析SOAP响应的函数,这一步通常需要对XML解析有所了解,例如使用DOM或SAX解析器。 - 示例调用函数,整合以上步骤,完成整个Webservice调用流程。 6. **注意事项** - 网络权限:在AndroidManifest.xml中添加`...
在Android系统中,WstpBridge主要负责封装SOAP请求,解析响应,使得开发者能够轻松地调用Web服务API。 在提供的文件列表中,有两个重要文件:WstpMockClient和WstpBridge。WstpMockClient通常是一个模拟客户端,...
在`ExchangeRateXML.java`中,可能包含了创建SOAP请求和解析SOAP响应的代码。 2. **JAX-WS (Java API for XML Web Services)**: 这是Java平台用于构建和部署Web服务的标准API。开发者可以使用JAX-WS创建服务端点和...
首先,我们需要添加KSOAP2依赖到项目中,然后创建SOAP请求对象,设置命名空间、方法名、参数等,并发送请求到服务器。 2. **KSOAP2使用步骤**: - 引入库:在项目的build.gradle文件中添加KSOAP2依赖。 - 创建...
2. **设置HTTP请求**:在Android中,我们可以使用`HttpURLConnection`或`OkHttp`库来发送HTTP POST请求,包含SOAP请求的XML数据。记得设置正确的Content-Type(如"application/soap+xml")和URL,指向Web Service的...
常见的网络请求库有Android自带的HttpURLConnection,但更多开发者倾向于使用第三方库,如OkHttp和Volley,它们提供了更高效的性能和易用的API。 1. OkHttp:这是一个广泛使用的网络请求库,以其高性能、低内存占用...
- 发送请求:通过HttpURLConnection、HttpClient或者第三方库如OkHttp发送请求。 - 处理响应:解析返回的XML或JSON数据,转换为Java对象。 3. SOAP通信: - SOAP消息结构:包括Envelope、Header和Body三个部分,...
Ksoap2允许Android应用通过HTTP发送SOAP请求并解析返回的XML数据。 2. **SOAP通信** SOAP是一种基于XML的协议,用于在Web上交换结构化和类型化的信息。在Android中,使用Ksoap2库时,我们需要设置SOAP版本、SOAP...
根据WSDL文档,构建SOAP请求体,并使用上述示例代码中的方法发送请求。 3. **解析响应** 接收到服务器返回的SOAP响应后,需要解析其中的数据。如果响应是以XML形式返回的,则可以使用DOM或SAX等解析器进行解析。...
- SOAP:通过KSOAP2库,Android应用可以创建SOAP请求并解析响应。KSOAP2是一个轻量级的库,支持SOAP 1.1和1.2协议。 - RESTful:使用HTTP协议的GET、POST、PUT、DELETE等方法,通常配合JSON或XML数据格式。Android...
下面是一个简单的示例,展示如何发送SOAP请求并接收响应。 ##### 发送SOAP请求 ```java import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; public class SOAPClient { ...
3. **处理SOAP响应**:服务器响应同样是一个SOAP消息,需要解析这个XML响应来获取手机号码的归属地信息。Android提供了SAX、DOM、Pull Parser等多种XML解析方式,开发者可以根据性能和复杂性选择合适的方法。 4. **...
5. 解析响应:根据Web服务返回的数据格式(如XML、JSON),使用解析库(如DOM、SAX、Jackson、Gson)进行解析。 三、具体实现步骤 1. 添加网络权限:在AndroidManifest.xml中添加`...
6. **解析响应**:服务器处理请求后返回SOAP响应,客户端需要解析这个响应以获取结果。这通常涉及XML解析库,如Java内置的DOM或SAX解析器。 7. **错误处理**:在客户端和服务端都要处理可能出现的异常,如网络问题...
例如,使用`HttpURLConnection`发送GET请求获取资源,或者使用`RequestBody`和`OkHttpClient`发送POST请求,提交数据到服务器。 3. **权限请求**:在Android中,访问网络需要获取相应的权限。在AndroidManifest.xml...
3. **发送请求体**:对于SOAP,请求体是SOAP消息;对于REST,可能是JSON或XML格式的数据。`HttpInvokeWS.java`可能会包含将这些数据写入连接的代码。 ```java String soapRequest = ...
这可能涉及到创建SOAP请求,发送到服务端,然后接收并解析SOAP响应。理解SOAP请求和响应的结构,以及如何在客户端构造和解析它们,是掌握SOAP调用的关键。 2. **RESTful Web Service**: REST(Representational ...
在Android中,我们可以使用`HttpURLConnection`或`HttpClient`类来建立网络连接并发送XML请求。首先,构建XML请求字符串,然后将其写入到HTTP请求的主体部分。设置适当的请求头,如Content-Type为"application/xml...