首页 > 基础资料 博客日记
java调用webservice接口
2025-01-01 12:00:06基础资料围观47次
前言
WebService接口和RESTful接口,都是用于在互联网上进行数据传输和交互的技术手段。那它们有什么区别呢?在java中又如何调用WebService接口呢?
一、什么是WebService接口,同RESTful接口有什么区别
WebService接口:
WebService(也称为SOAP WebService)是一种基于XML格式进行数据传输的互联网服务。它通过使用HTTP或HTTPS等协议,在互联网上实现数据的传输和交互。WebService接口具有平台无关性,能够通过XML等格式描述不同系统的交互行为。Webservice可以实现数据的统一和集中的管理和交换,具有良好的数据描述、管理以及与数据系统的接口技术能力。
RESTful接口:
RESTful API(Representation State Transferful Application Programming Interface)则是一种面向资源设计的设计理念在网络应用程序的编程方式中形成的API标准。简单来说,它以更灵活的Web交互为基点,对信息进行格式化或传递化后设计一种便于进行交换或共享的接口。RESTful接口使用HTTP协议进行通信,并且通常使用JSON或XML等格式来传输数据。这种接口设计风格具有轻量级、易于理解、易于实现等特点,因此在现代Web开发中得到了广泛应用。
两者的区别:
1、架构设计:WebService基于SOAP协议,是一种基于XML的协议,而RESTful接口则基于HTTP协议,使用JSON或XML等格式进行数据传输。
2、灵活性:RESTful接口更加灵活和轻量级,可以更好地适应现代Web开发的需求。而WebService则相对较为复杂和笨重。
3、平台无关性:WebService虽然具有一定的平台无关性,但相对来说较为受限。而RESTful接口具有更好的跨平台性,可以在不同系统和设备之间轻松地交换数据。
4、数据交换方式:WebService使用SOAP协议进行数据交换,而RESTful接口则通过HTTP协议进行数据请求和响应的交互。
总结:
相比较而言,RESTful接口在应用上更加灵活和广泛。由于其轻量级、易于理解和实现的特点,RESTful接口在现代Web开发中得到了广泛的应用。它能够更好地适应不同系统和设备之间的数据交换需求,具有更好的跨平台性和可扩展性。而WebService虽然也具有平台无关性,但相对来说较为复杂和受限。
二、java调用WebService接口
java调用WebService接口有多种方式,比如通过HttpURLConnection、生成java客户端、AXIS或者通过HttpClient,这些方式尝试之后还是比较喜欢通过HttpClient方式来调用,代码如下:
1.maven仓库地址
<!--httpClient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.3.4</version>
</dependency>
<!--dom4j,解析返回值使用-->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version>
</dependency>
<!--hutoll-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.32</version>
</dependency>
2.代码示例如下
import cn.hutool.core.collection.CollectionUtil;
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.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.List;
/**
* httpClient方式调用webservice接口
*/
public class WebServiceTest {
public static void main(String[] args) throws Exception{
doWebService();
}
public static String doWebService() throws Exception{
//url去除wsdl(接口来源于网络)
String url="http://www.dneonline.com/calculator.asmx";
/**
* Subtract通过wsdl文档中<wsdl:message> 和 <wsdl:part>获取
* http://tempuri.org/为wsdl中targetNamespace值
* intA和intB在wsdl文档对Subtract方法描述中
* */
String param= "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"<soap:Body>" +
"<Subtract xmlns=\"http://tempuri.org/\">" +
"<intA>10</intA>" +
"<intB>5</intB>" +
"</Subtract>" +
"</soap:Body>" +
"</soap:Envelope>";
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost=new HttpPost(url);
//设置请求头
httpPost.addHeader("Content-Type","text/xml; charset=utf-8");
//获取wsdl中SOAPAction值
httpPost.addHeader("SOAPAction", "http://tempuri.org/Subtract");
httpPost.setEntity(new StringEntity(param));
CloseableHttpResponse response = httpClient.execute(httpPost);
String result = EntityUtils.toString(response.getEntity());
System.out.println("获取webservice返回值:"+result);
String subtractResult = getResult(result, "SubtractResult");
System.out.println("获取接口返回值:"+subtractResult);
return subtractResult;
}
/**
* 解析接口返回值(简易处理)
* @param webserviceResult 接口返回值
* @param resultName 返回值名称
* @return
* */
public static String getResult(String webserviceResult,String resultName) throws Exception{
Document document = DocumentHelper.parseText(webserviceResult);
Element rootElement = document.getRootElement();
return forElement(rootElement,resultName);
}
/**
* 递归匹配resultName值
* @param element
* @param resultName
* @return
* */
public static String forElement(Element element,String resultName){
List<Element> elements = element.elements();
if(CollectionUtil.isNotEmpty(elements)){
for (Element childElement : elements) {
if(childElement.getName().equals(resultName)){
return childElement.getText();
}else{
return forElement(childElement,resultName);
}
}
}
return null;
}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: