一、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