如何提取错误代码"来自JNDI NamingException的数字?

时间:2014-04-28 15:52:16

标签: java exception ldap jndi apacheds

我有一些代理LDAP消息的代码。 该代码通过使用JNDI调用LDAP服务器来实现ApacheDS的处理程序。 当从LDAP服务器返回错误时,JNDI将其报告为javax.naming.NamingException(或子类),如:

  AuthenticationException: [LDAP: error code 49 - Invalid Credentials]

另一方面,我们需要使用错误代码枚举通过ApacheDS接收器向客户端返回答案:

  ResultCodeEnum resultCodeEnum = ResultCodeEnum.getResultCode(errorCode);
  ldapResult.setResultCode(resultCodeEnum);

如何提取"错误代码"来自JNDI javax.naming.NamingException的数字? (当然,我总是可以解析NamingException.explanation中的错误代码,如果在解释中找到了一个数字,但我正在寻找一个库解决方案)

1 个答案:

答案 0 :(得分:1)

您需要使用e.getMessage()从异常中获取异常消息,这将为您提供异常字符串AuthenticationException: [LDAP: error code 49 - Invalid Credentials]

try {
      // you stuff here .....
} catch (NamingException e) {
  int errCode= getErrorCode(e.getMessage());
}

使用Java regex从异常字符串中获取/提取错误代码

 private int getErrorCode(final String exceptionMsg)
    {
        String pattern="-?\\d+";
        Pattern p=Pattern.compile(pattern);
        Matcher  m=p.matcher(exceptionMsg);
        if (m.find()) {
            return Integer.valueOf(m.group(0));
        }
        return -1;
    }