java 调用webservice的各种方法总结

一、什么是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/

点赞(96) 打赏

评论列表 共有 1 条评论

高山流水 1年前 回复TA

祝自己出入平安,龙马精神

立即
投稿
发表
评论
返回
顶部