一、什么是Web Service
Web Service 是指通过网络协议(比如 HTTP)来实现不同平台、不同语言之间的互操作的一种技术。Web Service 是基于 XML 语言的、跨平台的、分布式的程序集。
二、Web Service 的意义
Web Service 的出现,可以让开发人员摆脱平台、语言、程序接口等限制,更好的集成、复用和共享不同的应用组件。比如,当一个软件系统需要调用另一个系统的方法或数据时,只需要通过 Web Service 的方式把请求发送给该系统,该系统通过处理请求并返回相应结果的方式来完成服务调用,不是简单方便吗?同时,Web Service 能够极大程度的简化应用开发和管理。
三、Java 调用 Web Service 的三种方式
下面我们来看看 Java 怎么调用 Web Service 服务。
方法一:通过jdk自带的工具wsimport生成客户端代码
当我们得到 wsdl 地址或者 wsdl 文件时,可以通过 JDK 自带的工具命令 wsimport 来生成客户端代码,这样就不需要我们手动来编写客户端代码,而是直接通过接口进行调用展开。 具体步骤如下:
步骤1:打开命令窗口
步骤2:切换到该文件所在的目录
步骤3:执行以下命令
```sh
wsimport -d . http://localhost:8080/exampleservice?wsdl
```
执行完该命令后,wsimport 工具就会自动获取 wsdl 文件并生成客户端代码,生成的代码将会在当前目录下的 exampleservice 目录中。
客户端代码使用:
```java
ExampleService exampleService = new ExampleService();
Example example = exampleService.getExample();
System.out.println("result : " + example.getResult());
```
方法二:手动编写客户端代码调用WebService
下面将演示如何通过手动编写客户端代码来实现 Web Service 调用。
步骤1:创建 Java 工程,并引入 Web Service 所在的 jar 包,比如 cxf-2.7.3.jar、jaxws-api.jar、wsdl4j.jar 等。
步骤2:在 src 目录下新建 com.webservice.demo.service 包,并在该包下创建与 Web Service 中的方法名相同的 Example.java 类,该类需要实现 java.io.Serializable 接口。
Example.java
```java
package com.webservice.demo.service;
import java.io.Serializable;
public class Example implements Serializable {
private static final long serialVersionUID = 1L;
private int result;
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
}
```
步骤3:创建 com.webservice.demo.client 包,并在该包下创建 ExampleServiceClient.java 类。
ExampleServiceClient.java
```java
package com.webservice.demo.client;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.webservice.demo.service.Example;
public class ExampleServiceClient {
public static void main(String[] args) throws MalformedURLException {
String endpointAddress = "http://localhost:8080/exampleservice?wsdl";
String namespace = "http://service.demo.webservice.com/";
String serviceName = "ExampleService";
String portName = "ExampleServicePort";
//1.创建Service实例
URL wsdlLocation = new URL(endpointAddress);
QName endpointName = new QName(namespace, portName);
Service service = Service.create(wsdlLocation, endpointName);
//2.创建WebService实例
ExampleService exampleService = service.getPort(new QName(namespace, serviceName), ExampleService.class);
//3.调用WebService方法
Example example = exampleService.getExample();
System.out.println("result : " + example.getResult());
}
}
```
方法三:Spring 集成 cxf 客户端调用 Web Service
如果我们使用的是 Spring 框架的话,可以使用 cxf 代替 jdk 自带的 wsimport 工具和手动编写客户端代码。这里需要注意只能使用 jaxws-api 2.x 版本,否则可能出现无法连接的问题。
步骤1:引入相关的 jar 包,比如:cxf-2.x.x.jar、spring-beans-x.x.x.jar、spring-context-x.x.x.jar、spring-core-x.x.x.jar、spring-web-x.x.x.jar、jaxws-api-2.x.jar。
步骤2:在 spring 配置文件中配置 client 的地址及相关信息。
```xml
```
步骤3:在代码中获取 Spring 实例,调用服务方法。
```java
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ExampleService exampleService = (ExampleService) context.getBean("ExampleService");
Example example = exampleService.getExample();
System.out.println("result : " + example.getResult());
```
四、总结
以上就是 Java 调用 Web Service 的三种方式,其中使用生成客户端代码和手写客户端代码调用 Web Service 很枯燥且容易出错,而通过 Spring 集成 cxf 客户端调用就简便很多了。但是,无论哪种方式,我们都需要去考虑安全问题,如防止产生跨站脚本;此外,还需要根据不同的业务需求,采取不同的调用方式。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
祝自己出入平安,龙马精神