soap方式调用webservice接口
因工作需要对接三方的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接口相关推荐
- Java,Axis方式调用WebService接口,支持多参数
package com.demo.modules.si.util;import org.apache.axis.client.Call; import javax.xml.rpc.ParameterM ...
- java用axis方式调用webservice接口
最近需要使用webservice接口,所以总结了一下全过程,希望能够对大家有所帮助. 开发使用的项目框架是ssm框架,tomcat服务器. 首先我们会拿到一个调用webservice接口的网址,类似这 ...
- java httpclient访问webservice_java通过HttpClient方式和HttpURLConnection方式调用WebService接口...
1.引入maven依赖: org.apache.httpcomponents httpclient 4.5 2.请求工具类: package com.hanvon.iface.web.utils; i ...
- HttpClient调用WebService接口
文章目录 前言 WebService是什么? WebService原理? HttpClient是什么? HttpClient应用场景? 使用HttpClient调用WebService接口 1.创建H ...
- 利用axis调用webservice接口
package test;import javax.xml.namespace.QName;import org.apache.axis.client.Call; import org.apache. ...
- VC++使用Soap ToolKit3.0调用WebService接口
由于项目需要,需要实现VC调用WebService接口,之前没接触过这个,所以花了一天找了点资料,并自己编写了demo. 1. 首先看了Soap相关资料,见http://www.w3school.co ...
- SoapUI调用webservice接口,http+post方式模仿soapui调用webservice接口
` SoapUI调用webservice接口,http+post方式模仿soapui调用webservice接口 项目上调用一个第三方公司提的的webservice短信接口,使用了以下几种接口调用技术 ...
- python发送soap报文_python用http发送soap报文进行webservice接口调用
最近学习了python用http发送soap报文进行webservice接口调用,从网上找了些资料,为了方便下次温习,在此留下代码片段,也望高手指点: #!/usr/bin/env python # ...
- vue 调用webservice_动态调用WebService接口的几种方式
一.什么是WebService? 这里就不再赘述了,想要了解的====>传送门 二.为什么要动态调用WebService接口? 一般在C#开发中调用webService服务中的接口都是通过引用过 ...
最新文章
- 在Bash脚本中,如果发生某种情况,如何退出整个脚本?
- ICLR论文盲审大反转:三个“8”完美过关,又来两个“1”彻底拒绝
- VPS批量管理软件--远程桌面批量管理
- Eclipse jar包打不进apk
- Spring Boot中带有CKEditor的AJAX
- html动态计算高度,透明半透明背景
- 乐观锁和悲观锁_什么是悲观锁和乐观锁?
- jqGrid表格展示简单实例
- 5,线程池,进程池,协程,IO模型
- 95-910-146-源码-FlinkSQL-Flink SQL中TableFunction使用分析
- [undo]ip address ppp-negotiate
- Linux里常见术语的缩写
- 2019语言与智能技术竞赛
- 基本地图加载完整示例
- C# 图书管理系统(MySQL)——代码(四)
- TP340G+硬改山寨UBNT,
- This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fa
- 202.微信公众号开发【图文消息】
- bcmsh交换芯片调试接口
- html里列表前的空心圆圈,如何在HTML中创建带有圆圈项目符号的无序列表?