cxf实现的RESTful WebService如何做到设置token赋予不一样的权限
3条回答 默认 最新
- qq_22668529 2016-07-29 03:48关注
可以到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.xml1. <?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]);
}
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 matlab appdesigner私有函数嵌套整合
- ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
- ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
- ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
- ¥15 关于freesurfer使用freeview可视化的问题
- ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
- ¥15 求SC-LIWC词典!
- ¥20 有关esp8266连接阿里云
- ¥15 C# 调用Bartender打印机打印
- ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题