- 浏览: 212900 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
lizhenzhendebishe:
提示An error was discovered proce ...
WebService:Axis客户端调用需要身份验证的CXF服务 -
yuanliangding:
学习了。不太接触底层的东西
UNIX系统的IO模型 -
_copythat:
加油,。。。
阳光总会在风雨之后洒向苍茫 -
donlianli:
莫非去淘宝菜鸟网络了?
阳光总会在风雨之后洒向苍茫 -
菜鸟小于:
我也是哈尔滨的,在广州做了三年的开发,可是实际上我们是在维护一 ...
阳光总会在风雨之后洒向苍茫
CXF服务端代码:
1、web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <!-- Spring Config Location --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/beans.xml</param-value> </context-param> <!-- Spring ContextLoaderListener --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- Apache CXFServlet --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- CXFServlet Mapping --> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping> </web-app>
2、beans.xml配置, 在beans.xml中配置服务端的拦截器interceptor.AuthenticationInterceptor,拦截器需要
继承AbstractPhaseInterceptor
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- Import Apache CXF Bean Definition --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- serviceClass指定接口 --> <jaxws:server id="hello" serviceClass="service.SampleWebService" address="/HelloWorld"> <jaxws:serviceBean> <bean class="service.SampleWebService" /> </jaxws:serviceBean> <jaxws:inInterceptors> <bean class="interceptor.AuthenticationInterceptor"> <property name="username" value="admin" /> <property name="password" value="admin" /> </bean> </jaxws:inInterceptors> </jaxws:server> </beans>
3、在拦截器中对用户身份进行验证
package interceptor; import java.util.List; import javax.xml.soap.SOAPException; import org.apache.cxf.binding.soap.SoapMessage; import org.apache.cxf.headers.Header; import org.apache.cxf.interceptor.Fault; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; import org.w3c.dom.Node; public class AuthenticationInterceptor extends AbstractPhaseInterceptor<SoapMessage> { private String username; private String password; public AuthenticationInterceptor() { // 指定该拦截器在哪个阶段被激发 super(Phase.PRE_INVOKE); } public void handleMessage(SoapMessage msg) throws Fault { List<Header> headers = msg.getHeaders(); if (null == headers || headers.size() < 1) { throw new Fault(new SOAPException("SOAPHeader格式错误")); } for (Header header : headers) { Node root = (Node) header.getObject(); if("Authentication".equals(root.getNodeName())){ Node userNode = root.getFirstChild(); Node passwordNode = root.getLastChild(); if(userNode == null || passwordNode == null){ throw new Fault(new SOAPException("SOAPHeader需要包含Username和Password节点")); } if(!userNode.getNodeName().equals("Username") || !passwordNode.getNodeName().equals("Password")){ throw new Fault(new SOAPException("SOAPHeader需要包含Username和Password节点")); } if(username.equals(userNode.getTextContent()) && password.equals(passwordNode.getTextContent())){ System.out.println("认证通过"); } else{ throw new Fault(new SOAPException("用户名或密码错误")); } } else{ throw new Fault(new SOAPException("SOAPHeader需要包含Authentication节点")); } } } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
4、服务接口,CXF可以直接发布JavaBean,只需要一个@WebService注解
package service; import javax.jws.WebService; @WebService public class SampleWebService{ public String sayHello(String name) { return "Hello, "+name; } public String sayHi(String name) { return "Hi, "+name; } }
5、Axis客户端:
/** * <soapenv:Header> * <Authentication * soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" * soapenv:mustUnderstand="0" * xmlns=""> * <Username>admin</Username> * <Password>admin</Password> * </Authentication> * </soapenv:Header> * @param user * @param password */ public static void authentication(String user, String password){ try { Call call = (Call)new Service().createCall(); call.setTargetEndpointAddress("http://localhost:8080/ws/service/HelloWorld"); String namespace = "";//命名空间 SOAPHeaderElement header = new SOAPHeaderElement(namespace,"Authentication"); header.setPrefix("");//前缀 header.addChildElement("Username").addTextNode(user); header.addChildElement("Password").addTextNode(password); call.addHeader(header); Object obj = call.invoke("sayHi", new String[]{"sam"}); System.out.println(obj); } catch (Exception e) { e.printStackTrace(); } }
在axis的jar包中还提供了一个tcp_moniter,可以用来拦截soap消息,便于debug。
可以使用java -Djava.ext.dirs=lib org.apache.axis.utils.tcpmon来启动,启动前要先将axis的jar包都放在lib目录下,然后在lib的同级目录中建一个bat脚本,脚本中写:java -Djava.ext.dirs=lib org.apache.axis.utils.tcpmon。
这样双击bat脚本就可以启动tcp_moniter了。
tcp_moniter界面:
cxf_server端和axis_client端的工程源码见附件。
- axis_client.rar (1.7 MB)
- 下载次数: 129
- cxf_server.part1.rar (9.5 MB)
- 下载次数: 78
- cxf_server.part2.rar (7.9 MB)
- 下载次数: 62
评论
2 楼
lizhenzhendebishe
2017-08-07
提示An error was discovered processing the <wsse:Security> header
1 楼
CoderDream
2014-09-28
感谢分享,运行通过,:D
Axis客户端的Client.java的第17行需要修改为(项目名称由ws改为cxf_server): call.setTargetEndpointAddress("http://localhost:8080/cxf_server/service/HelloWorld");
Axis客户端的Client.java的第17行需要修改为(项目名称由ws改为cxf_server): call.setTargetEndpointAddress("http://localhost:8080/cxf_server/service/HelloWorld");
发表评论
-
使用zookeeper实现分布式共享锁
2013-04-13 15:59 2557分布式系统中经常需要协调多进程,多个jvm,或者多台机器之间 ... -
使用axis轻松调用Webservice
2012-11-10 13:15 21855使用axis1.4调用webservice有两种简单的方式: ... -
执行java程序时如何引用依赖的jar
2012-11-10 12:38 1748在执行java程序时我们可以通过-Djava.ext.dirs ... -
Log4j简单实用配置
2012-10-27 12:22 3629#A1为控制台输出,A2为文件输出,R为文件输出,并且按 ... -
JavaNIO处理长连接
2012-09-12 21:04 14042之前在IBM的网站上看到过一篇介绍NIO的文章,收获很大。但文 ... -
Int和byte数组之间的转换
2012-08-27 20:25 18744有时候和C的程序通信的时候,我们在封装协议时,可能需要将Jav ... -
用闭锁测试HashMap的并发写入问题
2012-08-27 19:39 3619今天无意中看到以前写 ... -
LDAP查询分页,基于迭代器的查询分页
2012-08-25 17:26 8440LDAP服务器端可以支持分页查询,但是有个前提条件 ... -
并行计算框架的Java实现--系列三
2012-07-14 14:38 4104接上篇并行计算框架的Java实现--系列二 优化锁,之 ... -
并行计算框架的Java实现--系列二
2012-07-14 08:41 2892接上篇并行计算框架的J ... -
并行计算框架的Java实现--系列一
2012-07-14 07:38 3435最近的工作需要统计一些复杂的报表,为了提高效率,想用多线程去实 ... -
ant初探
2012-06-29 13:38 2865前些天和同事交流,他说ant非常好用,他一直在用,学习资料共享 ... -
基于事件的 NIO 多线程服务器
2012-06-27 17:06 1203JDK1.4 的 NIO 有效解决了原有流式 IO 存在的线程 ... -
Java NIO学习
2012-06-22 22:46 0端午节加班要开发一个SocketServer,需要承载1000 ... -
httpclient访问https服务,可以信任证书
2012-06-02 00:48 6803private HttpClient initHttpClie ... -
Java或Web工程中查找配置文件
2012-06-02 00:35 1029String path = ""; URL ... -
如何获取真实的终端IP
2011-11-24 11:16 1183在有Apache做负载均衡的时候使用request.getRe ... -
MANIFEST.MF的应用以及如何读取jar包外的log4j.properties
2011-11-22 18:21 34MANIFEST.MF是jar文件的配置文件,在用eclips ... -
java实现的telnet协议
2011-10-02 17:14 7339package telnet; import j ... -
很好用的java反编译工具
2011-10-02 16:36 1205可以反编译单个文件,也可以反编译整个jar
相关推荐
现在主流的webService框架,一个是axis2,一个是cxf,本资源是基于cxf框架的简单例子
使用spring3+ cxf 3.4做服务方,Axis1.4做请求方,在调用的时候,通过转换cxf的wsdl格式为axis1.4的wsdl格式来达到调用的目的。
springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口
axis调用第三方webservice接口所需的jar包,包括axis-1.4.jar,axis-jaxrpc-1.3.jar,axis-jaxrpc-1.4.jar,commons-discovery-0.5.jar,commons-logging-1.2.jar,cxf-rt-databinding-jaxb-3.3.1.jar,javax.mail-...
cxf_axis_xfire客户端调用的几种方法.docx
纯java调用ws-security+CXF实现的webservice安全接口
如何使用CXF(和wsimport)生成Web服务客户端的示例。 git clone https://github.com/Transmode/webservice_clients.git cd webservices_client 运行托管元素收集器 在命令行上运行: cd mer/collector_mer ../.....
最近项目中遇到需要去掉老系统的webservice服务中的insert方法,找了很久,发现这样最简单,实测有效!!!
WebService调用的几种方式,总结了Axis,Cxf,HttpClient,Myeclipse反向生成,XFire调用方式。
WebService详细解析(axis,xfire,cxf,授权认证加密解密) 很详细,有很多例子,学习必备。
java语言实现使用spring+mybatis+oracle访问数据库,使用cxf发布webservice,并使用axis调用webservice。项目使用maven管理jar包。
个人经验总结性文档,都是成功的经验,绝对超值
手头上做的java web的项目需要调用.net wcf发布的webservice,查资料看到XFire,Axis2,CXF这三种方式,然后仔细进行了一下对比。资料全来源自网络,不保证完全正确。
只要WebService公开了服务接口,远程客户端就可以调用服务。WebService 是基于Http协议的组件服务,WebService是分散式应用程序的发展趋势。 WebService更多是一种标准,而不是一种具体的技术。不同的平台,不同的语言...
WebService是一种规范,旨在通过网络远程调用其他项目的接口,CXF是WebService的一种纯JAVA的实现,如果你的项目使用多种语言开发,请使用axis2.
cxf集成Spring发布发布webservice及axis远程调用webservic程序,提供自己封装的工具类。文件为整个工程目录可以直接运行
对方的webservice服务端使用axis1.4开发,参数有String[]类型,试了cxf、xfire等都无法生成客户端,只能使用axis4. 解压后lib包已经全了。修改xx.bat里webservice地址一项,执行xx.bat生成客户端文件。 生成之后,...
WebService是一种标准,旨在远程调用其他项目的接口,cxf是webService的纯java实现,如果你的项目是用多种语言开发的,请使用axis2
PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的WebService客户端的SDK有...