基于JAX-WS规范的WebService实现

1、相关介绍

介绍Web Service需要首先了解SOA。SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过中间的契约(独立于硬件平台、操作系统和编程语言)连接起来,使得各种形式的功能单元更好的集成。WebService是SOA的一种很好的实现方式,WebService采用HTTP作为传输协议,SOAP(Simple Object Access Protocol)作为传输消息的格式。

本文重要介绍基于JAX-WS规范的WebService实现方式。首先我们先了解什么是JAX-WS。

JAX-WS (Java API for XML Web Services )是Java程序设计语言一个用来创建Web服务的API。在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch
直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。

【转载使用,请注明出处:http://blog.csdn.net/mahoking

2、使用一般方式实现基于JAX-WS规范的WebService

本例以MyEclipse开发工具为例,服务器为Tomcat 6,演示实现基于JAX-WS规范的WebService的一般方式。

第一步:打开MyEclipse,new→Web Service Project。Framework选择JAX-WS。本例项目工程命名为WebServer。

第二步:新建包名cn.mahaochen.web.ws,在该包下建立类SayHello。

package cn.mahaochen.web.ws;

public class SayHello {

	public String sayHello(String name) {

		return "Welcome " + name + "Come here!";
	}
}

第三步:new→Other→Web Services→Web Service。Next,Java package选择我们之前建立的cn.mahaochen.web.ws,Next。这样MyEclipse会自动在cn.mahaochen.web.ws包上生成一个类SayHelloDelegate.java。

package cn.mahaochen.web.ws;

@javax.jws.WebService(targetNamespace = "http://ws.web.mahaochen.cn/", serviceName = "SayHelloService", portName = "SayHelloPort")
public class SayHelloDelegate {

	cn.mahaochen.web.ws.SayHello sayHello = new cn.mahaochen.web.ws.SayHello();

	public String sayHello(String name) {
		return sayHello.sayHello(name);
	}

}

同时在WEB-INF文件下会生成一个新的XML文件为:sun-jaxws.xml。

<?xml version = "1.0"?>
<endpoints version="2.0"
	xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
	<endpoint name="SayHelloPort" implementation="cn.mahaochen.web.ws.SayHelloDelegate"
		url-pattern="/SayHelloPort">
	</endpoint>
</endpoints>

web.xml中的内容也会发生改变。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <servlet>
  	<description>JAX-WS endpoint - SayHelloService</description>
  	<display-name>SayHelloService</display-name>
  	<servlet-name>SayHelloService</servlet-name>
  	<servlet-class>
  		com.sun.xml.ws.transport.http.servlet.WSServlet
  	</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>SayHelloService</servlet-name>
  	<url-pattern>/SayHelloPort</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
  	<listener-class>
  		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  	</listener-class>
  </listener>
  </web-app>

第三步:将该项目发布(部署)到Tomcat中,启动服务,通过浏览器访问http://127.0.0.1/WSServer/SayHelloPort?wsdl测试,会出现如下报文。

<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-hudson-390-. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-hudson-390-. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.web.mahaochen.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.web.mahaochen.cn/" name="SayHelloService">
<types>
<xsd:schema>
<xsd:import namespace="http://ws.web.mahaochen.cn/" schemaLocation="http://127.0.0.1:80/WSServer2/SayHelloPort?xsd=1"></xsd:import>
</xsd:schema>
</types>
<message name="sayHello">
<part name="parameters" element="tns:sayHello"></part>
</message>
<message name="sayHelloResponse">
<part name="parameters" element="tns:sayHelloResponse"></part>
</message>
<portType name="SayHelloDelegate">
<operation name="sayHello">
<input message="tns:sayHello"></input>
<output message="tns:sayHelloResponse"></output>
</operation>
</portType>
<binding name="SayHelloPortBinding" type="tns:SayHelloDelegate">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="sayHello">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<service name="SayHelloService">
<port name="SayHelloPort" binding="tns:SayHelloPortBinding">
<soap:address location="http://127.0.0.1:80/WSServer2/SayHelloPort"></soap:address>
</port>
</service>
</definitions>

3、使用注解/注释的方式实现基于JAX-WS规范的WebService

“基于 XML 的 Web Service 的 Java API”(JAX-WS)通过使用注解/注解来指定与 Web Service 实现相关联的元数据以及简化 Web Service 的开发步骤。

本案例涉及的主要注解/注释类如下:

使用方式 作用
javax.jws.WebService @WebService 当实现 Web Service 时,@WebService 注释标记 Java 类;实现 Web Service 接口时,标记服务端点接口(SEI)。
javax.jws.WebMethod @WebMethod @WebMethod 注释表示作为一项 Web Service 操作的方法。

将此注释应用于客户机或服务器服务端点接口(SEI)上的方法,或者应用于 JavaBeans 端点的服务器端点实现类。

javax.jws.WebParam @WebParam @WebParam 注释用于定制从单个参数至 Web Service 消息部件和 XML 元素的映射。

将此注释应用于客户机或服务器服务端点接口(SEI)上的方法,或者应用于 JavaBeans 端点的服务器端点实现类。

除以上的注解/注释类还包括javax.jws.Oneway、 javax.jws.WebResult、javax.jws.HandlerChain、javax.jws.SOAPBinding等等。

【详细说明请阅读如下地址】

http://www-01.ibm.com/support/knowledgecenter/SSAW57_6.1.0/com.ibm.websphere.wsfep.multiplatform.doc/info/ae/ae/rwbs_jaxwsannotations.html?lang=zh

【转载使用,请注明出处:http://blog.csdn.net/mahoking

基于JAX-WS规范的WebService实现,布布扣,bubuko.com

时间: 2024-10-16 15:29:27

基于JAX-WS规范的WebService实现的相关文章

(原创)用JAX-WS+Spring实现简单soap规范的webservice

转载请注明出处:http://www.cnblogs.com/Starshot/p/7050084.html Soap即简单对象访问协议,也可理解为一种用于程序之间通讯的规范,它主要基于XML和http,也正因为基于XML和http,所以这个协议具有很强的通用性,能够很好地实现不同语言平台之间的交流通讯.缺点是相对比较重量级. Java的Soap框架有很多,例如xfire,CXF.说到soap不得不提一下rest,因为这些概念很容易弄混. rest是一种结构风格,而实现了rest风格的程序设计就

转:使用基于Http的消息代替WebService的数据交互

http://blog.csdn.net/cyq1984/article/details/38041671 系统间交互的工作,随着信息化建设的发展,以及业界对SOA的认识及其带来的低TOC(总体拥有成本)等优势,越来越受到信息化水平较高的用户的重视. 这里先抛开SOA这样的架构规划,单纯就系统间整合的协议进行讨论. 系统间的交互或者成为整合(互联互通),早在信息化系统诞生的时候,就已经出现,只是并不明显,或者由于早期开发平台.开发语言等的单一性,这种需求并没有非常大的爆发出来. 随着信息化建设的

使用基于Http的消息代替WebService的数据交互

系统间交互的工作,随着信息化建设的发展,以及业界对SOA的认识及其带来的低TOC(总体拥有成本)等优势,越来越受到信息化水平较高的用户的重视. 这里先抛开SOA这样的架构规划,单纯就系统间整合的协议进行讨论. 系统间的交互或者成为整合(互联互通),早在信息化系统诞生的时候,就已经出现,只是并不明显,或者由于早期开发平台.开发语言等的单一性,这种需求并没有非常大的爆发出来. 随着信息化建设的发展,以及各种不同的开发语言的发展,跨语言的不同业务系统之间的交互,成为了摆在CIO们面前的一个大问题. 早

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

此文出自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据, 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客

go webssh 简单例子 (基于gin+ws+ssh)

项目地址 https://github.com/hequan2017/go-webssh go-webssh go版本 webssh 核心 本项目代码来自 https://github.com/dejavuzhou/felix ,只是把里面的webssh拿出来,修改了一下,做成webssh,特此说明.有需要可以查看此项目. 安装 修改 core/ssh.go 里面的账号密码地址等信息. 也可以自己修改成用密钥登录. func NewSshClient() (*ssh.Client, error)

基于Spring和CXF的webservice开发环境搭建

使用CXF发布webservice服务时,规范的做法是先书写一个接口,用以声明服务类型. 基于Spring和CXF开发web service的框架搭建 一.创建web项目 Eclipse中新建一个dynamic webproject,命名为:CXFTest 二.导入需要的jar包 把下载的CXF项目的解压缩文件中lib文件夹下的所有jar包拷贝到WebContent->WEB-INF->lib文件夹下 三.创建服务接口 在Java resource->src目录下新建package包:c

hbase查询基于标准sql规范中间件Phoenix

Phoenix是个很好的hbase 查询工具,在hbase中安装也很简单,可以按照 http://www.cnblogs.com/laov/p/4137136.html 这个连接中进行配置客户端和服务端的Phoenix. PhoenixSQL有如下类: 增删数据:ExecutableAddColumnStatement.ExecutableDropColumnStatement 创建/删除表格:ExecutableCreateTableStatement.ExecutableDropTableS

JAX-WS 学习二:基于WEB容器,发布WebService

WebService 的发布通过调用 Endpoint.publish() 方法来启动一个java内嵌的WEB容器来实现的,如果要将WebService部署到一个WEB容器中去,需要使用jax-ws提供的jar包,演示项目中使用的是最新的jax-ws的jar https://jax-ws.java.net/2.2.10/   可以在此进行下载. 实现方式: sun的jax-ws实现提供了两个类用来配置web容器的web.xml,实现从url到web service实现类的映射: 监听类:com.

用Node.js实现基于https的Restful风格webservice

1. 创建证书文件 bash-3.2$ bash-3.2$ mkdir ssl bash-3.2$ cd ssl bash-3.2$ openssl genrsa -out key.pem 1024 Generating RSA private key, 1024 bit long modulus ....................................++++++ ..........++++++ e is 65537 (0x10001) bash-3.2$ openssl r