在当今信息化社会中,不同的系统间需要进行数据交换是很常见的。Web Service(Web服务)机制就是为了满足这一需求而诞生的。Web Service 是一种基于标准化协议的、分布式的应用程序集成技术,它是一种基于 Web 的交互方式,可以从任何位置、任何设备访问 Web 服务,从而实现系统之间的信息交换和数据共享。
在 Java 开发中,如何调用 Web Service 就成为了一个难点。下面我们将从以下几个方面探讨 Java 如何调用 Web Service:
1. 什么是 Web Service ?
2. Java 调用 Web Service 的优点?
3. Java 如何调用 Web Service ?
4. Java 调用 Web Service 的示例
1. 什么是 Web Service ?
Web Service 是一个应用程序编程接口(API),它的主要作用是让不同的应用、不同的平台之间进行通讯。最常见的 Web Service 协议是 XML-RPC 和 SOAP,它们都是基于 HTTP 的协议,可以在同一网络或跨网络上使用。Web Service 的本质就是将应用程序的功能作为服务提供给其他应用。
Web Service 的核心是 WSDL(Web Service Description Language)文件和 SOAP(Simple Object Access Protocol)消息,WSDL 定义了 Web Service 暴露的服务和客户端访问方式,而 SOAP 是一种基于 XML 的协议,可以在分布式环境中构建和传输消息。
2. Java 调用 Web Service 的优点?
(1)Java 支持 Web Service 标准协议:SOAP、WSDL 和 UDDI,可以轻松地开发和调用 Web Service;
(2)Java 中已经存在一些成熟的 Web Service 框架(例如 Apache Axis2 和 JAX-WS),可以简化开发过程;
(3)Java 是跨平台的,它的 Web Service 可以在不同的操作系统、不同的编程语言之间互操作。
3. Java 如何调用 Web Service ?
Java 调用 Web Service 有两种方式:使用 Java 原生的 API 和使用 Web Service 框架。
3.1 Java 原生 API 调用 Web Service
Java 原生 API 调用 Web Service 有两种方式:使用 Java SE 自带的 JAX-WS 和使用 Java SE 自带的 SAAJ。
- JAX-WS(Java API for XML Web Services)是一种基于 Java 的 Web 服务规范,是 Java Web Service 标准之一。JAX-WS 提供了一种开发 Web Service 的标准方法,包括以下步骤:
(1)通过 WSDL 文件生成 Java 代码
(2)编写客户端代码
(3)部署 Web Service
- SAAJ(SOAP with Attachments API for Java)是一种用于创建和解析 SOAP 消息的 API,可以用于处理 SOAP、MIME 和 DIME 消息。SAAJ 的主要步骤包括:
(1)创建 SOAP 消息
(2)创建 SOAP 请求
(3)发送请求
3.2 使用 Web Service 框架调用 Web Service
Java 中已经存在多个成熟的 Web Service 框架,例如 Apache Axis2、JAX-WS、Apache CXF 等等。这些框架可以让我们更快、更方便地开发和调用 Web Service。
Apache Axis2 是一个开源的 Web Service 框架,可以通过 WSDL 自动生成客户端代码,支持多种 Web Service 协议(SOAP、REST、XML-RPC 等),具有高性能和灵活性。
JAX-WS(Java API for XML Web Services)是一个基于 Java 的 Web 服务规范,是 Java Web Service 标准之一。通过 JAX-WS,我们可以轻松地创建、发布和调用 Web Service。
Apache CXF 是一个开源的 Web Service 框架,是 JAX-WS 的实现之一。Apache CXF 支持多种 Web Service 协议,例如 SOAP、REST 和 XML-RPC,具有高性能和可扩展性。
4. Java 调用 Web Service 的示例
在这里我们给出一个简单的示例,演示如何使用 Java 调用 Web Service。
我们使用 Apache Axis2 创建 Web Service,提供一个简单的求和函数,然后使用 Java 代码调用该 Web Service。
4.1 创建 Web Service
我们使用 Apache Axis2 创建 Web Service,只需要以下几步:
(1)下载 Apache Axis2 安装包(http://axis.apache.org/axis2/java/core/download.cgi);
(2)解压缩安装包,进入 bin 目录启动 Axis2:
./axis2server.sh 或者 ./axis2server.bat
(3)进入浏览器界面,访问以下 URL:http://localhost:8080/axis2/services/。
此时,我们就可以创建我们的 Web Service 了。我们在此提供一个简单的实例。
首先,我们创建一个 Java 项目,并添加 Axis2 的库文件,然后在 src 文件夹下创建一个名为 HelloWorld.java 的类,代码如下:
```java
public class HelloWorld {
public int add(int x, int y) {
return x + y;
}
}
```
然后,我们使用 Apache Axis2 的 wsdl2java 工具生成 WSDL 文件和客户端代码。命令如下:
```bash
$ wsdl2java.sh -uri HelloWorld.wsdl -o src -p com.example.webservice
```
其中,HelloWorld.wsdl 是我们 Web Service 的 WSDL 文件,com.example.webservice 是我们生成的客户端代码所在的包名。
4.2 调用 Web Service
在客户端代码中,我们先使用 SOAP 协议创建请求,然后将请求发送到 Web Service,最后解析 Web Service 的返回结果。代码如下:
```java
public static void main(String[] args) {
try {
// 创建 Service 服务
HelloWorldService service = new HelloWorldService();
// 获取 HelloWorldPortType 接口
HelloWorldPortType port = service.getHelloWorldPortType();
// 创建 SOAP 请求
SOAPFactory sf = SOAPFactory.newInstance();
SOAPMessage request = MessageFactory.newInstance().createMessage();
SOAPBody sb = request.getSOAPBody();
Name name = sf.createName("add", "", "http://localhost:8080/axis2/services/HelloWorld");
SOAPBodyElement element = sb.addBodyElement(name);
element.addChildElement("a").setTextContent("1");
element.addChildElement("b").setTextContent("2");
// 发送 SOAP 请求
SOAPMessage response = port.add(request);
// 解析 SOAP 响应
Element e = (Element) response.getSOAPBody().getFirstChild();
int result = Integer.parseInt(e.getTextContent().trim());
System.out.println("1 + 2 = " + result);
} catch (Exception e) {
System.out.println(e);
}
}
```
上面的代码中,我们使用了 HelloWorldService 类和 HelloWorldPortType 接口,这些类都是使用 wsdl2java 工具自动生成的。我们通过 getHelloWorldPortType() 方法得到了 HelloWorldPortType 接口的实例,然后创建 SOAP 请求。请求中第一个参数是“add”,是 Web Service 中的方法名;第二个参数是命名空间;第三个参数是 Web Service 的 URL。然后我们将两个参数 a 和 b 分别赋值为 1 和 2,并将请求发送到 Web Service。最后,我们解析 Web Service 返回的 SOAP 响应,并将其输出。
总结
本文主要介绍了 Java 如何调用 Web Service,包括 Web Service 的基本概念、Java 调用 Web Service 的优点、Java 原生 API 调用 Web Service 的方法、使用 Web Service 框架调用 Web Service 的方法,以及一个简单的 Java 调用 Web Service 的示例。Web Service 技术的出现,使得网络信息资源可以被更多的应用程序充分利用,实现应用程序之间的数据交换和共享,大大提高了企业的信息化水平和运营效率。