免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5000 | 回复: 0
打印 上一主题 下一主题

简单CXF方式的webService客户端调用范例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-24 13:49 |只看该作者 |倒序浏览
本帖最后由 willyomg 于 2011-02-24 13:50 编辑

转自rwg109

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



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

2:
  1. package con.transnal.ucenter.client;

  2. import java.lang.reflect.Proxy;
  3. import java.util.HashMap;
  4. import java.util.Map;

  5. //import net.sxinfo.ucenter.services.UCenterService;
  6. //此处就为你发布的 webService的 源代码,此处我把它打成 jar 包了.
  7. //一般在开发中,你可以建一个webService Clietn 来引用 webService的wsdl

  8. import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
  9. import org.apache.cxf.configuration.jsse.TLSClientParameters;
  10. import org.apache.cxf.endpoint.Client;
  11. import org.apache.cxf.frontend.ClientProxy;
  12. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
  13. import org.apache.cxf.transport.http.HTTPConduit;
  14. import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
  15. import org.apache.ws.security.WSConstants;
  16. import org.apache.ws.security.handler.WSHandlerConstants;
  17. import org.junit.Test;

  18. /**
  19. * 客户端程序
  20. *
  21. * @author RenWeigang
  22. */
  23. public class UCenterServiceClientTest {

  24.         @Test
  25.         public void testCreateUser() throws Exception {
  26.                 UCenterService ucenterService = getUCenterService();
  27.                 String result = ucenterService.createUser("renweigang", "123456789",  "123456@test.com");
  28.                 System.out.println(result);
  29.         }
  30.        
  31.         private UCenterService getUCenterService() {
  32.                 return getNotSSLUCenterService();
  33.         }
  34.        
  35.         private UCenterService getNotSSLUCenterService()
  36.         {
  37.                 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
  38.                 factory.setServiceClass(UCenterService.class);
  39. //此处的地址为对方发布的 webService的地址。
  40.                 factory.setAddress("http://uc.cun365.com/ucenter/ucenter/services/UCenterService");
  41.                 System.setProperty("org.apache.cxf.bus.factory", "org.apache.cxf.bus.CXFBusFactory");
  42.                 UCenterService ucenterService = (UCenterService) factory.create();
  43.                 ClientProxy proxy = (ClientProxy) Proxy.getInvocationHandler(ucenterService);
  44.                 Client client = proxy.getClient();
  45.                 // ③添加流模型和DOM模型转换的Handler
  46.        
  47.                 //client.getOutInterceptors().add(new SAAJOutInterceptor());
  48.                
  49.                 Map<String,Object> properties = new HashMap<String,Object>();
  50.                 // ④-1动作
  51.                 properties.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP);
  52.                 // PW_TEXT 明文 ,PW_DIGEST 摘要
  53.                 // PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对<wsse:Password>元素进行加密,PasswordText依然可以使用
  54.        
  55.                 properties.put(WSHandlerConstants.USER, "services-test");// ④-3指定用户
  56.                 properties.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
  57.                 properties.put(WSHandlerConstants.PW_CALLBACK_CLASS, UtPasswordHandler.class.getName());
  58.                 WSS4JOutInterceptor wss4j = new WSS4JOutInterceptor(properties);
  59.                 client.getOutInterceptors().add(wss4j);
  60.                
  61.                
  62.                 return ucenterService;
  63.         }
  64. }
复制代码
  1. &nbsp;<PRE class=java name="code">package net.sxinfo.ucenter.client;

  2. import java.util.HashMap;
  3. import java.util.Map;

  4. import javax.security.auth.callback.Callback;
  5. import javax.security.auth.callback.CallbackHandler;

  6. import org.apache.ws.security.WSPasswordCallback;

  7. public class UtPasswordHandler implements CallbackHandler {
  8.         // ①客户端用户模拟数据库

  9.         private static final Map<String,String> pwMockDB = new HashMap<String,String>();

  10.               //一般真正开发中,对方的webService指定用户,此处的 services-//test 为用户名,test 为密码。
  11.         static{
  12.         pwMockDB.put("services-test", "test");
  13.         }
  14.        
  15.         public void handle(Callback[] callbacks) {

  16.         WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];

  17.         String id = callback.getIdentifer();
  18.         // ②获取用户对应的密码
  19.         callback.setPassword(pwMockDB.get(id));

  20.         }
  21. }</PRE>
  22. &nbsp;
复制代码
code.rar (5.5 KB, 下载次数: 66)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP