WebService soap报文请求返回xml格式以及自定义soap模板

您所在的位置:网站首页 如何更改返回方式 WebService soap报文请求返回xml格式以及自定义soap模板

WebService soap报文请求返回xml格式以及自定义soap模板

2024-07-02 23:40| 来源: 网络整理| 查看: 265

需求

上篇文章主要讲了一个springboot集成webservice的例子,这次我们根据已经做好的webservice服务端,做一个soap接口请求,要求请求以soap报文方式请求,返回值为xml格式

这是上篇:springboot集成webservice以及遇到的问题

soap请求接口实现

这是请求报文以及响应的报文的信息

 

 

soap接口所需要的参数信息:

soap接口代码如下:

public static void main(String[] args) { String postUrl="http://localhost:8888//services/user?wsdl";//webservicve接口地址 String soapAction="";//"http://tempuri.org/execute"; String namespace="http://webservice.zjqf.com/";//命名空间 int paramsNum=0;//参数个数 String[] params={};//参数组 String result=SoapUtil.SplicingMessage(namespace, postUrl, soapAction, "getAllData", paramsNum, params);//访问接口 System.out.println("返回的数据为:"+result); }

工具类soapUtil

/** * 访问webservice接口 * @param namespace 命名空间 * @param postUrl webservice接口地址 * @param soapAction soapAction地址 * @param method 方法名 * @param paramsNum 参数个数 * @param params 参数组 * @return 返回值 */ public static String SplicingMessage(String namespace,String postUrl,String soapAction,String method,int paramsNum,String[] params){ //自定义soap报文模板 注意:xmlns:web 与后的属性(web)要一致 StringBuffer sb=new StringBuffer(""); for (int i = 0; i < paramsNum; i++) { sb.append(""+params[i]+""); } sb.append(""); String result=doPostSoap1_1(postUrl, sb.toString(), soapAction); // int start = result.indexOf("")+8; // int end = result.indexOf(""); // return result.substring(start,end); return result; } /** * 使用SOAP1.1发送消息 * * @param postUrl * @param soapXml * @param soapAction * @return */ public static String doPostSoap1_1(String postUrl, String soapXml, String soapAction) { String retStr = ""; // 创建HttpClientBuilder HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); // HttpClient CloseableHttpClient closeableHttpClient = httpClientBuilder.build(); HttpPost httpPost = new HttpPost(postUrl); // 设置请求和传输超时时间 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(socketTimeout) .setConnectTimeout(connectTimeout).build(); httpPost.setConfig(requestConfig); try { httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8"); httpPost.setHeader("SOAPAction", soapAction); StringEntity data = new StringEntity(soapXml, 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"); } // 释放资源 closeableHttpClient.close(); } catch (Exception e) { } return retStr; }

返回xml信息:

 

题外

以下纯属个人理解,如果有误,感谢大家指正

如果要返回xml格式的话,一定要将Content-Type设置为xml格式;

httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8"); 如果要返回json格式,需变为json

自定义soap模板时,此处不适用含有@WebMethod修饰的方法 因为他需要指定的参数名字,而这里使用的都是arg0

for (int i = 0; i < paramsNum; i++) { sb.append(""+params[i]+""); }

另外,对于处理这些soap报文请求时,推荐大家一款接口测试神器:soapUi 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3