我有一些代理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中的错误代码,如果在解释中找到了一个数字,但我正在寻找一个库解决方案)
答案 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;
}