简单CXF方式的webService客户端调用范例 cxf客户端动态调用

简单CXF方式的webService客户端调用范例

文章分类:Java编程

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

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

2:

Java代码

packagecon.transnal.ucenter.client;

importjava.lang.reflect.Proxy;

importjava.util.HashMap;

importjava.util.Map;

//importnet.sxinfo.ucenter.services.UCenterService;

//此处就为你发布的webService的源代码,此处我把它打成jar包了.

//一般在开发中,你可以建一个webServiceClietn来引用webService的wsdl

importorg.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;

importorg.apache.cxf.configuration.jsse.TLSClientParameters;

importorg.apache.cxf.endpoint.Client;

importorg.apache.cxf.frontend.ClientProxy;

importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean;

importorg.apache.cxf.transport.http.HTTPConduit;

importorg.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;

importorg.apache.ws.security.WSConstants;

importorg.apache.ws.security.handler.WSHandlerConstants;

importorg.junit.Test;

/**

*客户端程序

*

*@authorRenWeigang

*/

publicclassUCenterServiceClientTest{

@Test

publicvoidtestCreateUser()throwsException{

UCenterServiceucenterService=getUCenterService();

Stringresult=ucenterService.createUser("renweigang","123456789","123456@test.com");

System.out.println(result);

}

privateUCenterServicegetUCenterService(){

returngetNotSSLUCenterService();

}

简单CXF方式的webService客户端调用范例 cxf客户端动态调用
privateUCenterServicegetNotSSLUCenterService()

{

JaxWsProxyFactoryBeanfactory=newJaxWsProxyFactoryBean();

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");

UCenterServiceucenterService=(UCenterService)factory.create();

ClientProxyproxy=(ClientProxy)Proxy.getInvocationHandler(ucenterService);

Clientclient=proxy.getClient();

//③添加流模型和DOM模型转换的Handler

//client.getOutInterceptors().add(newSAAJOutInterceptor());

Map<String,Object>properties=newHashMap<String,Object>();

//④-1动作

properties.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN+""+WSHandlerConstants.TIMESTAMP);

//PW_TEXT明文,PW_DIGEST摘要

//PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对<wsse:Password>元素进行加密,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());

WSS4JOutInterceptorwss4j=newWSS4JOutInterceptor(properties);

client.getOutInterceptors().add(wss4j);

returnucenterService;

}

}

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<String,Object> properties = new HashMap<String,Object>();// ④-1动作properties.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP);// PW_TEXT 明文 ,PW_DIGEST 摘要// PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对<wsse:Password>元素进行加密,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代码

<PREclass=javaname="code">packagenet.sxinfo.ucenter.client;

importjava.util.HashMap;

importjava.util.Map;

importjavax.security.auth.callback.Callback;

importjavax.security.auth.callback.CallbackHandler;

importorg.apache.ws.security.WSPasswordCallback;

publicclassUtPasswordHandlerimplementsCallbackHandler{

//①客户端用户模拟数据库

privatestaticfinalMap<String,String>pwMockDB=newHashMap<String,String>();

//一般真正开发中,对方的webService指定用户,此处的services-//test为用户名,test为密码。

static{

pwMockDB.put("services-test","test");

}

publicvoidhandle(Callback[]callbacks){

WSPasswordCallbackcallback=(WSPasswordCallback)callbacks[0];

Stringid=callback.getIdentifer();

//②获取用户对应的密码

callback.setPassword(pwMockDB.get(id));

}

}</PRE>

Java代码

packagenet.sxinfo.ucenter.client; importjava.util.HashMap; importjava.util.Map; importjavax.security.auth.callback.Callback; importjavax.security.auth.callback.CallbackHandler; importorg.apache.ws.security.WSPasswordCallback; publicclassUtPasswordHandlerimplementsCallbackHandler{ //①客户端用户模拟数据库 privatestaticfinalMap<String,String>pwMockDB=newHashMap<String,String>(); //一般真正开发中,对方的webService指定用户,此处的services-//test为用户名,test为密码。 static{ pwMockDB.put("services-test","test"); } publicvoidhandle(Callback[]callbacks){ WSPasswordCallbackcallback=(WSPasswordCallback)callbacks[0]; Stringid=callback.getIdentifer(); //②获取用户对应的密码 callback.setPassword(pwMockDB.get(id)); } }

package net.sxinfo.ucenter.client;import java.util.HashMap;import java.util.Map;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import org.apache.ws.security.WSPasswordCallback;public class UtPasswordHandler implements CallbackHandler {// ①客户端用户模拟数据库private static final Map<String,String> pwMockDB = new HashMap<String,String>();//一般真正开发中,对方的webService指定用户,此处的 services-//test 为用户名,test 为密码。static{pwMockDB.put("services-test", "test");}public void handle(Callback[] callbacks) {WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];String id = callback.getIdentifer();// ②获取用户对应的密码callback.setPassword(pwMockDB.get(id));}}

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/99290.html

更多阅读

Windows XP 中的 SOAP 客户端概述 soap 客户端代码

  show toc欢迎来到 MSDN > Windows 开发Windows XP 中的 SOAP 客户端概述发布日期: 7/12/2004 | 更新日期: 7/12/2004Roger WolterMicrosoft Corporation摘要:本文包含了使用 Microsoft Windows XP Professional 中随附的 SOAP 客户

升级MACOSX自带的SVN客户端 linux svn客户端升级

系统版本: MAC OS X 10.8.4出现问题:Xcode以及Mac系统自带的SVN版本基本都是1.6,由于日常开发中使用的SVN版本都是1.7以上的,因此需要升级svn版本。【说明:使用1.6版本的SVN客户端checkout的代码,使用1.7版本的客户端的时候,可能会出一些

巴菲特最推荐的10本书之9:施韦德的《客户的游艇在哪里》

巴菲特如此推荐:“这本书是有史以来最诙谐有趣的一本投资书籍,用轻松愉悦的方式传递给读者很多非常重要的投资智识&#65377;”JasonZweig的评价是:“施韦德的《客户的游艇在哪里》这本书,是我所读过的几百本金融书籍中,唯一能够同时激怒你

动态链接库两种调用方式的比较转 java调用动态链接库

一、动态链接库的概念动态链接库(Dynamic LinkL--ibrary,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件(exe)非常类

锐捷客户端4.10下载支持windows7 锐捷客户端支持win10

windows7系统下,之前一直使用的是锐捷3.73客户端,但是万恶的8021x.exe进程在开启内存整理的情况下,整整会吃掉30%+的cpu、50M+的内存。卸载原来的锐捷3.73,锐捷4.1装上后,登录前设置dhcp认证后获取。登录后情况大大改观,如今cpu和内存占

声明:《简单CXF方式的webService客户端调用范例 cxf客户端动态调用》为网友唯羙之後分享!如侵犯到您的合法权益请联系我们删除