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日

相关文章

  • JFinal极速开发框架使用笔记分享

    JFinal极速开发框架使用笔记分享 JFinal是基于Java语言的极速开发框架,具有简单易用、高效、灵活等特点。本文将详细讲解使用JFinal开发Web应用的全过程。 第一步,环境准备 使用JFinal需要先进行环境准备: Java环境:JFinal要求 JDK 版本必须是 1.6 及以上,推荐使用 JDK 1.8。 Maven环境:使用 Maven 可…

    Java 2023年5月20日
    00
  • Java内存模型可见性问题相关解析

    Java内存模型可见性问题相关解析 Java是一门高级程序设计语言,应用广泛,但是在并发编程时,由于内存可见性问题可能会导致程序出现一些奇怪的行为。本文将详细讲解Java内存模型可见性问题及相关解析。 什么是Java内存模型可见性问题? Java内存模型中存在着共享变量被多个线程同时访问的情况。然而,由于JVM使用CPU缓存等优化策略,可能会将某些共享变量的…

    Java 2023年5月26日
    00
  • Java 创建线程的两个方法详解及实例

    Java 创建线程的两个方法详解及实例 在 Java 中,创建线程有两种方法,一种是继承Thread类,另一种是实现Runnable接口。本文将详细介绍这两种方法并提供示例代码。 1. 继承Thread类 继承Thread类是一种创建线程的简单方法,只需要继承Thread类并重写run方法即可。 示例代码: public class MyThread ext…

    Java 2023年5月18日
    00
  • Java springboot项目jar发布过程解析

    下面是关于“Java springboot项目jar发布过程解析”的完整攻略: Java SpringBoot 项目Jar发布过程解析 简介 SpringBoot是Spring家族的一个全新框架,它使用了约定优于配置的理念,更加简化了Spring项目的搭建和配置过程。通过SpringBoot,我们可以快速高效地构建一个企业级的Java Web应用程序。 在使…

    Java 2023年5月19日
    00
  • java实现注册登录系统

    下面是“Java实现注册登录系统”的完整攻略: 前置知识 在实现注册登录系统之前,需要掌握一些Java基础知识和相关技术。主要包括: Java基础语法(变量、数据类型、控制语句、方法等) Java面向对象编程(类、对象、继承、多态等) JDBC技术(Java连接数据库的技术) Servlet和JSP技术(Java Web开发技术) 实现步骤 创建数据库表格 …

    Java 2023年5月19日
    00
  • Springmvc加ajax实现上传文件并页面局部刷新

    首先,上传文件是指将文件从客户端传输到服务器端,而Springmvc是一种轻量级的mvc框架。在本文中,将会介绍如何利用Springmvc和ajax实现文件上传和页面局部刷新。 一、环境准备 实现文件上传需要用到Springmvc和Spring的MultipartResolver组件,因此需要在pom.xml文件中引入相关依赖。 <!– Spring…

    Java 2023年6月15日
    00
  • Java AES256加密解密示例代码

    下面是Java AES256加密解密示例代码的完整攻略: Java AES256加密解密示例代码 什么是AES256加密? AES256是一种对称加密算法,也就是说加密和解密都使用相同的密钥。AES256使用256位密钥长度,目前被认为是一种非常安全的加密算法。在Java中,可以使用javax.crypto包中的类来实现AES256加密。 AES256加密解…

    Java 2023年5月19日
    00
  • java实现删除某条信息并刷新当前页操作

    首先,需要明确操作的背景和需求。 背景是我们有一个Java的Web应用,需要实现删除某条信息并刷新当前列表页的操作。具体来说,删除操作需要从数据库或者其他持久化存储中删除指定的数据,然后刷新当前页的展示。 实现这个需求可以分为以下几个步骤: 获取用户要删除的数据的唯一标识符 在Web应用中,通常会通过表单提交等方式,向服务器发送删除请求。删除请求中需要包含被…

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