关于webservice怎么做的问题

cxf实现的RESTful WebService如何做到设置token赋予不一样的权限

3个回答

可以到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]);
}
}

看你用什么开发语言 各种语言都有web service的开发库

donggua3694857
GrayHJX 用的java,试问怎样去实现一个有token验证类似的东西
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问