当前位置: 首页 > news >正文

Webservice如何调用

webservice调用方式:

(1)http方式调用

请求头增加Content-type:text/xml 或application/soap+xml

SOAPAction:方法名

请求body以xml字符串传递,xml格式定义

返回以xml字符串返回,xml某个字段是一个json字符串。

入参如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dhcc="http://www.dhcc.com.cn"><soapenv:Header/><soapenv:Body><dhcc:方法名><!--Optional:--><dhcc:inputJsonStream><![CDATA[
json串...
]]></dhcc:inputJsonStream></dhcc:方法名></soapenv:Body>
</soapenv:Envelope>

curl -XPOST -H 'Content-Type:text/xml' -d '<xml></xml>'  webserviceurl

 curl -X POST -H 'Content-Type:application/soap+xml' -d @test.xml  webserviceurl,其中xml文件以本地文件的方式传递

   public static String callWebService(String webserviceurl, String method, String sendMsg, String contentType) {String retStr = "";HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();CloseableHttpClient closeableHttpClient = httpClientBuilder.build();HttpPost httpPost = new HttpPost(webserviceurl);// 设置请求和传输超时时间RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build();httpPost.setConfig(requestConfig);try {httpPost.setHeader("Content-Type", contentType);httpPost.setHeader("SOAPAction", method);StringEntity data = new StringEntity(sendMsg,Charset.forName("UTF-8"));httpPost.setEntity(data);CloseableHttpResponse response = closeableHttpClient.execute(httpPost);HttpEntity httpEntity = response.getEntity();if (httpEntity != null) {retStr = EntityUtils.toString(httpEntity, "UTF-8");logger.debug("url:{} ret:{}", url, retStr);return retStr;}} catch (Exception e) {logger.error("callWebService", e);} finally {// 释放资源try {closeableHttpClient.close();} catch (IOException e) {logger.error("close", e);}}return null;}

(2)通过apache的webservice工具调用

Client client = WsClientUtil.getClient(notifyUrl);try {Object[] objects = client.invoke(method, getjson());if (objects != null) {result = (String)objects[0];log.info(result);log.info("耗时:" +(System.currentTimeMillis() - start));}} catch (Exception e) {throw new RuntimeException("WebSocket请求异常");}}
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** 获取Client*/
public class WsClientUtil {private static final JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();private static final Map<String, Client> clientMap = new ConcurrentHashMap(256);public static Client getClient(String wsUrl) {// 创建动态客户端
//        JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();//根据WebServices接口地址创建clientif (clientMap.get(wsUrl) == null) {synchronized (WsClientUtil.class) {if (clientMap.get(wsUrl) == null) {Client client = clientFactory.createClient(wsUrl);HTTPConduit conduit = (HTTPConduit) client.getConduit();HTTPClientPolicy policy = new HTTPClientPolicy();policy.setAllowChunking(false);// 连接服务器超时时间 3秒policy.setConnectionTimeout(5000);// 等待服务器响应超时时间 3秒// 等待服务器响应超时时间 3秒policy.setReceiveTimeout(5000);conduit.setClient(policy);clientMap.put(wsUrl, client);return client;}}}return clientMap.get(wsUrl);}
}

但今天测试时,使用curl -X POST -H 'Content-Type:application/soap+xml' -d '' 可以通,用java客户端调用就报错。。具体为什么还不知道。


http://www.mrgr.cn/news/94367.html

相关文章:

  • 【Node.js入门笔记4---fs 目录操作】
  • 微信小程序从右向左无限滚动组件封装(类似公告)
  • AI学习——深度学习核心技术深度解析
  • Linux--gdb/cgdb
  • Linux入门 全面整理终端 Bash、Vim 基础命令速记
  • 缓存和客户端数据存储体系(Ark Data Kit)--- 应用数据持久化(首选项持久化、K-V、关系型数据库)持续更新中...
  • Ubuntu20.04安装运行DynaSLAM
  • ArcGIS Pro 车牌分区数据处理与地图制作全攻略
  • 深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现
  • 考研408-数据结构完整代码 线性表的顺序存储结构 - 顺序表
  • 【Java从入门到精通】一篇文章彻底搞懂:类和对象到底是什么?
  • Mysql-经典实战案例(2)—数据误删如何恢复?
  • 航空电动力系统适航标准要点手册
  • dify+mysql的诗词助手
  • 【从零开始学习计算机科学】数据库系统(七)并发控制技术
  • LLM(1):了解大语言模型
  • 音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)
  • React Next项目中导入Echart世界航线图 并配置中文
  • 【Golang】第五弹----函数
  • 【从零开始学习计算机科学】数据库系统(五)DBMS查询处理