Java 使用httpclient Post与cxf 发布的Webservice通信
使用cxf发布的webservice不知道什么情况总会有时管用有时不管用,对于项目来说这肯定不行。又不想改动webservice因为代码太多。人懒!
于是便使用httpclient与webservice通过肥皂协议通信。
先看必须使用到的jar包。
看看webservice发布的接口,这边我放了两个发布的接口,xml很清晰的写出了两个方法的信息,我们要用到的就是他提供的这些信息。
下面我们再看看webService的java写法。这边由于我没注解参数名称所以上面显示的是arg0 . 1 2- 之类的。参数跟返回参数的类型我们都拿到了那下面开始代码了。
soap的话我们使用get可以直接请求,像浏览器一样地址栏输入就ok了。这边主要写下post方法。
首先构建xml
/** * 构建请求XML * @return * @throws Exception * @throws IOException */ private static String getRequestXml() throws IOException, Exception{ String p="aaaaa"; StringBuilder sb = new StringBuilder(); sb.append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"); //xml协议格式请根据自己的soap协议构建。不然无法使用 sb.append("<soap:Body>"); sb.append("<ns2:uploadData xmlns:ns2=\"http://message.biz.apexedu.com/\">"); //要调用的webservice服务的方法名称 sb.append("<arg0>"+p+"</arg0>"); //上面获取到的参数 sb.append("</ns2:uploadData>"); sb.append("</soap:Body>"); sb.append("</soap:Envelope>"); return sb.toString(); }
public static void main(String[] args) { DefaultHttpClient httpClient = null; try { httpClient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(""); //webservice服务地址 String soapRequestData = getRequestXml(); //soap协议的格式,定义了方法和参数 HttpEntity re = new StringEntity(soapRequestData,HTTP.UTF_8); httppost.setHeader("Content-Type","application/soap+xml; charset=utf-8"); httppost.setEntity(re); HttpResponse response = httpClient.execute(httppost); //调用接口 System.out.println(response.getStatusLine().getStatusCode()); if(response.getStatusLine().getStatusCode() == 200) { //调用状态 String xmlString = EntityUtils.toString(response.getEntity()); String jsonString = parseXMLSTRING(xmlString); //解析接口返回的值 String res=de(jsonString); String[] rets = res.split("&"); System.out.println("成功列表:"+rets[0]); System.out.println("失败列表:"+rets[1]); if (res.indexOf("error") != 0) { // 上传数据成功 } else { // 上传数据失败 System.out.println(res.substring(6)); } } } catch (Exception e) { e.printStackTrace(); } finally { httpClient.getConnectionManager().shutdown(); //关闭连接 } }
//解析xml文件,获取其中的返回值 public static String parseXMLSTRING(String xmlString){ String returnJson = ""; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xmlString))); Element root = doc.getDocumentElement();//根节点 Node node = root.getFirstChild(); while(!node.getNodeName().equals("return")) { node = node.getFirstChild(); } if(node.getFirstChild() != null) returnJson = node.getFirstChild().getNodeValue(); System.out.println("获取的返回参数为:" + returnJson); } catch (Exception e) { e.printStackTrace(); } return returnJson; }
下面看post调用结果与cxf直接调用的结果
结束!
Java 使用httpclient Post与cxf 发布的Webservice通信的更多相关文章
- CXF发布restful WebService的入门例子(客户端)
上篇说了怎么用cxf发布restful webservice,由于浏览器只能对该service发送http的GET请求,所以如果想对服务器上的数据,还需要实现客户端. 客户端的实现方式有无数种...可 ...
- CXF发布restful WebService的入门例子(服务器端)
研究了两天CXF对restful的支持. 现在,想实现一个以 http://localhost:9999/roomservice 为入口, http://localhost:9999/roomse ...
- SSH集成cxf 发布restful webservice
首先讲一下什么是restful webservice ,这个问题网上一搜有很多博文去长篇大论的介绍它,但是最后你看完了也会觉得云里雾里的,所以我在这里简单的讲一下我理解的rest webservice ...
- 使用CXF发布的WebService报错:org.apache.cxf.interceptor.Fault: The given SOAPAction does not match an operation
场景:JAVA语言使用CXF搭建WebService发布报错 错误信息:org.apache.cxf.interceptor.Fault: The given SOAPAction does not ...
- java通过HttpClient方式和HttpURLConnection方式调用WebService接口
1.引入maven依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifac ...
- [置顶] 利用CXF发布webService的小demo
其实webService的发布不仅仅只有xfire,今天,给大家介绍一下用CXF发布一个webService的小demo,CXF也是我做webService用的第一个框架... 先将相关的jar引进来 ...
- 使用CXF发布WebService
这里普及一下WebService和cxf的知识.关于webservice和cxf: WebService.各种提供服务的组件 .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axi ...
- CXF发布webService服务以及客户端调用
这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...
- 使用CXF发布WebService服务简单实例
一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...
随机推荐
- Floodlight 在 ChannelPipeline 图
我们知道,在Netty架构,一个ServerBootstrap用于生成server端的Channel的时候都须要提供一个ChannelPipelineFactory类型的參数,用于服务于建立连接的Ch ...
- HDU4565 && 2013年长沙邀请赛A题
部分转自http://blog.csdn.net/crazy______/article/details/9021169 #include<cstdio> using namespace ...
- WebIM(2)---消息缓存
WebIM系列文章 在一步一步打造WebIM(1)一文中,已经介绍了如何实现一个简单的WebIM,但是,这个WebIM有一个问题,就是每一次添加消息监听器时,都必须访问一次数据库去查询是否有消息,显然 ...
- CLR Profiler 性能分析工具
CLR Profiler 性能分析工具 CLR Profiler 性能分析工具 CLR Profiler 有两个版本,分别用于CLR1.1 和 CLR2.0,至于CLR4试了一些也可以,但不知道是否完 ...
- .NET MVC4 实训记录之五(访问自定义资源文件)
.Net平台下工作好几年了,资源文件么,大多数使用的是.resx文件.它是个好东西,很容易上手,工作效率高,性能稳定.使用.resx文件,会在编译期动态生成已文件名命名的静态类,因此它的访问速度当然是 ...
- In C# 代码实现
SOLID 设计原则 In C# 代码实现 [S] Single Responsibility Principle (单一职责原则) 认为一个对象应该仅只有一个单一的职责 namespace Si ...
- WinDbg 命令手册
WinDbg 命令三部曲:(一)WinDbg 命令手册 本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部 ...
- 二分法-C++
对于一个非线性方程f(x)=0求改方程的根,我们的思路可以这么想: 1.根的存在性.若该方程没有根,何必徒劳想法设法去求它的解呢?对于一个方程,我们怎么去找他的根,有连续函数零点定理可知:若有f(a) ...
- 【IOS开发】UItextfield输入电话号码,自动调整格式
UItextfield中实现输入电话号码,自动按位置在加“—”效果.效果图如下. 核心代码: -(BOOL)textField:(UITextField *)textField shouldChang ...
- Hadoop 使用FileSystem API 读取数据
代码: package com.hadoop; import java.io.IOException; import java.io.InputStream; import java.net.URI; ...