简单CXF方式的webService客户端调用范例(转载)

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

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

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的wsdl

import 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 {

@Test
public 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;
}
}


 <pre name="code" class="java">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));

}
}</pre>
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值