由于这个接口的报文格式比较麻烦,是XML的请求头加上JSON格式的请求体,所以看起来比较复杂,也可以用RPC的方式调用,那样需要将请求头和请求体,响应头和响应体建实体。

public JSONObject sendReq(PortTypeEnum portTypeEnum,JSONObject reqBody){
Main main = new Main();
MainPortType mainPortType = main.getMainHttpSoap11Endpoint();
SendXmlResponse sendXmlResponse = new SendXmlResponse();
sendXmlResponse.setOutBody("");
sendXmlResponse.setOutHead("");

//修改请求URL
BindingProvider bp = (BindingProvider)mainPortType;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,getEndPointURL());
//设置请求头信息
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

//拼接请求头信息
String sendHead = "<![CDATA[<?xml version=\"1.0 \"encoding\" UTF-8\" ?>" +
"<reqInfo>" +
"<clientID>" + getClientID() + "</clientID>" +
"<reqTime>" + sf.format(new Date()) + "</reqTime>" +
"<tarService>" + portTypeEnum.getPortValue() + "</tarService>" +
"<reqPWD>" + MD5Util.MD5(getReqPWD()) + "</reqPWD>" +
"<Code></Code>" +
"<Message></Message>" +
"</reqInfo>]]>";
//响应头体信息
Holder<String> outHead = new Holder<String>(sendXmlResponse.getOutHead());
Holder<String> outBody = new Holder<String>(sendXmlResponse.getOutBody());
logger.info("调用远程共享接口,请求方法:{}", portTypeEnum.getDescribe());
logger.info("调用远程共享接口,请求参数:{}", reqBody.toJSONString());
//发送请求
mainPortType.sendXml(sendHead, reqBody.toJSONString(), outHead, outBody);
logger.info("调用远程共享接口,返回头:{}", outHead.value);
logger.info("调用远程共享接口,返回体:{}", outBody.value);

//记录日志
FaiBusinessLog log = new FaiBusinessLog();
log.setOperCreateTime(sf.format(new Date()));
log.setOperMethod(portTypeEnum.getPortName());
log.setOperUserId(UserContextHolder.getCurrentUser().getUserCode());
log.setOperUserName(UserContextHolder.getCurrentUser().getUserNameCn());
log.setOperRequest(sendHead + "\n" + reqBody.toJSONString());
log.setOperResponse(outHead.value + "\n" + outBody.value);
logger.info(log.toString());
faiBusinessLogService.save(log);

JSONObject re = new JSONObject();
if (outBody.value == null){
JSONObject jsonObject = OutHead.xmlToJSONObject(outHead.value);
logger.info("远程接口调用失败,{}",jsonObject);
return jsonObject;
}
logger.info("调用远程共享接口,返回参数:{}",outBody.value);
re.getJSONObject(outBody.value);
re = JSONObject.parseObject(outBody.value);
if (re.getString("status") == null){
re.put("status","共享接口返回为null,请联系共享人员处理");
}
re.put("sendBody",reqBody.toJSONString());
return re;
}

使用IDEA的webservice工具解析生成的客户端调用远程接口的更多相关文章

  1. Java模拟http请求调用远程接口工具类

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  2. 最终版-perl工具解析数据库的报告文件0120

    ********************需要根据自己的实际环境修改哦**************************** ******************** 1. 收集awr报告样本   a ...

  3. 带SSL证书的httpclient 远程接口工具类

    package com.iups.wx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; i ...

  4. 用JDK自带的工具生成客户端调用Webservice的代码

    JAVA下客户端调用Webservice代码简直是让人心生畏惧,今日尝试,做记录如下,参考网上的众多解决方案,下面这种方式是比较简单的. 在jdk的bin目录下有一个wsimport.exe的工具,使 ...

  5. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

  6. VS添加WebService工具

    最近在做和WebService相关的项目,因为只是在学校里面用过,出来工作一直没有用到,所以不是很熟悉,于是自己配置了一个WebService工具给添加到了VS(VisualStudio)里面,其实就 ...

  7. Chromium的Grit工具解析

    转载请注明出处:http://www.cnblogs.com/fangkm/p/3405959.html Chromium项目采用Grit工具来打包生成程序需要的资源,如图片资源.字符串资源等,尤其是 ...

  8. 根据wsdl文件,Java工程自动生成webservice客户端调用

    根据wsdl文件,Java工程自动生成webservice客户端调用 1,工具:带有webservice插件的myeclips 2,步骤: (1),新建一个Java工程:relationship (2 ...

  9. 根据wsdl文件,Web工程自动生成webservice客户端调用

    根据wsdl文件,Web工程自动生成webservice客户端调用 1,工具:带有webservice插件的eclips 2,步骤: (1),新建一个Web工程:WSDLTest (2),浏览器访问W ...

  10. doxygen+ graphviz 开源工具生成源码调用树的wiki

    当拿到一含有大量代码的工程怎么看?!这时一个好的代码分析工具非常有用,网上有很多开源工具,但资料都参差不齐,偶然发现doxygen+ graphviz这两工具非常棒,使用工具直接生成函数调用链图,帮助 ...

随机推荐

  1. WPF 轨迹动画

    1.后台 public MainWindow() { InitializeComponent(); /// <summary> /// Window2.xaml 的交互逻辑 /// < ...

  2. 《OKR源于英特尔和谷歌的目标管理利器》读书笔记

    17年10月下旬至11月,因团队需要改变考核方式以及更好的服务业务,Q4将尝试OKR的方式进行考核,故阅读了此书,有些想法与笔记. OKR定义:OKR是一套严密的思考框架和持续的纪律要求,旨在确保员工 ...

  3. C#如何将光标定位到文本框末尾(最后一位)

    代码如下:private void Movetoend(){//让文本框获取焦点this.TextBox1.Focus();//设置光标的位置到文本尾this.TextBox1.Select(this ...

  4. CF652F 题解

    题意 传送门 在一个长度为 \(m\) 的圆环上有 \(n\) 只初始位置互不相同的蚂蚁,每只蚂蚁的速度都为 \(1\),初始方向为顺时针或逆时针:两只运动方向不同的蚂蚁相遇时会调转方向,问 \(t\ ...

  5. TODOList小黄条

    TODOList http://www.yynote.cn/ 总结 windows中的神器

  6. Django 之 ORM2

    1. 多表操作 1.1 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者 ...

  7. js实现不同的域名 输出不同的结果

    js实现域名判断后跳转到指定网址,也适用于同一虚拟空间放多个网站: <script> try { if(self.location == "http://apple.baidu. ...

  8. layui弹出层layer点击关闭还会显示在html中

    我的弹出层是这样定义的: 它的属性为display:none <div id="divlayer" style="display:none"> &l ...

  9. Python的入门学习之 Day 7——from“夜曲编程”

    Day 7 time: 2021.8.4. 今天主要将"if-else"再扩展, 得到"if-elif-else"模型.它与"if-else" ...

  10. 4、Redis底层原理(持久化+分布式锁)

    Redis底层原理 持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即 ...