使用JAX-WS开发简单webservice
来源:互联网 发布:spark入门书籍推荐知乎 编辑:程序博客网 时间:2024/04/28 04:42
webservice的技术有很多,现在流行的有JAX-WS、XFile、CXF、Axis1、Axis2等。不过JAX-WS是webservice技术最轻量级的,不需要引入额外jar包。
在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。
在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。
我们使用JAX-WS开发WebService只需要很简单的几个步骤:写接口和实现=>发布=>生成客户端。
开发webservice服务端我们可以先编写接口,接口中只需要把类注明为@WebService,把要暴露给客户端的方法注明为@WebMethod即可。
1:编写webservice服务端接口
package service;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;/** * 测试webservice接口 * @author * */@WebService@SOAPBinding(style = SOAPBinding.Style.RPC)public interface TestService {/** * 测试接口 */@WebMethod void SayHiDefault();@WebMethod void SayHi(@WebParam(name = "name") String name);@WebMethodString sayHello(String userName);}
2:编写接口的实现类
package service.imp;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import service.TestService;@WebService(endpointInterface = "service.TestService")@SOAPBinding(style = SOAPBinding.Style.RPC)public class TestServiceImp implements TestService {@Overridepublic void SayHiDefault() {System.out.println("Hi,wangql!");}@Overridepublic void SayHi(String name) {System.out.println("Hi,"+name+"!");}@WebMethodpublic String sayHello(@WebParam(name = "userName") String userName) {return "hi," + userName + " welcome to wangql";}}
3:发布
方法一:(此方式只能作为调试,有以下BUG:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在service接口和实现类添加“@SOAPBinding(style = SOAPBinding.Style.RPC)”注解)
package main;import javax.xml.ws.Endpoint;import service.TestService;import service.imp.TestServiceImp;public class ServerStart {public static void main(String[] args) {System.out.println("start publish jax-ws ...");TestService service = new TestServiceImp();Endpoint.publish("http://localhost:8080/jaxwsTest/TestService", service);System.out.println("publish webservice successful");}}方法二:(基于web服务器Servlet方式,使用tomcat发布)
以Tomcat为例,首先编写sun-jaxws.xml文件并放到WEB-INF下:
<?xml version="1.0" encoding="UTF-8"?><endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"><endpoint name="TestService" implementation="service.imp.TestServiceImp" url-pattern="/service/test" /></endpoints>
然后编辑web.xml,添加listener和servlet(url-pattern要保持一致):
<?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> <listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class> </listener> <servlet> <servlet-name>TestService</servlet-name> <servlet-class> com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>TestService</servlet-name> <url-pattern>/service/test</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>完成之后启动tomcat,访问http://localhost:8080/jaxwsTest/service/test?wsdl
成功访问wsdl文件,服务端可以正常运行。
注:@SOAPBinding(style = SOAPBinding.Style.RPC)一定要加上
http://www.micmiu.com/soa/webservice/jdk6-webservice-doc-rpc/ 可以看一下这篇文章,我再研究一下这个东西。
3:生成webservice客户端
方法一:使用jdk自带工具wsimport生成客户端
一般情况下直接输入wsimport命令行直接生成客户端,因为我是用java开发的,所以我是先在MyEclipse上创建一个webservice项目,然后在通过wsimport命令生成客户端,这样可以尽量避免因为编写造成的不必要麻烦。
(1)在Eclipse或者MyEclipse上创建一个webservice项目
(2)我们先访问到项目的src目录下,然后执行"wsimport -keep http://localhost:8080/jaxwsTest/TestService?wsdl"生成客户端代码。
注:我们访问的http://localhost:8080/jaxwsTest/TestService?wsdl是wsdl文件的路径
我们查看我们的项目,如图
这样就自动生成webservice客户端了。
我们在客户端编写测试代码
package main;import service.imp.TestServiceImpService;public class WSClient {public static void main(String[] args) {TestServiceImpService test = new TestServiceImpService();String name = test.getTestServiceImpPort().sayHello("123213");System.out.println(name);}}如图调用成功
方法二:使用MyEclipse创建webservice Client
在webservice服务端工程中 右击 new----> other ---->web service client创建客户端
在WSDL URL添加地址就可以了
如果出错检查自己的地址和tomcat服务是否已开启
方法三:自己创建webservice客户端,因为webservice可以跨平台,我们可以用任何语言编写客户端,所以自己编写客户端是最好的选择。
- 使用JAX-WS开发简单webservice
- 使用JAX-WS开发WebService
- 使用JAX-WS开发WebService简单入门(1)
- 使用jax-ws开发webservice(二)
- WebService笔记(第二弹:使用JAX-WS开发WebService)
- 用JAX-WS开发webservice
- JAX-WS使用Handler实现简单的WebService权限验证
- JAX-WS使用Handler实现简单的WebService权限验证
- 5、使用JAX-WS注解开发WebService程序
- JAX-WS 的简单使用
- 简单的Jax-WS WebService实现
- jax-ws 编写简单的webservice示例
- 简单的Jax-WS WebService实现
- 简单的Jax-WS WebService实现
- 简单的Jax-WS WebService实现
- JAX-WS:创建简单的webservice
- 简单的Jax-WS WebService实现
- 简单的Jax-WS WebService实现-cxf
- 玩转树莓派之二----中文设置
- SMT表面贴装工艺的三大步骤
- js字符串截取函数slice()、substring()、substr()
- Xcode去除版本控制
- 【2014】扑克问题
- 使用JAX-WS开发简单webservice
- JAVA wait(), notify(),sleep详解
- Ueditor在php中上传至七牛
- 常见面试题之一
- 动态删除li标签
- 大话设计模式c++实现——装饰模式
- Golang func -函数 1
- 当导入dmp文件时,发现报错时,可能是由于表空间不足造成的,查询与增加oracle 表空间的方法如下
- HTTP Header详解