webservice soap调用

发起方:

1.先把需要发送的数据整成xml的形式

2.发送(声明httpclient也就是客户端,选择发送方式:get/post,包装一下发送内容:设置下,地址,数据类型啥的,然后execute发送,这里数据直接使用的xml格式的,也可以选择拼接在URL后面,或者选择url设置setParameter(List类型)放置数据)

DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(目标地址:url);

    StringEntity entity = new StringEntity(xml数据:data, 数据类型:contentType, 字符集:charset);           
    httppost.setEntity(entity);      
    if (soapAction != null) {
        httppost.addHeader("SOAPAction", soapAction);
    }              
     调用远程,并获取返回信息  
    HttpResponse response = httpClient.execute(httppost);
      返回数据体
    HttpEntity en = response.getEntity();
  statusCode = response.getStatusLine().getStatusCode();
   //通过流获取数据
    responseText = EntityUtils.toString(en, charset);
//对数据体根据标签获取有效片段进行文本转换,最后转化为需要的数据类型进行处理
Document doc = null;
doc = DocumentHelper.parseText(responseText );
Element businessdata = (Element) doc.selectSingleNode("//return");
JSONArray je = JSONArray.fromObject(businessdata.getText());
List> list = (List) JSONArray.toList(je, new HashMap(), new JsonConfig());

//最后要注意关闭连接

httpClient.getConnectionManager().shutdown();

接收方:

   接收方是单独拉出来做的一个小项目,专门用作远程调用的,说白了也就是一个servlet。

1.先判断下传递过来数据的类型,再选择下一步处理

    String contentType = request.getContentType();

2.解析数据,对nodes进行遍历,获取node,将nodexml化,然后通过document转化遍历,获取数据封装成需要的数据类型进行处理。回应数据时,将需要返回的数据装入指定的xml样式体内的指定标签下(InputStream,Document),xml化后返回 。

             InputStream inputStream = request.getInputStream();
                //解析器 
                SAXReader saxReader = new SAXReader();         
                Document document = saxReader.read(inputStream);

  HashMap map = new HashMap();
  map.put( "edx", "http://www.edankert.com/examples/");

  XPath xpath = new Dom4jXPath( "//edx:cd");

//设置下前缀-命名空间,为了取出命名空间的元素
  xpath.setNamespaceContext( new SimpleNamespaceContext( map));
  List nodes = xpath.selectNodes( document);

 

你可能感兴趣的:(webservice)