因工作需要对接三方的webservice接口,根据对方提供的WSDL进行开发

1.将WSDL转为java文件,找到所需接口的入参与出参实体复制到本地项目,可直接作为调用的入参与回调的接收实体
可参考 cmd方式转WSDL为java文件

2 根据实体组装请求参数。因为请求的参数一般较为固定,所以这里将这个方法提出来每次传对应参数,主业务代码看起来更清晰。这里的VO就是我们转出来的入参实体

private VO getVO(){VO vo = new VO();return VO;}

3.根据请求参数组装soap xml

  private SOAPMessage createSoapMessage(String queryInterface,String queryBeanName,Object queryBean) throws SOAPException, IOException, IllegalAccessException {MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);SOAPMessage message = messageFactory.createMessage();message.setProperty(SOAPMessage.CHARACTER_SET_ENCODING,"utf-8");SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();//根据WSDL组装soap xmlenvelope.addNamespaceDeclaration("ser",CommonConstants.TC_TARGET_NAME_SPACE);SOAPBody body = envelope.getBody();SOAPElement bodyElement = body.addChildElement(queryInterface,"ser");SOAPElement queryElement = bodyElement.addChildElement(queryBeanName);//通过反射获取参数与值,动态添加到elementField[] fields = queryBean.getClass().getDeclaredFields();for(Field field : fields){field.setAccessible(true);Object value = field.get(queryBean);if(null != value){queryElement.addChildElement(field.getName()).setValue(value.toString());}}System.out.println("\r\n\r\n");message.writeTo(System.out);System.out.println("\r\n\r\n");return message;}

4.发送请求 。这里传interfaceName 主要是为了log日志时区分是请求的哪一个接口

  private List<Map<String,Object>> call(String interfaceName,SOAPMessage message) throws SOAPException, TransformerException, DocumentException, IOException {SOAPConnectionFactory connectionFactory =  SOAPConnectionFactory.newInstance();SOAPConnection connection = connectionFactory.createConnection();SOAPMessage response = connection.call(message, CommonConstants.TC_REQUEST_URL);Document doc = response.getSOAPPart().getEnvelope().getOwnerDocument();StringWriter writer = new StringWriter();TransformerFactory.newInstance().newTransformer().transform(new DOMSource(doc),new StreamResult(writer));Element root = DocumentHelper.parseText(writer.toString()).getRootElement();List<Map<String,Object>> resultMapList = new ArrayList<>();parseResult(root,resultMapList);//返回结果判断   return resultMapList;}/*** 通过根节点递归遍历数据* @param root*/private void parseResult(Element root,List<Map<String,Object>> resultMapList) {boolean flag =false;Map<String, Object> resultMap = new HashMap<String, Object>();if (root.elements() != null) {List<Element> list = root.elements();for (Element e : list) {if (e.elements().size() > 0) {parseResult(e,resultMapList);}if (e.elements().size() == 0) {flag = true;resultMap.put(e.getName(), e.getTextTrim());}}}if (flag) {resultMapList.add(resultMap);}}

5.主业务代码处理

soap方式调用webservice接口相关推荐

  1. Java,Axis方式调用WebService接口,支持多参数

    package com.demo.modules.si.util;import org.apache.axis.client.Call; import javax.xml.rpc.ParameterM ...

  2. java用axis方式调用webservice接口

    最近需要使用webservice接口,所以总结了一下全过程,希望能够对大家有所帮助. 开发使用的项目框架是ssm框架,tomcat服务器. 首先我们会拿到一个调用webservice接口的网址,类似这 ...

  3. java httpclient访问webservice_java通过HttpClient方式和HttpURLConnection方式调用WebService接口...

    1.引入maven依赖: org.apache.httpcomponents httpclient 4.5 2.请求工具类: package com.hanvon.iface.web.utils; i ...

  4. HttpClient调用WebService接口

    文章目录 前言 WebService是什么? WebService原理? HttpClient是什么? HttpClient应用场景? 使用HttpClient调用WebService接口 1.创建H ...

  5. 利用axis调用webservice接口

    package test;import javax.xml.namespace.QName;import org.apache.axis.client.Call; import org.apache. ...

  6. VC++使用Soap ToolKit3.0调用WebService接口

    由于项目需要,需要实现VC调用WebService接口,之前没接触过这个,所以花了一天找了点资料,并自己编写了demo. 1. 首先看了Soap相关资料,见http://www.w3school.co ...

  7. SoapUI调用webservice接口,http+post方式模仿soapui调用webservice接口

    ` SoapUI调用webservice接口,http+post方式模仿soapui调用webservice接口 项目上调用一个第三方公司提的的webservice短信接口,使用了以下几种接口调用技术 ...

  8. python发送soap报文_python用http发送soap报文进行webservice接口调用

    最近学习了python用http发送soap报文进行webservice接口调用,从网上找了些资料,为了方便下次温习,在此留下代码片段,也望高手指点: #!/usr/bin/env python # ...

  9. vue 调用webservice_动态调用WebService接口的几种方式

    一.什么是WebService? 这里就不再赘述了,想要了解的====>传送门 二.为什么要动态调用WebService接口? 一般在C#开发中调用webService服务中的接口都是通过引用过 ...

最新文章

  1. 在Bash脚本中,如果发生某种情况,如何退出整个脚本?
  2. ICLR论文盲审大反转:三个“8”完美过关,又来两个“1”彻底拒绝
  3. VPS批量管理软件--远程桌面批量管理
  4. Eclipse jar包打不进apk
  5. Spring Boot中带有CKEditor的AJAX
  6. html动态计算高度,透明半透明背景
  7. 乐观锁和悲观锁_什么是悲观锁和乐观锁?
  8. jqGrid表格展示简单实例
  9. 5,线程池,进程池,协程,IO模型
  10. 95-910-146-源码-FlinkSQL-Flink SQL中TableFunction使用分析
  11. [undo]ip address ppp-negotiate
  12. Linux里常见术语的缩写
  13. 2019语言与智能技术竞赛
  14. 基本地图加载完整示例
  15. C# 图书管理系统(MySQL)——代码(四)
  16. TP340G+硬改山寨UBNT,
  17. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fa
  18. 202.微信公众号开发【图文消息】
  19. bcmsh交换芯片调试接口
  20. html里列表前的空心圆圈,如何在HTML中创建带有圆圈项目符号的无序列表?

热门文章

  1. 语义网简介(非应用)
  2. 机器人动力学与控制学习笔记(十)————自适应控制(模型参考自适应控制)
  3. 传感器实验——RFID RC522
  4. Spring @Order注解详解
  5. Truthy、Falsy与true、false的区别
  6. 九章算数 七:《盈不足》
  7. php AJAX实例根据邮编自动完成地址信息
  8. 用组织分析框架分析北京大学首钢医院
  9. Linux下PS1、PS2、PS3、PS4使用详解
  10. 主流计算虚拟化技术/华为的产品介绍