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中对象的序列化详解及实例

    Java中对象的序列化详解及实例攻略 什么是序列化 序列化是将对象转换为字节序列的过程,以便将其存储到文件或内存缓冲区中,也可以通过网络传输到另一个计算机中。反序列化则是从字节序列中重构对象的过程。 在Java中,序列化是通过实现Serializable接口来实现的。该接口中没有方法,只是用来指示该类是可序列化的。 序列化的作用 序列化在实际开发中非常有用。…

    Java 2023年5月26日
    00
  • Java基础教程之类数据与类方法

    下面是关于“Java基础教程之类数据与类方法”的完整攻略: 1.什么是类数据与类方法? 在Java中,类是一个封装数据和方法的概念。类定义了一种抽象数据类型,里面包含了一种或多种数据,并定义了对这些数据的操作方法。在类内部,可以定义两种方法:实例方法和静态方法。而“类数据”和“类方法”常常也被称作“静态数据”和“静态方法”。它们分别属于类本身,而不是类的某个…

    Java 2023年5月23日
    00
  • Mybatis-Plus BaseMapper的用法详解

    当使用Mybatis-Plus时,常需要对数据库进行增、删、改、查等操作。可以使用Mybatis-Plus提供的BaseMapper接口来快速实现这些操作,而不需要自己手动编写SQL语句。 1. BaseMapper概述 BaseMapper是Mybatis-Plus提供的基础Mapper接口。该接口提供了常见的数据库操作,开发人员可以直接继承或者注入该接口…

    Java 2023年5月20日
    00
  • SpringBoot整合MyBatis的代码详解

    以下是关于SpringBoot整合MyBatis的完整攻略: 1. 准备工作 建立SpringBoot项目 添加相关依赖:SpringBoot的Web、MyBatis、MySQL驱动 2. 配置数据源 在SpringBoot项目的配置文件application.properties中,添加数据源的相关配置: # 数据源配置 spring.datasource…

    Java 2023年5月19日
    00
  • spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程

    在Spring Boot开发中,使用spring-boot-starter-web依赖可以快速构建Web应用程序。但是,有时候我们在配置文件中使用该依赖时会遇到一些坑。以下是spring-boot-starter-web配置文件使用教程的完整攻略: 添加spring-boot-starter-web依赖 在Maven或Gradle中添加spring-boot…

    Java 2023年5月15日
    00
  • 如何实现线程安全的共享对象?

    以下是关于如何实现线程安全的共享对象的完整使用攻略: 什么是线程安全的共享对象? 线程安全的共享对象是指多个线程可以同时访问的对象,不会出现数据不一致或程序崩溃等问题。在多线程编程中,线程安全的共享对象是非常重要的,因为当多个线程同时访问共享对象时,可能会出现线程间争问题,导致数据不一致或程序崩溃。 如何实现线程安全的共享对象? 为了实现线程安全的共享对象,…

    Java 2023年5月12日
    00
  • Spring Security CsrfFilter过滤器用法实例

    下面就来详细讲解一下“Spring Security CsrfFilter过滤器用法实例”的完整攻略。 什么是CsrfFilter过滤器? Spring Security提供了CsrfFilter过滤器,用来防止跨站请求伪造攻击(CSRF攻击)。CsrfFilter利用同步令牌(synchronizer token)为每个请求分配一个唯一的token,即CS…

    Java 2023年5月20日
    00
  • SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分页)

    下面是关于“SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分页)”的完整攻略,包含两个示例说明。 SpringMVC4 + MyBatis3 + SQL Server 2014整合教程 在本文中,我们将介绍如何使用SpringMVC4、MyBatis3和SQL Server 2014实现一个简单的增删改查分…

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