一、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
微信扫一扫
支付宝扫一扫