使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm激活码2021.9【2021最新】

    (pycharm激活码2021.9)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月27日
    55
  • process returned -1073741571_0x0000007a电脑蓝屏

    process returned -1073741571_0x0000007a电脑蓝屏前言C++运行报错:Processreturned-1073741819(0xC0000005)是真的坑!!!申请的内存没有释放new后必须deletemalloc后必须free创建内核对象(比如CreateFile,CreateMutex,CreateThread),后必须释放内核对象句柄.创建内存映射文件,CreateFileMapping,MapViewOfFile后必须…

    2022年10月4日
    3
  • pmf文件「建议收藏」

    pmf文件「建议收藏」1、首先是视频软件,其次还是DISKGENI(磁盘分区软件),当作镜像文件恢复文件到磁盘(类似ISO)。2、PMF文件为主要与primarilyPegasusMailMessageAttachment(DavidHarris)相关联的GIS文件。PMF文件还与以下相关联:PayrollMate2008(RealTaxTools.com),PCLToolPageTechM…

    2022年6月18日
    74
  • bzero_unsupported什么意思

    bzero_unsupported什么意思原型:externvoidbzero(void*s,intn)

    2022年10月13日
    4
  • Unable to process Jar entry [module-info.class] from Jar的问题解决

    Unable to process Jar entry [module-info.class] from Jar的问题解决UnabletoprocessJarentry[module-info.class]fromJar的问题解决背景解决办法背景在使用Eclipse进行SpringBoot应用开发时,如果项目启动是RunAs->RunOnServer方式运行就会报类似于UnabletoprocessJarentry[module-info.class]fromJar的错误…

    2022年9月28日
    5
  • 暴力破解加密压缩文件

    暴力破解加密压缩文件实验目的应用Python程序设计语言的相关知识,对加密的压缩文件进行破解。实验所用仪器(或实验环境)Python3.8实验基本原理及步骤(或方案设计及理论计算)任务1:定义一个函数,函数带有一个参数L(类型为整数),函数返回一个长度为L、包含大小写字母和数字的随机密码(类型为字符串)。在任务1中,可以借助random中的choice,以及string库中的ascii_letters;至少用3个不同的长度测试函数的返回值。ascii_letters基本上是ascii_lowercase和

    2022年6月3日
    45

发表回复

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

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