cxf 实名认证---全国公民身份信息系统

本文介绍了一种实名认证功能的实现方法,通过调用公安部门提供的WebService接口完成身份验证。文中详细记录了客户端代码生成的过程,包括使用JDK自带工具、Eclipse插件及Apache CXF的不同方式,并提供了一段具体的XFire调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近做了一个实名认证功能,需要调用公安部门接口进行认证,用到webService。期间查阅了很多资料。小结如下。

1、ws 客户端代码生成:

        客户端代码是根据所给的url?wsdl文件生成的、该文件通过网络url或者本地都可以。生成方式有很多种、现稍做总结:

        (1) 使用 jdk 自带的 wsimport 生成 : 将dos窗口切换至src目录下执行命令   wsimport -keep 文件地址(本地/url)。jdk1.6 及以上。

        (2)eclipse web Service Client 工具。 new 一个 web Service Client  需要填入 wsdl 文件地址和代码生成地址(src下面)

    (3)使用 apache-cxf-3.2.1 (其他版本没试过): 下载安装 apache-cxf-3.2.1(http://cxf.apache.or/download.html)。配置环境变量 :在环境变量中配置CXF_HOME , 在PATH 中加入 %CXF_HOME%\bin。

以下内容为转载:

wsdl2java -p com -d src -all  wsdl
-p  指定其wsdl的命名空间,也就是要生成代码的包名
-d  指定要产生代码所在目录
-client 生成客户端测试web service的代码
-server 生成服务器启动web  service的代码
-impl 生成web service的实现代码
-ant  生成build.xml文件
-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.

实例1.:wsdl2java -p com -client -d d:/src  http://10.10.106.111:8090/webservice_cxf_spring/services/UserService?wsdl
实例2.:wsdl2java -p com -all  -d E:\jiekou  E:\jiekou\NciicServices.wsdl
生成java代码后可以直接复制到客户端中再客户端中使用

2 、测试代码如下:

package com.client;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;
import org.codehaus.xfire.transport.http.EasySSLProtocolSocketFactory;
import org.codehaus.xfire.util.dom.DOMOutHandler;

import com.NciicServicesPortType;

public class NciicClient {

    public static final String SERVICE_URL = "https://ws.nciic.org.cn/nciic_ws/services/";

    public NciicClient() {

    }

    /**
     * XFire调用方法
     *
     * @param serviceName
     * @param condition
     * @return
     * @throws MalformedURLException
     */
    public String executeClient(String serviceName, String condition, String iNlicense) throws MalformedURLException {

        ProtocolSocketFactory easy = new EasySSLProtocolSocketFactory();
        Protocol protocol = new Protocol("https", easy, 443);
        Protocol.registerProtocol("https", protocol);
        Service serviceModel = new ObjectServiceFactory().create(NciicServicesPortType.class, "NciicServices", null,
                null);
        NciicServicesPortType service = (NciicServicesPortType) new XFireProxyFactory().create(serviceModel,
                SERVICE_URL + serviceName);
        Client client = ((XFireProxy) Proxy.getInvocationHandler(service)).getClient();
        client.addOutHandler(new DOMOutHandler());

        // 压缩传输
        client.setProperty(CommonsHttpMessageSender.GZIP_ENABLED, Boolean.TRUE);
        // 忽略超时
        client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "1");
        client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");

        BufferedReader in;

        // 调用核查方法
        String result = service.nciicCheck(iNlicense, condition);
        System.out.println("结果:" + result);
        return result;
    }

    public static String fileRead() throws Exception {

        File file = new File("授权文件地址");
        FileReader reader = new FileReader(file);
        BufferedReader bReader = new BufferedReader(reader);
        StringBuilder sb = new StringBuilder();
        String s = "";
        while ((s = bReader.readLine()) != null) {
            sb.append(s + "\n");
        }
        bReader.close();
        String str = sb.toString();
        return str;
    }

    public static void main(String[] args) throws MalformedURLException {

        try {

            String license = fileRead();

            String con = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
                    + "<ROWS><INFO><SBM>$$SBM$$</SBM></INFO><ROW><GMSFHM> 公民身份号码\n"
                    + "</GMSFHM><XM> 姓名</XM></ROW><ROW FSD=\" $$FSD$$ \" YWLX=\" $$YWLX$$  \" >\n"
                    + "<GMSFHM>$$idno$$</GMSFHM><XM>$$username$$</XM></ROW></ROWS>";

            con = con.replace("$$idno$$", "******").replace("$$username$$", "******");
            new NciicClient().executeClient("NciicServices", con, license);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

注意:相关jar包本站可以下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值