`
duanfei
  • 浏览: 719347 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JAX-WS开发webservice示例详解

 
阅读更多

目录:

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

[一]、概述
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.最基本的实例

编写接口代码:ReportService.java

package com.jshx.http.ws;

public interface ReportService {
	String queryDate(String jsonStr); 
}

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

package com.jshx.http.ws.impl;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import com.jshx.http.ws.ReportService;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class ReportServiceImpl implements ReportService {

	@WebMethod
	public String queryDate(@WebParam(name="jsonStr") String jsonStr) {
		return "hi," + jsonStr + " welcom to www.micmiu.com";
	}

}

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

package com.jshx.http.ws;

import javax.xml.ws.Endpoint;

import com.jshx.http.ws.impl.ReportServiceImpl;

public class WsServerStart {
	public static void main(String[] args) {
		ReportService ws = new ReportServiceImpl();
		Endpoint.publish("http://localhost:8080/ReportServer", ws);
	}
}

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

 

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

如果出现问题:

 

原因:cxf需要jaxws-api-2.1.jar及jaxb-api-2.1.jar的支持

 

解决方案

1、将cxf所需的2.1的jar复制一份到jdk目录下的jre\lib\endorsed文件夹中。如果endorsed文件不存在,可新建。如果不行,可能还需要在public class XXX上方加入@SOAPBinding(style = SOAPBinding.Style.RPC)
2、jdk升级到1.6.0_22版本以上。

 

二、MyEclipse利用网上公开发布WSDL文件,创建WebService Client,进行调用WebService

1. 打开MyEclipse,新建一个Web Project;然后新建 一个package,取名为com.test;

2. 然后再New一个Web Service Client;

点next ,然后录入 WSDL URL: http://localhost:8080/ReportServer?wsdl

点next,点finish;ok了,系统会自动帮忙生成很多代码。

 

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

package com.jshx.http.ws.client;

public class ReportClient {
	public static void main(String[] args) {
		ReportServiceImplService service = new ReportServiceImplService();
		ReportServiceImpl report = service.getReportServiceImplPort();
		System.out.println("start webservice client ...");
		System.out.println("send Michael to server ");
        System.out.println(report.queryDate("Michael"));
        System.out.println("test client end.");

	}
}

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

 

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

 可见客户端调用成功。

 

 

另一种方法:

1 MyFirstJAX-WS
2.建一个包<包名根据自己需要来我这里是com.wx.jaxws.example>
  在里面建立一个java类
 
package com.wx.jaxws.example;
//import javax.jws.WebMethod;
//import javax.jws.WebService;
//import javax.jws.soap.SOAPBinding;
//@WebService(serviceName = "HelloService", portName = "HelloServicePort", targetNamespace = "http://example.jaxws.wx/jaxws/MyFirstOne")
//@SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
 use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class MyFirstOne { 
//@WebMethod public String sayHello(String s) {  
System.out.println("hello," + s); 
 return "hello," + s; 
}
}
 
有很多被注释的地方不管.这个类很简单 就是接收一个字符串 打印并且返回
3.建立服务
右键点击项目File->New->others->Myeclipse->Web Service->Web Service 
点击之后出现的屏幕,在 Strategy 中选择--> <Create web service from Java Bean>Bottom-up scenario
点击next 在接下来的对话框中 输入类的名字 并且找到它  点击FINISH
因为我们已经建立好了类而且想根据它建立JAX-WS服务。
会生成一个 类名+Delegate.java的文件  我这里生成的是 MyFirstOneDelegate.java
 
4.到上一步已经做好了WebService 接下来我们做发布
在项目名称上右击->properties->点击左边的 Java Build Path->选择选项卡 Libraries->点击右边的按钮 Add Library->
选择 Myeclipse Libraries->勾选 JAX-WS 2.1 Runtime Labraries(Project Metro 1.1) 和 JAX-WS 2.1 API Labraries
<其实就是最后面的两个>
 
5.导入几个Jar包<我已经放在目录里了> 其实这几个Jar包在 
MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.ws.xfire_6.5.1.zmyeclipse650200806\lib
的目录下也已经存在 不过我们要导入项目中
其实要的是这个包webservices-tools.jar
 
6.然后可以运行了 URL和xfire不一样
http://127.0.0.1:8080/MyFirstJAX-WS/MyFirstOnePort?wsdl
是项目名/类名Port?wsdl
正确出现xml文档则表示ok!
 
---------------------使用-----------------------
7.新建一个工程 java工程也好 web工程也好
我这里方便测试建的java工程 MyTestJAX-WS_New
右键点击项目File->New->others->Myeclipse->Web Service->Web Service Client 
点击next 选择JAX-WS ->选择 WSDL URL 在这个里面输入刚才测试通过的URL 然后点击next等处理一下点击FINISH就好了
会生成很多类  这里我让自动生成的全在test包里
  • 大小: 110.8 KB
  • 大小: 86.5 KB
分享到:
评论
1 楼 gengjunshi 2016-02-02  
非常感谢哈,刚好在学webservice编程,很有用呢。

相关推荐

    超爽的抽屉效果.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    关于学习C语言时写的代码.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    机械臂论文.doc

    机械臂论文.doc

    S7200 and WINCC flexible.doc

    S7200 and WINCC flexible.doc

    27.大学生体质测试管理系统的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文

    27.大学生体质测试管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) 详细设计文档介绍链接:http://t.csdnimg.cn/jtyYh 内容概要: 系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管理、体质测试管理、测试报告管理、测试成绩管理、留言板、系统管理;基本上实现了整个大学生体质测试管理系统信息管理的过程。 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    c语言-c语言编程基础之leetcode题解第24题两两交换链表中的节点.zip

    c语言 c语言_c语言编程基础之leetcode题解第24题两两交换链表中的节点

    电子麦克风.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    文字转语音朗读器.txt

    文字转语音朗读器.txt

    C语言学习,语言学习.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    基于Web的平面设计课程在线学习平台设计与实现-平面设计课程在线学习平台java代码-平面设计课程在线学习平台java代码-代码

    平面设计课程在线学习-平面设计课程在线学习平台-平面设计课程在线学习平台源码-平面设计课程在线学习平台java代码-平面设计课程在线学习平台设计与实现-基于ssm的平面设计课程在线学习平台-基于Web的平面设计课程在线学习平台设计与实现-平面设计课程在线学习网站-平面设计课程在线学习网站源码-平面设计课程在线学习网站java代码-平面设计课程在线学习项目-平面设计课程在线学习项目代码-平面设计课程在线学习系统-平面设计课程在线学习系统源码-平面设计课程在线学习管理系统-平面设计课程在线学习管理系统java代码-平面设计课程在线学习代码 1、技术栈:java,ssm,spring,springmvc,vue,ajax,maven,mysql,MyBatisPlus等 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:SQLyog/Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器 2、系统的实现 用户信息 图片素材 视频素材 摘 要 I 目 录 III 第1章 绪论

    ་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 ་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    DSP实用教程PPT上.ppt

    DSP实用教程PPT上.ppt

    基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    标记view.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    Python 入门教程快速学会 Python.docx

    python入门 假设我们有这么一项任务 : 简单测试局域网中的电脑是否连通 . 这些电脑的 ip 范围 从 192.168.0.101 到 192.168.0.200. 思路 : 用 shell 编程 .(Linux 通常是 bash 而 Windows 是批处理脚本 ). 例如 , 在 Windows 上用 ping ip 的命令依次测试各个机器并得到控制台输出 . 由于 ping 通的时候控制台文 本通常是 "Reply from ... " 而不通的时候文本是 "time out ... " , 所以 , 在结果中进行 字符串查找 , 即可知道该机器是否连通 .实现 :Java 代码如下

    临写字帖.zip

    临写字帖.zip

    英飞凌PowerCode软件安装教程

    英飞凌PowerCode软件安装教程,包括下载链接和安装步骤

    仿美图秀秀拼图功能使用代码的时候,请修改2014-03big文件放到mntsdcardclothe目录下。.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    本科获奖毕业论文-基于DSP的语音信号的处理.doc

    本科获奖毕业论文-基于DSP的语音信号的处理.doc

    RTKLIB上机实习资料

    有关RTKLIB资源 实习使用 参考Blog地址:https://blog.csdn.net/CUGLin/article/details/137975165?spm=1001.2014.3001.5501

Global site tag (gtag.js) - Google Analytics