http://www.micmiu.com/soa/webservice/jax-ws-demo/

目录:

  • 概述
  • 实验环境
  • 服务端的实现
  • 客户端的实现

[一]、概述
Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。

在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。

在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。

当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。

JAX-WS2.0 (JSR 224 )是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222 ),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173 ),同时它还完全支持schema规范。

JAX-WS与JAX-RPC的区别 可参见:http://java.sun.com/xml/faq.html#JAX-WS-and-JAX-RPC-difference

JAX-WS一些参考资料:

  1. JAX-RPC 2.0 renamed to JAX-WS 2.0
  2. The Java web service Tutorial
  3. javax.jws.WebService

[二]、实验环境

  • java version “1.6.0_18″、Eclipse3.7
  • maven构建项目:mvn archetype:create -DgroupId=com.micmiu.jaxws.demo -DartifactId=jaxws-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

[三]、服务端的实现

1.最基本的实例

编写接口代码:HelloService.java

查看源代码 打印帮助
1 package com.micmiu.jaxws.demo;
2   
3 /**
4  * blog http://www.micmiu.com
5  *
6  * @author Michael
7  */
8 public interface HelloService {
9     String sayHello(String userName);
10 }

实现接口并添加webservice注释:HelloServiceImpl.java

查看源代码 打印帮助
1 package com.micmiu.jaxws.demo.impl;
2   
3 import javax.jws.WebMethod;
4 import javax.jws.WebParam;
5 import javax.jws.WebService;
6 import javax.jws.soap.SOAPBinding;
7   
8 import com.micmiu.jaxws.demo.HelloService;
9   
10 /**
11  * blog http://www.micmiu.com
12  *
13  * @author Michael
14  */
15 @WebService()
16 //默认SOAPBinding style = Style.DOCUMENT
17 @SOAPBinding()
18 public class HelloServiceImpl implements HelloService {
19   
20     @WebMethod
21     public String sayHello(@WebParam(name = "userName") String userName) {
22         return "hi," + userName + " welcom to www.micmiu.com";
23     }
24   
25 }

编写服务端发布代码:ServerStart.java

查看源代码 打印帮助
1 package com.micmiu.jaxws.demo;
2   
3 import javax.xml.ws.Endpoint;
4   
5 import com.micmiu.jaxws.demo.impl.HelloServiceImpl;
6   
7 /**
8  * blog http://www.micmiu.com
9  *
10  * @author Michael
11  */
12 public class ServerStart {
13   
14     /**
15      * @param args
16      */
17     public static void main(String[] args) {
18         System.out.println("start publish jax-ws ...");
19         HelloService service = new HelloServiceImpl();
20         Endpoint.publish("http://localhost:8082/HelloService", service);
21         System.out.println("publish webservice successful");
22     }
23   
24 }

运行ServerStart,日志如下:

start publish jax-ws ...
2012-7-12 10:56:41 com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass
信息: Dynamically creating request wrapper Class com.micmiu.jaxws.demo.impl.jaxws.SayHello
2012-7-12 10:56:42 com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
信息: Dynamically creating response wrapper bean Class com.micmiu.jaxws.demo.impl.jaxws.SayHelloResponse
publish webservice successful

浏览器打开:http://localhost:8082/HelloService?wsdl 回车显示如下:

可见服务端已经发布成功。

运用JDK自动的命令: wsgen 生成wsdl文件和异常处理的相关类

ps:如果webservice中有异常声明,必须用wsgen生成常处理的相关类之后,才能发布。

按win+R键,输入cmd回车进入命令行界面,切换到target下创建目录ws,在执行如下命令:

查看源代码 打印帮助
1 mkdir ws\bin ws\src ws\wsdl
  • bin    -> 存放生成的class文件
  • src    -> 存放生成的源代码文件
  • wsdl  -> 存放生成的wsdl 文件

再执行如下命令:

查看源代码 打印帮助
1 wsgen -cp .;classes/ -r ws/wsdl -s ws/src -d ws/bin -wsdl com.micmiu.jaxws.demo.impl.HelloServiceImpl

生成后的目录如下:

D:\workspace_dev\jaxws-demo\target>tree /F ws
卷 work 的文件夹 PATH 列表
卷序列号为 2AF7-9BD9
D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\WS
├─bin
│  └─com
│      └─micmiu
│          └─jaxws
│              └─demo
│                  └─impl
│                      └─jaxws
│                              SayHello.class
│                              SayHelloResponse.class
│
├─src
│  └─com
│      └─micmiu
│          └─jaxws
│              └─demo
│                  └─impl
│                      └─jaxws
│                              SayHello.java
│                              SayHelloResponse.java
│
└─wsdl
HelloServiceImplService.wsdl
HelloServiceImplService_schema1.xsd

2.@WebService 指定 endpointInterface 实例

修改接口代码:HelloService.java

查看源代码 打印帮助
1 package com.micmiu.jaxws.demo;
2   
3 import javax.jws.WebMethod;
4 import javax.jws.WebParam;
5 import javax.jws.WebService;
6 import javax.jws.soap.SOAPBinding;
7 import javax.jws.soap.SOAPBinding.Style;
8   
9 /**
10  * blog http://www.micmiu.com
11  *
12  * @author Michael
13  */
14 @WebService
15 @SOAPBinding(style = Style.DOCUMENT)
16 public interface HelloService {
17     @WebMethod
18     String sayHello(@WebParam(name = "userName") String userName);
19 }

修改接口实现类:HelloServiceImpl.java

查看源代码 打印帮助
1 package com.micmiu.jaxws.demo.impl;
2   
3 import javax.jws.WebService;
4   
5 import com.micmiu.jaxws.demo.HelloService;
6   
7 /**
8  * blog http://www.micmiu.com
9  *
10  * @author Michael
11  */
12 @WebService(endpointInterface = "com.micmiu.jaxws.demo.HelloService")
13 public class HelloServiceImpl implements HelloService {
14     public String sayHello(String userName) {
15         return "hi," + userName + " welcom to www.micmiu.com";
16     }
17   
18 }

运行ServerStart 启动程序,可通过运行日志和浏览器访问wsdl文件进行验证。

[四]、客户端的实现

1. wsimport 生成客户端

按win+R键,输入cmd回车进入dos,切到target目录,然后创建目录:client、client\bin、client\src

在target目录下运行如下命令回车即可生成客户端文件:

查看源代码 打印帮助
1 wsimport -s client/src -d client/bin -p com.micmiu.jaxws.client http://localhost:8082/HelloService?wsdl

生成源文件目录结构如下:

D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\CLIENT\SRC
└─com
└─micmiu
└─jaxws
└─client
HelloServiceImpl.java
HelloServiceImplService.java
ObjectFactory.java
package-info.java
SayHello.java
SayHelloResponse.java

2.编写客户端测试程序:HelloClient.java

查看源代码 打印帮助
1 package com.micmiu.jaxws.client;
2   
3 /**
4  * blog http://www.micmiu.com
5  * @author Michael
6  */
7 public class HelloClient {
8   
9     /**
10      * @param args
11      */
12     public static void main(String[] args) {
13         HelloServiceImplService service = new HelloServiceImplService();
14         HelloServiceImpl hello = service.getHelloServiceImplPort();
15         System.out.println("start webservice client ...");
16         System.out.println("send Michael to server ");
17         System.out.println(hello.sayHello("Michael"));
18         System.out.println("test client end.");
19     }
20   
21 }

运行测试程序,日志如下:

start webservice client ...
send Michael to server
hi,Michael welcom to www.micmiu.com
test client end.

可见客户端调用成功。

========================

http://daizh868.iteye.com/blog/1194815/

使用Myeclipse 8.5开发基于JAX-WS的Web service实例

=======================

https://forums.oracle.com/forums/thread.jspa?threadID=1115210

java.lang.NoClassDefFoundError:  com/sun/xml/ws/spi/ProviderImpl

Hi
Before you run this client program from any IDE or command prompt, set wlfullclient.jar in the classpath. To generate this wlfullclient.jar, please refer the notes from my below post. In Eclipse or JBuilder, you can select your project and set this library in classpath. Or in command prompt set it manually.

http://forums.oracle.com/forums/thread.jspa?messageID=3977012

Note: I already generated this wlfullclient.jar. And I DO SEE your missing class in this jar file. So the above solution should fix your problem.

Thanks
Ravi Jegga

JAX-WS开发webservice示例详解相关推荐

  1. python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解

    扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...

  2. WebService教程详解

    WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求,接下来通过本文给大家介绍WebService教程详解,对webservice教程感兴趣的 ...

  3. php reactphp wss_workerman的基本用法(示例详解)

    workerman是什么? Workerman是一个异步事件驱动的PHP框架,具有高性能,可轻松构建快速,可扩展的网络应用程序.支持HTTP,Websocket,SSL和其他自定义协议.支持libev ...

  4. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  5. php 实例 规范,PHP开发规范实例详解

    本文主要和大家分享PHP开发规范实例详解,希望能帮助到大家. 源文件 代码使用<?php开头 ,忽略闭合标签?> 文件格式必须是无BOM UTF-8格式 一个文件只声明一种类型,如clas ...

  6. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入Lin ...

  7. rcs开机启动mysql_linux添加开机自启动脚本示例详解-阿里云开发者社区

    linux添加开机自启动脚本示例详解 double2li 2017-04-14 1652浏览量 简介: linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的;一.在/etc/r ...

  8. SpringCloud分布式开发五大组件详解

    SpringCloud分布式开发五大组件详解 https://blog.csdn.net/weixin_40910372/article/details/89466955 服务发现--Netflix ...

  9. NRF52x开发环境搭建详解

    NRF52x开发环境搭建详解 准备 环境搭建 了解内存布局 Bootloader工程 APP工程 JFlash下载 打印log 准备 以下是项目开发环境搭建的一些文档或工具链接: 项目 链接 CPU ...

最新文章

  1. a.cmd 文件里的内容
  2. 让开源解读“甲骨文”--RHEL5.3部署安装Oracle Database10g Release2
  3. oracle instr查询字符串
  4. MachineLearning(8)-PCA,LDA基础+sklearn 简单实践
  5. 【Elasticsearch】Elasticsearch 动态模板(Dynamic templates)
  6. preg_match_all使用实例
  7. python编程广告_为什么铺天盖地都是Python的广告?
  8. mysql gis vs postgis_mysql空间扩展VSPostGIS
  9. 04-树6 Complete Binary Search Tree(30 分)
  10. 1至100之和用c语言表达方式,C语言菜鸟基础教程之求1到100的和
  11. MySQL 指定各分区路径
  12. c语言闰年题目程序,浙大版《C语言程序设计(第3版)》题目集 练习3-5 输出闰年...
  13. visio 2013免费激活
  14. catia中的螺旋伞齿轮画法_使用CATIA绘制斜齿轮(直齿轮)得画法教程.doc
  15. Spring AOP 循环应用(This means that said other beans do not use the final version of the bean..)
  16. chm 文件的阅读、制作和反编译
  17. e admin admin.php,EAdmin极简社区源码
  18. l完整的计算机系统,一个完整的计算机系统包括
  19. 【SAP打印】SMARTFORMS标签无法调整横向打印
  20. 【建议背诵】2022下半年软考「集成」100题(1)

热门文章

  1. HarmonyOS之常用布局AdaptiveBoxLayout的使用
  2. iOS之实现“摇一摇”与“扫一扫”功能
  3. 剑指 Offer 11. 旋转数组的最小数字 LCOF
  4. Fence Repair POJ - 3253
  5. AI 质检学习报告——实践篇——第三步:python利用OpenCV打开摄像头截图后实现图片识字
  6. 【Android】Android模拟器无法上网问题
  7. 漂亮的电脑倒计时软件_9款实用倒计时软件,统统送你了
  8. kotlin sealed 中_Kotlin sealed class
  9. C语言ODBC方式连接DM数据库
  10. 每天一道LeetCode-----数独盘求解