Solon 关于插件 dami 反射方法参数名称错误

由于某种原因(暂不清楚)导致在如下代码:

@DamiTopic("demo82.event.user")
public interface EventUserNotices {
    void onCreated(long userId, String name);
}

@DamiTopic("demo82.event.user")
public class EventUserNoticesListener { // implements EventUserNotices
    public void onCreated(long userId, String name) {
        System.err.println("1-onCreated: userId=" +userId);
    }
}


@ExtendWith(SolonJUnit5Extension.class)
public class Demo82 {
    @Inject
    EventUserNotices eventUserNotices;

    @Test
    public void main() {
        eventUserNotices.onCreated(82, "noear");
    }
}

解码过程中将 userId、name 识别成 arg0、arg1的问题,增加 -parameters 也无效,于是重写了一下 Coder 的方法,将map方式更改为list方式,只要参数顺序一致就没问题,代码如下:

@Component
public class XtCoder implements Coder {
    /**
     * 编码
     *
     * @param method 方法
     * @param args   参数
     * @return 负载内容
     */
    @Override
    public Object encode(Method method, Object[] args) {
        List<Object> list = new ArrayList<>();
        //构建内容
        if (method.getParameterCount() > 0) {
            Parameter[] parameters = method.getParameters();
            for (int i = 0, len = method.getParameterCount(); i < len; i++) {
                list.add(args[i]);
            }
        }
        return list;
    }

    /**
     * 解码
     *
     * @param method  方法
     * @param payload 负载
     * @return 方法参数
     */
    @Override
    public Object[] decode(Method method, Payload payload) {
        List<Object> list = (List<Object>) payload.getContent();

        //构建执行参数(可以与发送者的参数,略有不同)
        Object[] args = new Object[method.getParameterCount()];
        Parameter[] parameters = method.getParameters();

        for (int i = 0, len = method.getParameterCount(); i < len; i++) {
            Parameter p1 = parameters[i];
            if (Payload.class.isAssignableFrom(p1.getType())) {
                args[i] = payload;
            } else {
                args[i] = list.get(i);
            }
        }

        return args;
    }
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容