使用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通信的更多相关文章

  1. CXF发布restful WebService的入门例子(客户端)

    上篇说了怎么用cxf发布restful webservice,由于浏览器只能对该service发送http的GET请求,所以如果想对服务器上的数据,还需要实现客户端. 客户端的实现方式有无数种...可 ...

  2. CXF发布restful WebService的入门例子(服务器端)

    研究了两天CXF对restful的支持.   现在,想实现一个以 http://localhost:9999/roomservice 为入口, http://localhost:9999/roomse ...

  3. SSH集成cxf 发布restful webservice

    首先讲一下什么是restful webservice ,这个问题网上一搜有很多博文去长篇大论的介绍它,但是最后你看完了也会觉得云里雾里的,所以我在这里简单的讲一下我理解的rest webservice ...

  4. 使用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 ...

  5. java通过HttpClient方式和HttpURLConnection方式调用WebService接口

    1.引入maven依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifac ...

  6. [置顶] 利用CXF发布webService的小demo

    其实webService的发布不仅仅只有xfire,今天,给大家介绍一下用CXF发布一个webService的小demo,CXF也是我做webService用的第一个框架... 先将相关的jar引进来 ...

  7. 使用CXF发布WebService

    这里普及一下WebService和cxf的知识.关于webservice和cxf:   WebService.各种提供服务的组件     .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axi ...

  8. CXF发布webService服务以及客户端调用

    这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...

  9. 使用CXF发布WebService服务简单实例

    一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...

随机推荐

  1. 快速构建Windows 8风格应用1-开发工具安装及模拟器使用

    原文:快速构建Windows 8风格应用1-开发工具安装及模拟器使用 本篇博文主要介绍的是开发Windows 8风格应用中常用的两个开发工具:Visual Studio 2012和Expression ...

  2. LibVLC audio controls

    原文 http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__audio.html LibVLC audio co ...

  3. 2.1 LINQ的查询表达式

    在进行LINQ查询的编写之前,首先需要了解查询表达式.查询表达式是LINQ查询的基础,也是最常用的编写LINQ查询的方法. 查询表达式由查询关键字和对应的操作数组成的表达式整体.其中,查询关键字是常用 ...

  4. 图文解说PhpStorm 7.0版本语法着色

    前不久,我们测试了PhpStorm7.0版本对PHP 5.5的支持,今天我们将继续对PhpStorm 7.0版本对代码支持进行测试. 我们知道,在PhpStorm 6.0版本中,提供一个黑色背景的代码 ...

  5. kvm与qemu

    载请注明出处: http://www.openext.org/2014/04/kvmqemu/ http://blog.csdn.net/muge0913/article/details/245577 ...

  6. Apache2.4.x与Apache2.2.x的一些区别

    改用Apache2.4一段时间了,一直没发现它和Apache2.2的有什么区别,一些基本配置都是差不多,直到前几天配置虚拟主机是才发现了一些小小的不同 一直以来我都是在htdocs目录下配置虚拟主机的 ...

  7. C#编程实践—EventBroker简单实现

    前言 话说EventBroker这玩意已经不是什么新鲜货了,记得第一次接触这玩意是在进第二家公司的时候,公司产品基础架构层中集成了分布式消息中间件,在.net基础服务层中使用EventBroker的模 ...

  8. Repository 仓储

    Repository 仓储 写在前面 首先,本篇博文主要包含两个主题: 领域服务中使用仓储 SELECT 某某某(有点晕?请看下面.) 上一篇:Repository 仓储,你的归宿究竟在哪?(二)-这 ...

  9. QTP DataTable全攻略(1)

    上一篇 / 下一篇  2009-07-27 00:14:16 / 个人分类:qtp 查看( 575 ) / 评论( 0 ) / 评分( 0 / 0 ) 下面的代码可能有点乱,基本涉及到常用的datat ...

  10. sql材料分级统计及汇总案例参考

    --第一步:根据系统编号.列.单价分组求和 select CLBH,DJ,sum(SL) as SL,sum(JE) as JE,Lie into #TempSZCMX from #ShouZhiCu ...