CXF调用webservice 客户端 带soap header认证

今天调用webservice接口需要用户密码认证,所以采用CXF框架,调用如下

CXF wsdl2java 生成java代码供客户端使用

首先下载apache-cxf-2.6.2在环境变量中配置CXF_HOME 值为E:\gavin\cxf\apache-cxf-3.0.0,在PATH中加入%CXF_HOME%\bin

在cmd窗口执行 

wsdl2java -encoding utf-8 -d E: http://xxxxxxxxxx/webServices/WebService?wsdl

生成的代码粘贴到项目中

然后使用CXF调用webservice

    public static void main(String[] args) {
        //获取服务接口
        OnlineUserService_Service service_service = new OnlineUserService_Service();
        OnlineUserService onlineUserService = service_service.getOnlineUserServiceImplPort();
        //配置验证信息
        Client client = ClientProxy.getClient(onlineUserService);
        Map<String, Object> outProps = new HashMap<String, Object>();
        outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
        outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
        //用户名
        outProps.put(WSHandlerConstants.USER, "admin");
        outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPwdCallback.class.getName());
        client.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));
        //调用服务
        StringBuilder sb = new StringBuilder();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        sb.append("<userIp>xxxx</userIp>");
        sb.append("</conditions>");
        String s = onlineUserService.queryOnlineUsers(sb.toString());
        System.out.println(s);

    }

public class ClientPwdCallback implements CallbackHandler {

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        //用户名
        String ident = "admin";
        //密码
        String passwd = "password";
        for (int i = 0; i < callbacks.length; i++) {
            WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
            pc.setPassword(passwd);
            pc.setIdentifier(ident);
        }
    }
}


使用jar包



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值