无法使用DigitalPersona Sdk java版反序列化功能集

时间:2012-11-04 07:57:53

标签: java netbeans comparison fingerprint

我正在尝试创建一个soap webservice方法来匹配使用digitalpersona one touch for windows sdk java edition的指纹。我从客户端的applet捕获功能集,并将其与服务器端的模板进行比较。但我需要对其进行反序列化并再次创建功能集,以便我可以将其与模板进行比较。

我不知道如何重新创建功能集,以便我可以使用它进行验证:

//This is for template retrieval: (no problem here) 

       String dbTemplate = result.getString("template");
            byte[] byteArray = new byte[1];
            byteArray = hexStringToByteArray(dbTemplate);
            DPFPTemplate template = DPFPGlobal.getTemplateFactory().createTemplate();
            template.deserialize(byteArray);



            byte[] fsArray = new byte[1];
            fsArray = hexStringToByteArray(ftSet);

      //the problem is here, I've already converted it back into bytearray[] but i need to deserialize it and create the feature set again.

             featureSet.deserialise(fsArray);
            DPFPFeatureSet features = extractFeatures(sample, DPFPDataPurpose.DATA_PURPOSE_VERIFICATION);

//This is for matching features and template
            DPFPVerification matcher = DPFPGlobal.getVerificationFactory().createVerification();
            DPFPVerificationResult result1 = matcher.verify(features, template);
            if (result1.isVerified()) {

                return "The fingerprint was VERIFIED.";

            } else {
                return "The fingerprint was NOT VERIFIED.";

            }

请帮帮我。

1 个答案:

答案 0 :(得分:0)

这里你能做的最好的事情就是不要将bytearray转换成字符串。如果要将其保存在数据库中,则可以将其自动保存为字节数组(因为blob可以接受bytearray)。

你可以像这样插入(只是一个例子)

PreparedStatement st=con.prepareStatement("INSERT INTO EMPLOYEE(employee_id,template)"+"values(?,?)");
st.setInt(1,23);
st.setBytes(2, enroller.getTemplate().serialize());

Statement st = con.createStatement();
ResultSet rec = st.executeQuery("SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID=3");

然后在访问模板时,反序列化它(只需按照sdk,我认为它是在第37页左右)Onetouch java sdk ====链接

下面将提供一个样本。

while(rec.next()){
    blob = rec.getBlob("template");
    int blobLength = (int)blob.length();  
    blobAsBytes = blob.getBytes(1, blobLength);
}
templater.deserialize(blobAsBytes);         
verificator.setFARRequested(DPFPVerification.MEDIUM_SECURITY_FAR);
DPFPVerificationResult result = verificator.verify(fs, templater);
if (result.isVerified())
    System.out.print("The fingerprint was VERIFIED.");