从WSO2 Sequence调用自定义类时出现ClassNotFoundException错误求助
自定义WSO2中介类找不到的问题排查
错误信息
Error loading class : com.test.mediator.ChangeValue - Class not found java.lang.ClassNotFoundException: com.test.mediator.ChangeValue cannot be found by synapse-core_2.1.7.wso2v182
序列调用配置
<class name="com.test.mediator.ChangeValue"/> <log level="custom"> <property name="After CLASS" value="in Seq"/> <property expression="$ctx:NameN" name="NameClass"/> </log>
自定义类代码
package com.test.mediator; import org.apache.synapse.MessageContext; import org.apache.synapse.mediators.AbstractMediator; public class ChangeValue extends AbstractMediator { public boolean mediate(MessageContext context) { changeVal(context); return true; } public void changeVal(MessageContext context) { String Namem = (String) context.getProperty("NAMEE"); String Namen = "Ali"; context.setProperty("NameN", Namen); } }
错误原因及解决步骤
核心原因
出现ClassNotFoundException是因为WSO2的类加载器无法定位到自定义类,问题集中在类的打包规范和部署位置上。
解决步骤
- 规范打包类文件:将自定义类打包成JAR文件,确保JAR内部包含完整的包结构(即
com/test/mediator/ChangeValue.class路径准确),不能遗漏包层级。 - 部署到对应目录:
- 若要让所有租户都能使用该类,将JAR放到
<WSO2安装目录>/repository/components/lib,之后重启WSO2服务器。 - 若仅给特定租户使用,可将JAR放到
<WSO2安装目录>/repository/deployment/server/dropins,或通过WSO2 Carbon控制台的部署功能上传。
- 若要让所有租户都能使用该类,将JAR放到
- 校验类名匹配度:确认序列配置中
class标签的name属性值和类的全限定名完全一致(Java大小写敏感,需严格匹配),你的配置和代码这部分匹配,但仍要检查JAR内的class文件路径是否正确。 - 控制依赖范围:你的类依赖
synapse-core的AbstractMediator,该依赖WSO2本身已内置,打包时不要将synapse-core的JAR打入自定义JAR(用Maven的话,将该依赖设为providedscope),避免类加载冲突。
内容的提问来源于stack exchange,提问作者Wajih Haider
相关产品推荐
相关产品推荐

