WSO2 Identity Server 5.10中NumberParseException类找不到问题求助
错误原因
你遇到的java.lang.NoClassDefFoundError和java.lang.ClassNotFoundException,本质是短信认证器的OSGI bundle(org.wso2.carbon.extension.identity.authenticator.smsotp.connector_3.0.4)无法在WSO2的OSGI容器中找到com.google.i18n.phonenumbers相关类,因为依赖的库没有被容器正确识别或部署。
解决步骤
确保依赖包符合OSGI规范
选择带OSGI元数据的libphonenumber版本(可从Maven仓库获取,比如com.googlecode.libphonenumber:libphonenumber:8.12.53),普通JAR可能缺少OSGI所需的MANIFEST信息,导致容器无法识别。部署依赖包到正确目录
将下载好的libphonenumberJAR包放到<IS安装目录>/repository/components/lib下,该目录下的JAR会被作为系统级依赖加载,所有OSGI bundle都能访问。
若需更规范的OSGI部署,可使用bnd工具将JAR转换为OSGI bundle后,放到<IS安装目录>/repository/components/dropins目录。更新短信认证器bundle的依赖声明
如果你自行修改了短信认证器代码,需在bundle的MANIFEST.MF中添加导入声明:Import-Package: com.google.i18n.phonenumbers;version="[你使用的版本号,)"确保版本号与部署的JAR版本一致。
重启WSO2 Identity Server
完成上述操作后,重启IS服务,让OSGI容器加载新的依赖。
内容的提问来源于stack exchange,提问作者Sujith Fredrick

