RestTemplate调用Webservice接口

RestTemplate调用Webservice接口

restTemplate的方式主要就是拼接xml,利用soapUI打开webservice连接之后,可以看到界面话的xml的格式,通过代码层手动构建拼接xml,然后再去发起请求。
***ps:不同的webservice对应的xml是不同的,看具体soapUI中服务的格式***

开启restTemplate

@Configuration
public class RestTemplateConfig {
	
	@Bean
	public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
		return new RestTemplate(factory);
	}

	@Bean
	public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
		SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
		factory.setReadTimeout(3000);
		factory.setConnectTimeout(9000);
		return factory;
	}

}

方法实现(部分代码)

model对象

@Data
public class HttpRequestDto {
	// 服务地址
	private String url;
	// 命名空间
	private String nameSpace;
	// 具体服务名
	private String service;
	// 请求体
	private JSONObject body;
	// 请求头
	private Map<String, String> header = new HashMap<>();
}
@Service
public class WebServiceImpl {
	
	@Autowired
	private RestTemplate restTemplate; 
	
	public JSONObject sendWebService (HttpRequestDto httpRequestDto) {
		String url = httpRequestDto.getUrl();
		String nameSpace = httpRequestDto.getNameSpace();

		// 创建对象用于xml的拼接
		StringBuffer soapRequestData = new StringBuffer("");
		soapRequestData.append("<soapenv:Envelop xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"" + nameSpace + "\">");
		
		// 如果xml有请求头
		Map<String, String> headerMap = httpRequestDto.getHeader();
		if (null != headerMap && !headerMap.isEmpty()) {
			soapRequestData.append("<soapenv:Header>");
			soapRequestData.append("tns:RequestSOAPHeader xmlns:tns\"" + headerMap.get("RequestSOAPHeader") + "\">");
			for(Map.Entry<String, String> entry : headerMap.entrySet()) {
				soapRequestData.append("<tns:" + entry.getKey() + ">");
				soapRequestData.append(entry.getValue());
				soapRequestData.append("</tns:" + entry.getKey() + ">");
			}
			soapRequestData.append("</tns:RequestSOAPHeader>");
			soapRequestData.append("</soapenv:Header>");
		} else {
			soapRequestData.append("<soapenv:Header/>");
		}

		// body
		soapRequestData.append("<soapenv:Body>");
		String service = httpRequestDto.getService();
		soapRequestData.append("<web:" + service + ">");
		soapRequestData.append("<arg0>");

		JSONObject body = httpRequestDto.getBody();
		Iterator<String> bodyIterator = body.keySet().iterator();
		while(bodyIterator.hasNext()) {
			String key = bodyIterator.nect();
			String value = body.getString(key);
			soapRequestData.append("<" + key + ">");
			soapRequestData.append(value);
			soapRequestData.append("</" + key + ">");
		}
		soapRequestData.append("</arg0>");
		soapRequestData.append("</web:" + service + ">");
		soapRequestData.append("</soapenv:Body>");
		soapRequestData.append("</soapenv:Envelope>");
		
		// 设置http请求头
		HttpHeaders headers = new HttpHeaders();
		MediaType mediaType = MediaType.parseMediaType("text/xml;charset=UTF-8");
		headers.setContentType(mediaType);

		HttpEntity<String> httpEntity = new HttpEntity<>(soapRequestData.toString(), headers);
		// 结果打印出来,自行截取解析即可
		String reslut = restTemplate.postForObject(url, httpEntity, String.class);
		
		
	}
	
}

soapRequestData对象为手动拼接的完整xml,打开soapUI可以进行对比发起访问测试,只要构建出相同的xml格式就能发起

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值