JAX-WS及其在Java Web Service中的应用

一、JAX-WS入门介绍

Java API for XML Web Services (JAX-WS) 是用于开发 SOAP Web Services 的Java API。

JAX-WS API 通过 JAXB 实现 SOAP 消息与 Java 对象之间的映射转换。 JAXB (Java Architecture for XML Binding) 是 Java 中的一个用于将 XML 表示与 Java 对象之间相互转换的组件,也称为 Object-XML 核心技术。

使用JAX-WS可以以Java接口为基础自动生成Web Service的客户端和服务器端代码,同时支持对J2EE支持的Servlet容器和Web服务器以及J2EE支持的应用服务器的无缝集成。

二、JAX-WS与SOAP

SOAP(简易对象接入协议)是一种基于XML的通信协议,用于交换不同操作系统和应用程序之间的结构化信息。SOAP支持HTTP、HTTPS、SMTP、FTP等协议,并允许在它们之间转换数据。因为SOAP采用XML作为数据传输格式,所以并不依赖于操作系统或开发语言。

JAX-WS可以很容易地打包Java Bean作为SOAP消息传输,同时还可以使用JAXB将Java对象序列化和反序列化为XML。在开发 Web Services 应用时,JAX-WS commonly acts as the project’s core architecture,从而简化了商业规模的Web Services应用的开发。

三、JAX-WS的主要组成部分

在Java编程中使用JAX-WS有以下几个主要的概念:

1、SEI (Service Endpoint Interface)

Service Endpoint Interface (SEI) 是 Web service的接口定义。SEI 是包含在一个Web服务的替代 WSDL 文件中。SEI 包含服务方法的定义,方法所需的参数和方法返回值类型。在 JAX-WS中,SEI被声明为一个Java接口,其中的每个方法都是一个 Web 服务端点(end point)

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

2、SIB (Service Implementation Bean)

Service Implementation Bean (SIB) 是 Web 服务的实际实现。它是包含 Web 服务端点实现的 Java 类。在 JAX-WS中,SIB可以是POJO(plain old Java object),也就是一个非EJB(Enterprise Java Bean)的Java类。

@WebService(endpointInterface = "com.example.HelloWebService")
public class HelloWebServiceImpl implements HelloWebService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}

3、Endpoint

Endpoint 是 Web 服务端点。它是 Web 服务构建的核心部分。 Endpoint 将 SEI 与 SIB 关联起来,从而做到了客户端和服务器端之间的通信。

Endpoint.publish("http://localhost:8080/hello", new HelloWebServiceImpl());

4、Binding

Binding 是 Web Services 请求/响应的格式。SOAPBinding 表示请求/响应的格式采用 SOAP 消息传输,而 HTTPBinding 则表示格式为 HTTP。

@WebService(name = "HelloWebService", targetNamespace = "http://example.com")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloWebService {...}

5、WSDL (Web Service Description Language)

WSDL 是一种用于描述 Web 服务的语言。它可以描述 Web 服务的接口、消息格式、协议、服务地址等




  
    
      
      
    
  

  
    
  

  
    
  

  
    
      
      
    
  

  
    
    
      
      
        
      
      
        
      
    
  

  
    
      
    
  

四、JAX-WS使用示例

下面是一个完整的JAX-WS Web Services使用示例:

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

@WebService(endpointInterface = "com.example.HelloWebService")
public class HelloWebServiceImpl implements HelloWebService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}

public class HelloWebServicePublisher{
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/hello", new HelloWebServiceImpl());
    }
}

@WebService(name = "HelloWebService", targetNamespace = "http://example.com")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloWebService {
    @WebMethod
    @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
    @WebResult(name = "result")
    public String sayHello(@WebParam(name = "name")String name);
}

public class HelloWebServiceClient {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://localhost:8080/hello?wsdl");
        QName qname = new QName("http://example.com", "HelloWebService");
        Service service = Service.create(url, qname);
        HelloWebService hello = service.getPort(HelloWebService.class);
        System.out.println(hello.sayHello("World!"));
    }
}

总结

JAX-WS是一种简单易用、功能强大的Java API,专门用于Web Services的开发。在JAX-WS中,使用SEI、SIB、Endpoint、Binding等核心概念进行Web服务的定义、实现和发布;JAX-WS可以自动化实现SOAP请求和响应的序列化和反序列化,大量简化了Web Services应用的开发。

相应的也要特别注意WSDL描述服务的接口、消息格式、协议、服务地址等配置,它也是Web Service应用最重要的文件之一。同时JAX-WS的灵活性使其成为一个难以抗拒的选择,以简化企业应用系统之间的通讯和交流。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-20 00:15
下一篇 2024-11-20 00:15

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论