0

テンプレートを比較する Web サービス メソッドがありますが、try catch ブロックにある if else ステートメントのコードを実行せず、代わりに「エラー」という最後の return ステートメントを返します。何が間違っているのですか?「指が確認されました」または「指が確認されませんでした」を返すはずでした。

  @WebMethod(operationName = "verify")
public String verify(@WebParam(name = "name") String name, @WebParam(name = "ftset") String ftset) {
    Connection con = null;
    String dbTemplate = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/biodb", "root", "1234");
        PreparedStatement st;
        st = con.prepareStatement("select template from info where name = ? ");
        st.setString(1, name);

        ResultSet result = st.executeQuery();

        if (result.next()) { //.next() returns true if there is a next row returned by the query.

            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);
    DPFPFeatureSet features = null;
    features.deserialize(fsArray);

    DPFPVerification matcher = DPFPGlobal.getVerificationFactory().createVerification();
    DPFPVerificationResult fresult = matcher.verify(features, template);

    if (fresult.isVerified()) {

        return "The fingerprint was VERIFIED.";

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

    }

        }
    } catch (Exception e) {
        System.out.println(e.getMessage());

    } finally {
        if (con != null) {
            try {
                con.close();

            } catch (SQLException e) {
            }
        }
    }

      return "error";
}
4

1 に答える 1

0

何が間違っているのか分かりますか?

さて、あなたが説明した振る舞いは、これが原因で例外がスローされた場合に何が起こるかです:

catch (Exception e) {
    System.out.println(e.getMessage());
} 

何かがうまくいかない場合、あなたは何かを書きSystem.out(おそらくあなたは見ていません、さもなければあなたは何が起こっているのか見ていたでしょう)そして「エラー」を返すことによって続けます。

まず、特定の例外をキャッチすることをお勧めします。そして、診断でより明確になるように、例外のログ記録方法を変更します。

さらにresult.next()、を返すと、この動作が発生しますfalse。一貫したインデントがないため、これは投稿したコードからは明らかではありません。インデントを確実に修正する必要があります-読みやすさは絶対に重要です。

result.next()次に、が返された場合に何をしたいのかを考えますfalse。それはエラーですか?実際には、「検証されていない」ケースを返す必要がありますか?

于 2012-11-08T11:58:36.457 に答える