Axis2和CXF是目前流行的Webservice框架,这两个框架都属于重量级框架。
相对而言,JAX-WS RI是一个轻量级的框架。
开发WebService只需要很简单的几个步骤:写接口和实现->发布->生成客户端(测试或使用)。

服务端写接口和实现

1、新建一个Maven Web项目,在项目中添加JAX-WS RI引用,pom.xml配置文件如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.test</groupId>
<artifactId>jwsDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging> <name>jwsDemo</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<!-- JAXWS-RI -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.10</version>
</dependency>
</dependencies>
<build>
<finalName>jwsDemo</finalName>
<defaultGoal>compile</defaultGoal>
</build>
</project>

2、创建服务接口

接口中把类注明为@WebService,把方法注明为@WebMethod,其余如@WebResult、@WebParam等都不是必要的,
而客户端和服务端的通信用RPC 和Message-Oriented两种。

package service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding; @WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloService { @WebMethod
void say1(); @WebMethod
void say2(@WebParam(name = "name") String name);
}

3、创建接口的实现类

package service.imp;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding; import service.HelloService; @WebService(endpointInterface = "service.HelloService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloServiceImp implements HelloService{ @Override
public void say1() {
System.out.println("Hi, abc!");
} @Override
public void say2(String name) {
System.out.println("Hi, " + name + "!");
} }

4、基于web服务器Servlet方式发布服务

(1)在WEB-INF中创建WebService配置文件sun-jaxws.xml,配置文件中一个WebService对应一个Endpoint。

<?xml version = "1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<!-- 服务路径http://站点路径/service/hello?wsdl-->
<endpoint name="HelloService" implementation="service.imp.HelloServiceImp" url-pattern="/service/hello" />
</endpoints>

(2)在web.xml中添加WSServlet,如果Web项目使用Servlet 3.0或以上则不需要。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"> <display-name>jwsDemo</display-name>
<!-- Servlet 3.0或者以上不需要配置 -->
<!-- <listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>HelloService</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>HelloService</servlet-name>
<url-pattern>/service/hello</url-pattern>
</servlet-mapping> --> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> </web-app>

(3)生成

选择项目 -> Run as -> Maven Install,在“workspace名称\项目名称\target”会生成“项目名称.war”,即jwsDemo.war

(4)选择项目 -> Run as -> Run on Server,在Eclipse中的浏览器中输入地址
http://localhost:8090/jwsDemo/service/hello?wsdl (备注:本机把默认端口8080改了8090)
能看到东西就说明正常

(5)部署
把jwsDemo.war复制到tomcat的webapps目录下,执行bin里面的startup.bat启动,tomcat自动把“项目名称.war”解压出来并启动。

客户端调用
1、使用jdk自带工具wsimport生成客户端的Java类:

"%java_home%\bin\wsimport" -keep -Xnocompile -d d:\java -p webservice.client http://localhost:8090/jwsDemo/service/hello?wsdl

几个参数说明:
-keep 保留生成的文件
-d <directory> 指定放置生成的输出文件的位置
-p <pkg> 指定目标程序包
-Xnocompile 不编译生成的 Java 文件

在d:\java\webservice\client生成了2个文件HelloService.java、HelloServiceImp.java

2、把生成的Java类添加到客户端相应的Package下

客户端调用

package test;

import webservice.client.HelloService;
import webservice.client.HelloServiceImpService; public class Hello{
public void say() {
HelloService service = new HelloServiceImpService().getHelloServiceImpPort();
service.say1();
service.say2("cdfefcg");
}
}

附,项目截图:

使用JAX-WS开发WebService的更多相关文章

  1. 使用JDK开发WebService

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  2. 2.使用JDK开发webService

    使用jdk开发webService需要注意:jdk版本必须1.6以及1.6以上! 以下webService的组成部分: server端和client端,通过服务器端(server)webService ...

  3. WebService学习总结(三)——使用JDK开发WebService

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  4. C# 开发XML Web Service与Java开发WebService

    一.web service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...

  5. Java开发WebService的几种方法--转载

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...

  6. Cxf + Spring3.0 入门开发WebService

    转自原文地址:http://sunny.blog.51cto.com/182601/625540/ 由于公司业务需求, 需要使用WebService技术对外提供服务,以前没有做过类似的项目,在网上搜寻 ...

  7. 使用GSoap开发WebService客户端与服务端

    Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...

  8. java开发webservice的几种方式(转载)

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2方式 Axis是apache下一个开源的webservice开发 ...

  9. JAX-WS + Spring 开发webservice

    通过几天的时间研究了下使用jax-ws来开发webservice,看了网上的一些资料总结出jax-ws的开发大概分为两种. 以下项目使用的spring3.0,jar包可以到官网下载 第一种:使用独立的 ...

  10. java开发webservice的几种方式

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...

随机推荐

  1. keras 上添加 roc auc指标

    https://stackoverflow.com/questions/41032551/how-to-compute-receiving-operating-characteristic-roc-a ...

  2. hdu1569 莫比乌斯反演

    hdu 1695 莫比乌斯反演 给出a,b,c,d,k, 求满足a <= x <= b && c <= y <= d && gcd(x,y)=k ...

  3. uvalive 3126 Taxi Cab Scheme

    题意: 有m个人要坐出租车,每个人给出出发时间,出发地点和目的地(以二维坐标表示),两个地点之间所花的时间计算方式是两点之间的哈密顿距离.现在需要排遣车出去,一辆车每次只能装一个人,如果一辆车在装完一 ...

  4. 【Alpha版本】冲刺阶段——Day3

    [Alpha版本]冲刺阶段--Day3 阅读目录 今日进展 问题困难 明日任务 今日贡献量 TODOlist [今日进展] 密码算法方面: 参考了md5/sha1+salt和Bcrypt后,我们决定使 ...

  5. 常用正则表达式爬取网页信息及HTML分析总结

    Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取<tr></tr>标签之间内容 2.获取<a href..></a>超链接之间内容 3 ...

  6. Redis内存分析方法

    一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sqlite 来进行静态分析. BGSAVE:在后台异步(Asynchronously)保存当前数据 ...

  7. 每日linux命令学习-xargs命令

    xargs命令 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据 ...

  8. this和构造器的内存分析(***)

    this的含义: 1.区分成员变量和局部变量: 2.谁调用这个this就指向谁: public class Person{ private String name; private int age; ...

  9. django中模型详解-字段类型与约束条件

    这片博文来详细说明django模型的使用,涉及到django模型的创建,字段介绍,以及django模型的crud操作,以及一对一等操作. 在使用模型之前,我们首先设置数据库选项,django的默认数据 ...

  10. mycat分片操作

    mycat位于应用与数据库的中间层,可以灵活解耦应用与数据库,后端数据库可以位于不同的主机上.在mycat中将表分为两大类:对于数据量小且不需要做数据切片的表,称之为分片表:对于数据量大到单库性能,容 ...