一、webservice是什么:webservice接口实际上就是http协议+soap协议,通过http请求把soap报文发送到对方服务器,然后对方服务器也是通过http请求把soap报文返回。

二、技术选型:
webservice接口开发有Axis2,Apche CXF和http等方式。
1.Axis2 技术老旧,使用不便,不推荐。
2.在有大量的webservice接口的情况下,不建议使用http请求方式,http请求方式需要对每一个webservice接口的soap报文进行解析,比较麻烦。推荐使用 Apche CXF,操作简单。
3.webservice服务数量比较少,且不希望引入Apche CXF这种第三方的jar包时可以直接使用http请求的方式。

三、通过http请求webservice服务
阅读本地代码前需要先学习一下soapUI这个工具,soapUI这个工具可以直接把webservice地址放到请求地址上面,就能够知道对应的soap报文是什么了。并且能够知道响应结果的soap报文。
本例子适合webservice启用了账号密码验证的情况,如果无需账号密码验证,只需要删掉验证代码即可。

package com.utils.sapxml;import com.utils.JaxbUtil;
import org.apache.http.HttpEntity;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URI;
import java.net.URISyntaxException;/*** 发送把SAP数据的soap报文到SAP系统的工具类*/
public  class  SapUtils {private static Logger logger = LoggerFactory.getLogger(SapUtils.class);/*** 获取SAP接口的soap报文** @param dataList* @param fileList* @return*/private static String getSAPXml(String dataList, String fileList) {String soaoXML = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:doa=\"http://www.dfl.com.cn/DOA\">" +"   <soapenv:Header/>" +"   <soapenv:Body>" +"      <doa:MT_OA2SAP_MM44_SND>" +dataList + fileList +"      </doa:MT_OA2SAP_MM44_SND>" +"   </soapenv:Body>" +"</soapenv:Envelope>";return soaoXML;}/*** 发送post请求* @param url 服务器地址* @param userName 账号* @param password 密码* @param body xml报文体* @return* @throws IOException* @throws URISyntaxException*/private static String sendHttpPost(String url, String userName, String password, String body) throws IOException, URISyntaxException {String UTF8 = "UTF-8";URI serverURI = new URI(url);// 身份认证CredentialsProvider credProvider = new BasicCredentialsProvider();credProvider.setCredentials(new AuthScope(serverURI.getHost(), serverURI.getPort()),new UsernamePasswordCredentials(userName, password));CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credProvider).build();HttpPost httpPost = new HttpPost(url);httpPost.addHeader("Content-Type", "text/xml");httpPost.setEntity(new StringEntity(body, UTF8));// 发送请求CloseableHttpResponse response = httpClient.execute(httpPost);HttpEntity entity = response.getEntity();// 获取请求结果String responseContent = EntityUtils.toString(entity, UTF8);response.close();httpClient.close();return responseContent;}/*** xml格式化,消除转义字符** @param inputXML* @return* @throws Exception*/private static String formatXml(String inputXML) throws Exception {String xml = null;SAXReader reader = new SAXReader();XMLWriter writer = null;Document document = reader.read(new StringReader(inputXML));try {if (document != null) {StringWriter stringWriter = new StringWriter();OutputFormat format = OutputFormat.createPrettyPrint();writer = new XMLWriter(stringWriter, format);// 取消转义writer.setEscapeText(false);writer.write(document);writer.flush();xml = stringWriter.getBuffer().toString();}} finally {if (writer != null) {try {writer.close();} catch (Exception e) {e.printStackTrace();}}}return xml;}/*** 发送SAP报文* @param url* @param userName* @param password* @param dataXml* @param fileXml* @return* @throws Exception*/public static String send(String url, String userName, String password,String dataXml, String fileXml) throws Exception {//封装请求体String xmlRequest = getSAPXml(dataXml, fileXml);// 格式化String xmlRequest2 = formatXml(xmlRequest);logger.info("【SAP报文】>>>>:{}:", xmlRequest2);//获取请求结果String xmlRequestFormat = sendHttpPost(url, userName, password, xmlRequest2);logger.info("【SAP报文】返回结果>>>>:{}:", xmlRequestFormat);//xml格式化String result = formatXml(xmlRequestFormat);return result;}/*** 发送请求, 且获取返回结果* 测试方法** @return*/public String execImpexpPaymentService() {String url = "填写webservice的url";String resultText = "";try {SapData data = new SapData();data.setErrorMonth("2022-01");data.setBukrs("1");String dataStr = JaxbUtil.convertToXml(data);SapFile file = new SapFile();file.setErrorMonth("2022-01");String fileStr = JaxbUtil.convertToXml(file);logger.info("【测试】接口调用>>>>:arg0:{},arg1:{}", dataStr, fileStr);//封装请求体String xmlRquest = getSAPXml(dataStr, fileStr);String xmlRquest2 = formatXml(xmlRquest);//获取请求结果String xmlRquestFormat = sendHttpPost(url, "WSUSER", "WSPASS", xmlRquest2);//xml格式化String result = formatXml(xmlRquestFormat);logger.info("【测试】接口结果>>>>result:{}:", result);} catch (Exception e) {e.printStackTrace();}return resultText;}public static void main(String[] args) {SapUtils httpUtil = new SapUtils();httpUtil.execImpexpPaymentService();}
}
package com.utils;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;/*** 把java对象转换为xml报文*/
public class JaxbUtil {/*** JavaBean转换成xml* 默认编码UTF-8* @param obj bean对象* @return xml报文*/public static String convertToXml(Object obj) {return convertToXml(obj, "UTF-8");}/*** JavaBean转换成xml* @param obj bean对象* @param encoding 编码* @return xml报文*/public static String convertToXml(Object obj, String encoding) {String result = null;try {JAXBContext context = JAXBContext.newInstance(obj.getClass());Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);// 是否省略xml头信息marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);StringWriter writer = new StringWriter();marshaller.marshal(obj, writer);result = writer.toString();} catch (Exception e) {e.printStackTrace();}return result;}
}

http请求webservice接口相关推荐

  1. Java通过soap1.1请求webservice接口

    首先获取到soap接口的wsdl地址,通过soapUI工具打开. 前提需要在配置的插件工具配置axis地址,axis-1_4可在我的资源里下载. 选择导出包的位置,生成代码. 将代码复制到java项目 ...

  2. httpclient请求webservice接口

    1.soapui新建一个webservice地址,例如http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?wsdl 2. 3. ...

  3. Html中使用jquery通过Ajax请求WebService接口以及跨域问题解决

    场景 VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用: VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用_霸道流氓气质的博客- ...

  4. jmeter压测学习47-发soap请求测试webservice接口

    前言 jmeter3 的版本可以新建一个SOAP/XML-RPC Request 的请求,直接测试webservice的接口. jmeter5.1.1 版本已经去掉了自带的SOAP/XML-RPC R ...

  5. 使用Fiddler调用WebService接口,模拟发HTTP请求

    1.百度一个免费WebService接口 如:天气预报http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 其下有一个方法 2.打开F ...

  6. ajax调用远程webservice,ajax跨域请求调用webservice接口

    最近忽然想学习webservice,一直不知道如何跨域调用调用.若是都在同一个项目,相信你们都知道了?特此整理一下关键点,权当学习.javascript 1.WebService 接口编写.这里不在赘 ...

  7. android调用web接口,Android调用webservice 接口

    以查询手机号码归属地的Web service为例,它的wsdl为 1 在Android项目中导入??Ksoap2-android jar第三方jar包?? 2 Activity代码 public cl ...

  8. webservice接口与HTTP接口学习笔记

    一.webservice 的概念 Web 是使应用程序可以与平台和编程语言无关的方式进行相互通信的一项技术.Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作 ...

  9. 给一份Webservice接口通用实现!!

    看到许多中小项目的webservice接口的源代码,不禁有个吐槽的冲动.除了会用CXF,Axis2等神级框架,其他的懒得动了,都是Ctrl+V,Ctrl+C,把其他模块的Request,Respons ...

  10. 转 ofbiz的webservice接口提供(1)-WSDL的生成

    ofbiz的service:这个是ofbiz赖以骄傲的设计方式.她可以将所有内部实体对象的CRUD都使用service的方式提供,不同系统之间可以通过互相调用service来完成业务操作.这种松耦合的 ...

最新文章

  1. 二叉搜索树的简明实现(ES5 ES6)
  2. python网络爬虫的基本步骤-Python网络爬虫学习手记(1)——爬虫基础
  3. FPGA笔录(2)-触发器与锁存器原理
  4. Matlab图形绘制
  5. [Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]
  6. 百度网盘Linux版放出deb包客户端:新增支持Ubuntu 18.04 LTS
  7. pc微信登录扫码显示无法连接服务器,WeAuth微信小程序实现PC网站扫码授权登录...
  8. java数据结构的面试题_Java面试题——数据结构篇(持续更新中)
  9. 【硬件】达林顿驱动电路ULN2000
  10. android fps测试 apk,性能测试 查看Android APP 帧数FPS的方法
  11. 中国智慧VS西方智慧-看中国IT风云
  12. 【Node.js】关于Node.js接口的详解和案例--restful风格接口。案例:添加商品接口,添加员工接口,删除员工接口
  13. [Python从零到壹] 五十八.图像增强及运算篇之图像锐化Sobel、Laplacian算子实现边缘检测
  14. python三维建模可视化_用Python三维可视化-一个神奇的函数
  15. 当你开始听不清这个世界的声音
  16. 杰理之虚拟U盘升级【篇】
  17. 复杂大脑网络的结构和功能
  18. php网站怎么给文件设置颜色,配置区块和文件颜色
  19. C语言实现,古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
  20. u盘插上去计算机没有,正常U盘插入电脑没反应?u盘插上没反应的绝对有效解决方法-太平洋电脑网...

热门文章

  1. Linux系统分区访问windows分区提示挂载失败
  2. 简约前端工程师简历PPT模板
  3. 程序员脱离苦海就靠这些绝招了了了。。。
  4. android 动画编辑器,开机动画编辑器 BootanimationEditor
  5. 远程过程调用(RPC)详解
  6. 数据库之战| 寻找你心中的数据库漫威英雄
  7. win7 win8 64位系统上装CAD2008挂燕秀外挂的办法
  8. Labview软件开发—界面切换—选项卡的应用
  9. HttpSession session用法详解
  10. 短视频系统行业分析,短视频源码功能剖析