由于某种原因(暂不清楚)导致在如下代码:
@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
请登录后查看评论内容