cxf实现的RESTful WebService如何做到设置token赋予不一样的权限
可以到apache官网上下载apache CXF 包,不知道你用什么语言开发,去对应的地方下载就行啦!
1.apache CXF webService多系统交互服务,
2.从apache CXF 官网上下载CXF用到的java包
最少需要:cxf-2.7.18.jar ,neethi-3.0.3.jar,stax2-api-3.1.4.jar,woodstox-core-asl-4.4.1.jar,wsdl4j-1.6.3.jar,xmlschema-core-2.1.0.jar,将这些cxf的jar包放到webservice的项目中,然后项目通过building path引入这些jar包,
3.在项目的web.xml中引入CXF的servlet
CXFServlet
org.apache.cxf.transport.servlet.CXFServlet
1
CXFServlet
/ ws/*
启动tomcat,
4.CXF服务端的配置文件: applicationContext-server.xml
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans xmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xmlns:jaxws="http://cxf.apache.org/jaxws"
5. xsi:schemaLocation="http://www.springframework.org/schema/beans
6. http://www.springframework.org/schema/beans/spring-beans.xsd
7. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
8. <!--
9. ***注意***
10. 手动添加的内容:
11. xmlns:jaxws="http://cxf.apache.org/jaxws"
12. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
13. -->
14.
15. <import resource="classpath:META-INF/cxf/cxf.xml" />
16. <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
17. <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
18.
19. <jaxws:endpoint id="helloService" implementor="com.test.server.HelloWorldServerImp" address="/helloService" />
20.
21. </beans>
22. 5.将服务端的配置文件在spring的applicationcontext.xml文件引入cxf服务端配置文件,加载cxf配置文件,
23. < import resource ="com/test/server/applicationContext-server.xml"/>
24. 6.测试服务端的服务接口
25. http://localhost:8080/webService/ws/helloService?wsdl查看某一个接口的类
26.
27. http://localhost:8080/webService/ws查看多个接口类
28.
29. 7.
org.springframework.context.ApplicationContext ;spring的jar包提供应用上下文类,用于读取.xml文件的属性信息,
30. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml" );
31. IHelloWorldServer helloService = (IHelloWorldServer) context.getBean( "client");
32. 8.客户端调用服务端的异常 Could not find wsdl:binding operation info for web method sayHello,
33. 解决方法:在服务端的接口要添加
34. import javax.jws.WebService;
35. @WebService//否则就会包那个异常
36. 9.客户端调用服务端的代码
37. CXF通过运行时代理生成远程服务的代理对象,在客户端完成对webservice的访问
package com.flyfox.client;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import com.flyfox.service.IHelloWorldService;
public class HelloWorldServiceClient {
public static void main(String[] args) throws Exception {
//调用WebService
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(IHelloWorldService.class);
factory.setAddress("http://localhost:9000/helloWorld");
IHelloWorldService service = (IHelloWorldService) factory.create();
System.out.println("[result]" + service.sayHello("flyfox"));
}
}
小结:这种调用service的好处在于调用过程非常简单,就几行代码就完成一个webservice的调用,但是客户端也必须依赖服务器端的接口,这种调用方式限制是很大的,要求服务器端的webservice必须是java实现--这样也就失去了使用webservice的意义
查看了官方的文档后,发现其实是可以实现不依赖服务器端接口来完成调用的,如下
使用JaxWsDynamicClientFactory类,只要指定服务器端wsdl文件的位置,然后指定要调用的方法和方法的参数即可,so simple!!
package com.flyfox.client;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import com.flyfox.service.IHelloWorldService;
public class HelloWorldServiceClient {
public static void main(String[] args) throws Exception {
//不依赖服务器端接口来完成调用的,也就是不仅仅能调用Java的接口
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();//创建客户端工厂类
Client client = clientFactory.createClient("http://localhost:9000/helloWorld?wsdl");//通过客户端的工厂类的createClient方法,参数是服务的wsdl地址,创建客户端对象,Object[] result = client.invoke("sayHello", "KEVIN");//客户端对象的invoke方法,参数是服务端的方法和方法的参数,返回一个结果数组
System.out.println(result[0]);
}
}
http://blog.csdn.net/hanxuemin12345/article/details/40163757
http://www.cnblogs.com/yisheng163/p/4524808.html
http://blog.sina.com.cn/s/blog_a0e7e34c0101959p.html
看你用什么开发语言 各种语言都有web service的开发库