使用JAX-WS构建Web Services

使用JAX-WS构建Web Services 使用JAX-WS构建WebServicesJAX-WS简写为JavaApiForXmlWebService。JAX-WS是使用XML构建WebService与Client进行交流通信的技术。在JAX-WS中,WebService操作调用表现为以XML为基础的协议如SOAP协议。SOAP定义了封装架构,编码规则以及WebService中调用和回应表现的规则。这些调用和

大家好,又见面了,我是你们的朋友全栈君。 

使用JAX-WS构建Web Services
JAX-WS简写为 Java Api For Xml Web Service。JAX-WS是使用XML构建Web Service与Client进行交流通信的技术。
在 JAX-WS中,Web Service操作调用表现为以XML为基础的协议如SOAP协议。SOAP定义了封装架构,编码规则以及Web Service中调用和回应表现的规则。这些调用和回应在HTTP基础上以SOAP规范的消息进行传递。
尽管 SOAP协议是很复杂的,但是JAX-WS隐藏了开发人员面对的复杂性。在服务器端,开发者可以通过在使用java语言接口中定义方法来制定Web Service。开发者可以编写一个或者多个类来实现这些方法。客户端程序也很容易编写。客户端会创建一个代理(表现服务器端的本地对象)并且简单的调用代理中的方法即可。在JAX-WS中,开发者不必去创建和解析SOAP消息。JAX-WS运行系统会自动完成调用和回应之间SAOP消息的转换。
使用 JAX-WS,客户端和服务器端都有一个很大的优势:java编程语言的平台独立性。此外,JAX-WS并不限制:JAX-WS客户端程序可以访问不运行在java平台上的Web Servicce。这种灵活性是由于Web Service采用了W3C定义的技术规范:Http,SOAP,WSDL。
 
如何创建一个Web Service和Client并将他们部署。
开发一个 JAX-WS Web Service首先是要定义一个类标示了javax.jws.WebService注释。@WebService注释定义了一个Web Service终端。
Service终端接口或者 Service终端实现(SEI)是一个java接口和类,其中定义了客户端可以调用的方法。建立一个JAX-WS终端时接口并不是必须的。Web Service实现类定义了SEI。
你也可以通过向实现类的 WebService注释中添加endpointInterface 元素来指定外部接口。之后你必须定义一个接口并且将其中需要实现的方法声明为public。
创建Web Service和Client的步骤
1.
   编写实现类
2.
   编译实现类
3.
   添加部署 Web Service必须的文件
4.
   打包成 WAR
5.
   部署 WAR文件
6.
   编写 Client类
7.
   产生和编译连接到 Service需要的文件
8.
   编译 Client类
9.
   运行 Client
JAX-WS
终端要求
² 实现类必须注释为 javax.jws.WebService或者javax.jws.WebServiceProvider。
² 实现类可以参考通过 WebService注释中的endpointInterface元素。但是这不是必须的。如果WebService注释中没有endpointInterface元素的话,SEI会默认的为实现类定义一个。
² 实现类的方法必须是 public,不能使final或者static。
² 被暴露给 Web Service Client的方法必须被注释为javax.jws.WebMethod。
² 实现类不能使 final和abstract。
² 实现类必须有一个默认的构造函数。
² 实现类不能定义 finalize方法。
² 实现类必须在他生命周期回调函数中必须用 javax.annotation.PostConstruct或者javax.annotation.PreDestroy注释。
PostConstruct方法由容器在实现类开始向 Web Service Client做出反应之前调用。
PreDestroy方法由容器在终端移出操作之前调用。
编写Service终端实现类
在这个例子中,实现类 Hello通过@WebService注释被定义为Service终端。Hello中有一个sayHello方法,被注释为@WebMethod。@WebMethod注释向Web Service Client暴露了被注释的方法。sayHello方法向客户段返回一通过参数name进行组装的问候字符串。这个实现类必须有一个默认的声明为public,无参数的构造函数。
package helloservice.endpoint;
import javax.jws.WebService;
@WebService
public class Hello {
private String message = new String(“Hello, “);
public void Hello() {}
@WebMethod
public String sayHello(String name) {
return message + name + “.”;
}
}
简单的JAX-WS客户端
HelloClient是一个可以访问 Hello对象的sayHello方法的独立的客户端程序。这个调用是通过一个本地对象port实现的,当然这个本地对象port是远程Service对象的一个代理。
编写客户端程序
1.
   使用 javax.xml.ws.WebServiceRef注释可以声明一个Web Service的参考。@WebServiceRef注释使用wsdlLocation元素指定一个已经部署的Service的wsdl的URI
@WebServiceRef(wsdlLocation=”http://localhost:8080/helloservice/hello?wsdl”)
2.
   找回 Service的代理,看作一个port,这是通过调用Service的一个函数getHelloPort实现的
Hello port = service.getHelloPort();
Port实现了被 service定义的SEI
3.
   调用 port的sayHello方法,并传入一个参数name。
String response = port.sayHello(name);
类的实现如下
package simpleclient;
 
import javax.xml.ws.WebServiceRef;
import helloservice.endpoint.HelloService;
import helloservice.endpoint.Hello;
 
 
public class HelloClient {
    @WebServiceRef(wsdlLocation = “http://localhost:8080/helloservice/hello?wsdl”)
    static HelloService service;
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            HelloClient client = new HelloClient();
            client.doTest(args);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
 
    public void doTest(String[] args) {
        try { // Call Web Service Operation
            System.out.println(
                    “Retrieving the port from the following service: ”
                    + service);
 
            Hello port = service.getHelloPort();
 
            System.out.println(“Invoking the sayHello operation on the port.”);
 
            String name;
 
            if (args.length > 0) {
                name = args[0];
            } else {
                name = “No Name”;
            }
 
            String response = port.sayHello(name);
            System.out.println(response);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
本文参考 Javaee5官方文档,源码在NetBeans6.0中使用,具体可以在sun官方网站下载,或者和我联系
david_qiu_hbu@126.com

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159707.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring boot activiti7常见问题「建议收藏」

    spring boot activiti7常见问题「建议收藏」问题:通过historyService查询报错,table不存在。原因:activiti7默认没有开启数据库历史记录。解决办法: activiti: db-history-used:true //启动数据库历史记录 history-level:audit //默认级别问题:database-schema-update配置级别…

    2022年10月20日
  • Scrapy爬虫案例-淘宝比价定向爬虫学习笔记

    Scrapy爬虫案例-淘宝比价定向爬虫学习笔记说明Scrapy爬虫案例-淘宝比价定向爬虫学习笔记学习教程:Python网络爬虫与信息提取授课老师:嵩天官方网站:https://python123.io教程链接:https://python123.io/index/courses/804“淘宝比价定向爬虫”实例功能描述目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格理解:淘宝的搜索接口翻页的处理技术路…

    2022年6月26日
  • 系统测试计划_软件系统测试计划

    系统测试计划_软件系统测试计划系统测试是针对软件产品系统进行的测试(黑盒测试) 功能测试:是否符合需求规格、功能设计、用户满意度 非功能测试:容错性、稳定性、异常处理能力、高强度输入处理能力、可用性、性能 系统测试(系统测试计划包含系统测试的设计、实现和执行的工作): 系统测试计划:完成系统测试计划。软件产品的需求规格确定后编写。 系统测试设计:完成系统方案。软件概要设计文档确定后编写。 系统测试实现…

    2022年9月1日
  • 移动终端处理器构成和基带芯片概述「建议收藏」

    移动终端处理器构成和基带芯片概述

    2022年1月28日
  • springboot框架简介_spring框架的功能

    springboot框架简介_spring框架的功能SpringBoot框架简单介绍前言:我们大家都知道Spring,Boot是启动的意思,所以SpringBoot其实是一个启动Spring项目的一个工具,从根本上讲,SpringBoot就是一些库的集合,它能够被任意项目的构建系统所使用。 简介:SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配…

    2022年8月21日
  • 2022年N1叉车司机考试模拟100题及模拟考试

    2022年N1叉车司机考试模拟100题及模拟考试题库来源:安全生产模拟考试一点通公众号小程序2022N1叉车司机试题为N1叉车司机培训试题理论知识考试题库!2022年N1叉车司机考试模拟100题及模拟考试依据N1叉车司机考试教材。N1叉车司机全部考试题库随时根据安全生产模拟考试一点通上练习全部题库。1、【多选题】《中华人民共和国特种设备安全法》第八十四条规定,特种设备使用单位的特种设备存在严重事故隐患,无改造、修理价值,或者达到安全技术规范规定的其他报废条件,未依法履行报废义务,并办理使用登记证书注销手续的。责令停止使用有关特种设备,处()以

    2022年9月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号