Java webSerivce的使用看完你就明白了

下面是一个完整的攻略,帮助你了解和使用Java Web Service。

Java Web Service 的使用看完你就明白了

什么是 Java Web Service

Java Web Service 是一种基于 XML 和 HTTP 协议的远程服务技术,它允许应用程序在不同操作系统、不同编程语言和不同的硬件平台上进行交互和通信。

Java Web Service 的工作原理是基于三个基本要素:WSDL、SOAP 和 XML Schema。

  • WSDL:Web Services Description Language,定义 Web Service 的接口和方法。通过 WSDL 文件,客户端和服务端可以相互了解和通信。
  • SOAP:Simple Object Access Protocol,是一种基于 XML 的消息交换协议,用于在 Web Service 客户端和服务端传递消息。
  • XML Schema:用于定义 XML 文档的结构和内容,同时也用于定义 Web Service 的数据格式和数据类型。

Java Web Service 的类型

Java Web Service 主要分为两种类型:

  • SOAP Web Service:基于 SOAP 协议的 Web Service,与平台和语言无关。
  • RESTful Web Service:一种基于 RESTful 架构风格的 Web Service,通常使用 JSON 数据格式。

本文重点介绍 SOAP Web Service 的使用。

Java Web Service 的创建步骤

要创建一个 Java Web Service,通常需要以下几个步骤:

  1. 定义接口:定义 Web Service 的接口和方法,同时指定 WSDL 文件的位置和格式。
  2. 实现接口:实现 Web Service 的接口和方法,同时根据需要进行参数验证。
  3. 发布服务:使用 JAX-WS API 将实现类发布为 Web Service,同时指定服务名称和访问路径。
  4. 测试服务:编写 Web Service 客户端,测试 Web Service 的功能和可用性。

下面,我们通过一个示例来详细说明这四个步骤。

示例一:发布一个简单的 Web Service

  1. 定义接口

首先,我们创建一个简单的接口,用于演示 Web Service 的基本用法。

@WebService
public interface HelloWorld {
    @WebMethod
    String sayHello(String name);
}

在上述代码中,使用了 @WebService 注解定义了一个 Web Service 接口,并使用 @WebMethod 注解定义了一个 sayHello 的方法。

  1. 实现接口

接下来,我们实现这个接口,并为 sayHello 方法进行参数验证。

@WebService(endpointInterface = "com.example.HelloWorld")
public class HelloWorldImpl implements HelloWorld {

    @Override
    public String sayHello(String name) {
        if (name == null || name.trim().equals("")) {
            throw new IllegalArgumentException("Name cannot be null or empty");
        }
        return "Hello, " + name;
    }
}

在上述代码中,我们使用 @WebService 注解指定了服务名称和命名空间,并继承了 HelloWorld 接口。同时在 sayHello 方法中,加入了简单的参数验证。

  1. 发布服务

接下来,我们使用 JAX-WS API 将实现类发布为 Web Service。

public class Main {
    public static void main(String[] args) {
        HelloWorldImpl implementor = new HelloWorldImpl();
        String address = "http://localhost:8080/HelloWorld";
        Endpoint.publish(address, implementor);
    }
}

在上述代码中,使用 Endpoint 类的 publish 方法将 HelloWorldImpl 实现类发布为 Web Service。同时,指定了服务的访问路径为 http://localhost:8080/HelloWorld

  1. 测试服务

最后,我们编写一个简单的 Web Service 客户端,用于测试 Web Service 的功能和可用性。

public class Client {
    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("http://localhost:8080/HelloWorld?wsdl");
        QName qname = new QName("http://example.com/", "HelloWorldImplService");
        Service service = Service.create(url, qname);
        HelloWorld helloWorld = service.getPort(HelloWorld.class);

        String result = helloWorld.sayHello("World");
        System.out.println(result);
    }
}

在上述代码中,我们先通过 URL 和 QName 获取 Web Service 的实现类,并通过该实现类的 sayHello 方法获取 Web Service 的返回结果。

示例二:使用 JAXB 处理复杂数据类型

在 Web Service 中,还可以使用 JAXB(Java Architecture for XML Binding)将复杂的数据类型转换成 XML,并通过 Web Service 进行传输。

以下示例演示了如何在 Web Service 中使用 JAXB 处理复杂数据类型。

  1. 定义 Java 类

首先,我们创建一个 Java 类,用于表示一个简单的学生对象。

@XmlRootElement
public class Student {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在上述代码中,我们使用 @XmlRootElement 注解将 Student 类标记为根元素,同时定义了三个属性: idnameage

  1. 修改 Web Service 接口

接下来,我们使用 Student 对象作为参数,修改 Web Service 的接口和实现类。

@WebService
public interface StudentService {
    @WebMethod
    Student getStudent(int id);
}
@WebService(endpointInterface = "com.example.StudentService")
public class StudentServiceImpl implements StudentService {
    public Student getStudent(int id) {
        Student student = new Student();
        student.setId(id);
        student.setName("Tom");
        student.setAge(20);
        return student;
    }
}

在上述代码中,我们在 StudentService 接口中,使用 Student 对象作为返回值类型,并在 StudentServiceImpl 实现类中,使用 Student 对象作为返回值。

  1. 生成 WSDL 文件

接下来,我们需要使用 wsgen 工具来生成 WSDL 文件。

要生成 WSDL 文件,使用下述代码:

wsgen -cp . com.example.StudentServiceImpl -wsdl

在上述代码中,使用 wsgen 命令生成了 StudentServiceImpl 类的 WSDL 文件。

  1. 修改 Main 方法

因为现在要使用 Student 对象作为参数,同时需要使用 JAXBStudent 对象转换为 XML,因此要对 Main 方法进行些许修改。

public class Main {
    public static void main(String[] args) {
        StudentServiceImpl implementor = new StudentServiceImpl();
        String address = "http://localhost:8080/StudentService";
        Endpoint.publish(address, implementor);

        System.out.println("Web Service 已发布。");
    }
}

在上述代码中,我们移除了 Main 方法中的 URLEncoded 方法,因为现在已经不需要获取 WSDL 文件。同时,我们在 StudentServiceImpl 类中使用了 @XmlRootElement 注解,以表示 Student 类型可以通过 XML 进行传输。

  1. 修改 Client 方法

最后,我们修改 Client 方法,使其可以将 XML 转换为 Student 类型。

public class Client {
    public static void main(String[] args) throws MalformedURLException, JAXBException {
        URL url = new URL("http://localhost:8080/StudentService?wsdl");
        QName qname = new QName("http://example.com/", "StudentServiceImplService");
        Service service = Service.create(url, qname);
        StudentService studentService = service.getPort(StudentService.class);

        Student student = studentService.getStudent(123);
        JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);
        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        StringWriter sw = new StringWriter();
        marshaller.marshal(student, sw);
        String xml = sw.toString();
        System.out.println(xml);
    }
}

在上述代码中,我们先使用 service.getPort 方法获取 StudentService 对象,然后通过 getStudent 方法获得 Student 类的实例化对象。同时,使用 JAXBContextStudent 类型转换为 XML,最后将 XML 输出到控制台中。

结语

Java Web Service 为我们提供了一种简单而强大的远程服务技术,可以让我们的应用程序在不同环境和平台之间进行通信。通过对本文提供的两个示例的详细解释,相信你已经掌握了基础的 Java Web Service 的使用方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java webSerivce的使用看完你就明白了 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • java web图片上传和文件上传实例

    下面是关于“Java Web文件上传和图片上传实例”的攻略及示例。 一、文件上传和图片上传的区别 文件上传和图片上传本质上类似,都是将本地文件上传到服务器的某个文件夹中。但是,图片上传还需要进行图片预览和显示操作,所以相较于文件上传,图片上传多了一些处理操作。 二、Java Web实现文件上传和图片上传 在Java Web中,文件上传和图片上传的核心是使用M…

    Java 2023年5月19日
    00
  • MyBatis 如何写配置文件和简单使用

    MyBatis 是一款灵活、高效的 ORM 框架,它支持定制化 SQL、存储过程以及高级映射。使用 MyBatis,我们可以通过简单的配置文件和 SQL 语句来实现持久层的操作。下面我将详细讲解如何写 MyBatis 的配置文件和简单使用。 1. 编写 MyBatis 的配置文件 MyBatis 的配置文件为 mybatis-config.xml,这个文件需…

    Java 2023年5月20日
    00
  • JAVA十大排序算法之快速排序详解

    JAVA十大排序算法之快速排序详解 算法介绍 快速排序是一种基于分治思想的排序算法,是十大排序算法中非常常用的一种。它的核心思想是取一个基准值,将数组中小于基准值的放在一边,大于它的放在另一边,递归地对两个子集进行排序。通过多次分区排序,最终将整个数组排序。 算法步骤 选择基准值,通常取区间的第一个元素(也可以取随机元素) 分区操作:将区间根据基准值划分为两…

    Java 2023年5月19日
    00
  • android 仿微信demo——登录功能实现(移动端)

    下面我就为你详细讲解“Android 仿微信Demo——登录功能实现(移动端)”的完整攻略。 一、背景与目标 本文介绍如何在移动端实现仿微信的登录功能。通过本文的学习,你将掌握以下技能: 掌握Android中与服务器通信的方法; 熟悉OkHttp库的使用; 理解MVC模式。 二、前期准备 在进行登录功能实现之前,你需要了解以下几个知识点: MVC模式; Ok…

    Java 2023年5月23日
    00
  • Spring boot 整合 Redisson实现分布式锁并验证功能

    下面我将为您详细讲解”Spring boot整合Redisson实现分布式锁并验证功能”的完整攻略。 简介 Redis是一个开源的,使用C语言开发的,支持网络,可基于内存或者磁盘的数据结构服务。Redisson是面向Java的Redis客户端,提供了丰富的接口和功能,其中包括了Redis的分布式锁实现。 Spring Boot是基于Spring框架的快速开发…

    Java 2023年6月3日
    00
  • JavaIO BufferedReader和BufferedWriter使用及说明

    JavaIO BufferedReader和BufferedWriter使用及说明 在Java中,读写文件是非常频繁的操作。BufferedReader和BufferedWriter是常用的文件读写工具类。本文将详细介绍这两个工具类的使用方法及说明。 BufferedReader BufferedReader是一个用来读取字符流的缓冲区。它以一个字符输入流作…

    Java 2023年5月20日
    00
  • 详解Java使用JDBC连接MySQL数据库

    详解 Java 使用 JDBC 连接 MySQL 数据库 概述 在 Java 开发中,经常需要与 MySQL 数据库进行交互,而实现这个过程需要使用到 JDBC。JDBC(Java Database Connectivity)是 Java 提供的一套用于访问关系型数据库的接口,本文将详细讲解在 Java 中使用 JDBC 连接 MySQL 数据库的完整攻略。…

    Java 2023年5月19日
    00
  • java的继承原理与实现方法详解

    让我们先从继承的概念入手。继承(Inheritance)是一种面向对象的编程技术,它允许某个类(子类)去继承它的另一个类(父类)的属性和方法。这个技术可以减少重复性代码,提高代码复用性和可维护性。在 Java 中,子类通过关键字 extends 来继承父类。 继承原理 Java 使用类的继承机制来实现继承。在 Java 中,一个类可以通过关键字 extend…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部