使用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官方网站下载,或者和我联系

转载于:https://blog.51cto.com/sdqdxiaoli/1107075

使用JAX-WS构建Web Services .相关推荐

  1. 【Web Service学习】-----JAX-WS构建Web Services

    文章目录 1.简介 2.JAX-WS介绍 2.1 JAX-WS服务端 3. 客户端(测试) 4. 参考 1.简介 W3C(World Wide Web Consortium)对于Web Service ...

  2. 使用 Ajax 调用 SOAP Web 服务,第 1 部分: 构建 Web 服务客户机

    James Snell (jasnell@us.ibm.com), 软件工程师,新兴技术, IBM James Snell 是 IBM 的 software group 中的 emerging Int ...

  3. Jboss RestEasy构建简单的RESTful Web Services示例(1)

    2019独角兽企业重金招聘Python工程师标准>>> 项目上要用到webservice,鉴于现在restful webservice比较流行,打算用restful来建立webser ...

  4. java官方 jax rs_jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档

    原文:https://docs.jboss.org/author/display/AS7/Java+API+for+RESTful+Web+Services+(JAX-RS) Content Tuto ...

  5. spring和maven_具有Spring和Maven教程的JAX–WS

    spring和maven Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: ...

  6. 带有Spring和Maven教程的JAX–WS

    Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: 公开基于Servlet的 ...

  7. java cxf 入口统一_分分钟带你玩转 Web Services【2】CXF

    在实践中一直在使用 JAX-WS 构建 WebService 服务,服务还是非常稳定.高效的. 但还是比较好奇其他的 WebService 开源框架,比如:CXF/Axis2/Spring WS等. ...

  8. cxf开发Restful Web Services

    一.restful web services rest全称是Representation State Transfer(表述性状态转移).它是一种软件架构风格,只是提供了一组设计原则和约束条件.在re ...

  9. 亚马逊标题自动抓取_15分钟内开始使用Amazon Web Services和全自动资源调配

    亚马逊标题自动抓取 在等待一个新项目时,我想学习一些有用的东西. 而且由于在许多项目中我们需要评估和测试正在开发的应用程序的性能,而很少有足够的硬件来生成实际负载,因此我决定学习更多有关按需在云中按需 ...

最新文章

  1. 4年级计算机 设计贺卡教案,四年级上册信息技术《小贝的贺卡》教学设计
  2. mysql主从(GTID复制模式)
  3. [转]JDK里的设计模式
  4. 九度OJ 1019:简单计算器 (基础题、DP)
  5. Express框架(http服务器 + 路由)
  6. 微型计算机中 辅助存储器通常包括,第7章 微型计算机存储器习题参考答案
  7. san分布式共享文件系统_【最强科普】一文读懂分布式存储
  8. ubuntu下配置SSD网络全过程
  9. ACL 2019 | 清华与华为提出ERNIE:知识图谱结合BERT才是「有文化」的语言模型
  10. 企业园区全面安防面临的问题及解决之道
  11. 陪学网腾讯直播课堂开课啦~免费、免费、免费,重要的事情说三遍
  12. 写了一个个人资产管理的后台系统
  13. 用计算机来猜星座,[转]实用推荐---三个问题猜出对方的星座
  14. The JAVA_HOME environment variable is not defined correctly(亲测有效)
  15. 交流电中为什么要用相量法?
  16. python学习笔记9——第八章 异常
  17. opencv图像修复
  18. 常见的配置中心:Apollo(二)-接入Apollo
  19. [Music]30首经典萨克斯名曲
  20. error: Cannot delete branch 'xxx' checked out at 'xxxx'

热门文章

  1. 一梦江湖一直获取服务器信息啥意思,《一梦江湖》原《楚留香》手游:叮咚!少侠你的NPC侠缘送来信物...
  2. airtest adb 远程连接_使用Airtest超快速开发App爬虫
  3. ios打不开html文件,在DocumentsWeb目录中打开UIWebview时,ios-css和js在html文件中无法链接...
  4. java创建response对象_javaweb入门-----request与response的作用
  5. PythonEggs
  6. AudioParam
  7. java String类
  8. 3.2 选择最可能的句子
  9. python与线性代数 向量方程
  10. CentOS7添加自定义系统服务