博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
360doc-----简单CXF方式的webService客户端调用范例
阅读量:2352 次
发布时间:2019-05-10

本文共 5815 字,大约阅读时间需要 19 分钟。

apache CXF官方网站:

http://cxf.apache.org/docs/ws-security.html

文章来源:http://www.360doc.com/content/10/1116/17/2703996_69884102.shtml

一般webServices发布后需要测试一下,是否可行通,在此我把自己所测试的 调用 webService 的简单范例贴出来供新手参考。如有不足,请多指教。

 

1:需要借助的包: wss4j-1.5.4.jar    cxf-bundle-2.1.3.jar

2:Java代码 :

  1. package con.transnal.ucenter.client;   
  2.   
  3. import java.lang.reflect.Proxy;   
  4. import java.util.HashMap;   
  5. import java.util.Map;   
  6.   
  7. //import net.sxinfo.ucenter.services.UCenterService;   
  8. //此处就为你发布的 webService的 源代码,此处我把它打成 jar 包了.   
  9. //一般在开发中,你可以建一个webService Clietn 来引用 webService的wsdl   
  10.   
  11. import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;   
  12. import org.apache.cxf.configuration.jsse.TLSClientParameters;   
  13. import org.apache.cxf.endpoint.Client;   
  14. import org.apache.cxf.frontend.ClientProxy;   
  15. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;   
  16. import org.apache.cxf.transport.http.HTTPConduit;   
  17. import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;   
  18. import org.apache.ws.security.WSConstants;   
  19. import org.apache.ws.security.handler.WSHandlerConstants;   
  20. import org.junit.Test;   
  21.   
  22. /**  
  23.  * 客户端程序  
  24.  *   
  25.  * @author RenWeigang  
  26.  */  
  27. public class UCenterServiceClientTest {   
  28.   
  29.     @Test  
  30.     public void testCreateUser() throws Exception {   
  31.         UCenterService ucenterService = getUCenterService();   
  32.         String result = ucenterService.createUser("renweigang""123456789",  "123456@test.com");   
  33.         System.out.println(result);   
  34.     }   
  35.        
  36.     private UCenterService getUCenterService() {   
  37.         return getNotSSLUCenterService();   
  38.     }   
  39.        
  40.     private UCenterService getNotSSLUCenterService()   
  41.     {   
  42.         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();   
  43.         factory.setServiceClass(UCenterService.class);   
  44. //此处的地址为对方发布的 webService的地址。   
  45.         factory.setAddress("http://uc.cun365.com/ucenter/ucenter/services/UCenterService");   
  46.         System.setProperty("org.apache.cxf.bus.factory""org.apache.cxf.bus.CXFBusFactory");   
  47.         UCenterService ucenterService = (UCenterService) factory.create();   
  48.         ClientProxy proxy = (ClientProxy) Proxy.getInvocationHandler(ucenterService);   
  49.         Client client = proxy.getClient();   
  50.         // ③添加流模型和DOM模型转换的Handler   
  51.        
  52.         //client.getOutInterceptors().add(new SAAJOutInterceptor());   
  53.            
  54.         Map<String,Object> properties = new HashMap<String,Object>();   
  55.         // ④-1动作   
  56.         properties.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP);   
  57.         // PW_TEXT 明文 ,PW_DIGEST 摘要   
  58.         // PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对<wsse:Password>元素进行加密,PasswordText依然可以使用   
  59.        
  60.         properties.put(WSHandlerConstants.USER, "services-test");// ④-3指定用户   
  61.         properties.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);   
  62.         properties.put(WSHandlerConstants.PW_CALLBACK_CLASS, UtPasswordHandler.class.getName());   
  63.         WSS4JOutInterceptor wss4j = new WSS4JOutInterceptor(properties);   
  64.         client.getOutInterceptors().add(wss4j);   
  65.            
  66.            
  67.         return ucenterService;   
  68.     }   
  69. }  
package con.transnal.ucenter.client;import java.lang.reflect.Proxy;import java.util.HashMap;import java.util.Map;//import net.sxinfo.ucenter.services.UCenterService;//此处就为你发布的 webService的 源代码,此处我把它打成 jar 包了.//一般在开发中,你可以建一个webService Clietn 来引用 webService的wsdlimport org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;import org.apache.cxf.configuration.jsse.TLSClientParameters;import org.apache.cxf.endpoint.Client;import org.apache.cxf.frontend.ClientProxy;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.apache.cxf.transport.http.HTTPConduit;import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;import org.apache.ws.security.WSConstants;import org.apache.ws.security.handler.WSHandlerConstants;import org.junit.Test;/*** 客户端程序** @author RenWeigang*/public class UCenterServiceClientTest {@Testpublic void testCreateUser() throws Exception {UCenterService ucenterService = getUCenterService();String result = ucenterService.createUser("renweigang", "123456789",  "123456@test.com");System.out.println(result);}private UCenterService getUCenterService() {return getNotSSLUCenterService();}private UCenterService getNotSSLUCenterService(){JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();factory.setServiceClass(UCenterService.class);//此处的地址为对方发布的 webService的地址。factory.setAddress("http://uc.cun365.com/ucenter/ucenter/services/UCenterService");System.setProperty("org.apache.cxf.bus.factory", "org.apache.cxf.bus.CXFBusFactory");UCenterService ucenterService = (UCenterService) factory.create();ClientProxy proxy = (ClientProxy) Proxy.getInvocationHandler(ucenterService);Client client = proxy.getClient();// ③添加流模型和DOM模型转换的Handler//client.getOutInterceptors().add(new SAAJOutInterceptor());Map
properties = new HashMap
();// ④-1动作properties.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP);// PW_TEXT 明文 ,PW_DIGEST 摘要// PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对
元素进行加密,PasswordText依然可以使用properties.put(WSHandlerConstants.USER, "services-test");// ④-3指定用户properties.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);properties.put(WSHandlerConstants.PW_CALLBACK_CLASS, UtPasswordHandler.class.getName());WSS4JOutInterceptor wss4j = new WSS4JOutInterceptor(properties);client.getOutInterceptors().add(wss4j);return ucenterService;}}
Java代码 :
  1.  <PRE class=java name="code">package net.sxinfo.ucenter.client;   
  2.   
  3. import java.util.HashMap;   
  4. import java.util.Map;   
  5.   
  6. import javax.security.auth.callback.Callback;   
  7. import javax.security.auth.callback.CallbackHandler;   
  8.   
  9. import org.apache.ws.security.WSPasswordCallback;   
  10.   
  11. public class UtPasswordHandler implements CallbackHandler {   
  12.     // ①客户端用户模拟数据库   
  13.   
  14.     private static final Map<String,String> pwMockDB = new HashMap<String,String>();   
  15.   
  16.               //一般真正开发中,对方的webService指定用户,此处的 services-//test 为用户名,test 为密码。   
  17.     static{   
  18.     pwMockDB.put("services-test""test");   
  19.     }   
  20.        
  21.     public void handle(Callback[] callbacks) {   
  22.   
  23.     WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];   
  24.   
  25.     String id = callback.getIdentifer();   
  26.     // ②获取用户对应的密码   
  27.     callback.setPassword(pwMockDB.get(id));   
  28.   
  29.     }   
  30. }</PRE>   

转载地址:http://iigvb.baihongyu.com/

你可能感兴趣的文章
Docker
查看>>
代码优化建议,44条代码优化细节
查看>>
快速排序(图解分析+代码调优)
查看>>
Java基础面试总结
查看>>
HashMap遍历几种方式比较(传统的Map迭代方式对比JDK8的迭代方式)
查看>>
Java面试& HashMap实现原理分析
查看>>
PS修改动图字幕
查看>>
八大基础排序总结
查看>>
Linux下安装使用FastDFS
查看>>
后台管理系统之品牌管理
查看>>
后台管理系统之商品规格管理
查看>>
后台管理系统之商品管理
查看>>
商品详情及Thymeleaf静态化
查看>>
如何安装最纯净的Windows系统,玩转重装操作系统
查看>>
RabbitMQ安装使用及数据同步
查看>>
用户中心
查看>>
授权中心
查看>>
乐优商城—购物车
查看>>
乐优商城—订单微服务
查看>>
《剑指offer》思路与实现总结--Java
查看>>