繁体   English   中英

netty-socketio服务器中的java.lang.NoSuchMethodError

[英]java.lang.NoSuchMethodError in netty-socketio server

我正在尝试启动netty-socketio服务器,但无法跟踪此异常的起源。 我在stacktrace处标记了它可能会导致答案的位置,因此,如果有人可以对此提供解释,将不胜感激。

public class SocketIoServer {
    private Configuration cnf = new Configuration();
    private SocketIOServer server;

    public SocketIoServer() {

        Configuration config = new Configuration();
        config.setHostname("localhost");
        config.setPort(8081);

        server = new SocketIOServer(config);
        server.start();
    }
}

当我初始化套接字时,将引发异常。 这是上下文:

Exception in thread "main" java.lang.IllegalArgumentException: 

java.lang.reflect.InvocationTargetException
    at com.corundumstudio.socketio.Configuration.<init>(Configuration.java:112)
    at com.corundumstudio.socketio.SocketIOServer.<init>(SocketIOServer.java:66)
    at SocketIoServer.<init>(SocketIoServer.java:17)
    at Server.main(Server.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.corundumstudio.socketio.Configuration.<init>(Configuration.java:109)
    ... 8 more

特别是这条线

Caused by: java.lang.NoSuchMethodError: 
com.fasterxml.jackson.databind.module.SimpleModule.setSerializerModifier(Lcom/fasterxml/jackson/databind/ser/BeanSerializerModifier;)Lcom/fasterxml/jackson/databind/module/SimpleModule;
    at com.corundumstudio.socketio.protocol.JacksonJsonSupport.init(JacksonJsonSupport.java:316)
    at com.corundumstudio.socketio.protocol.JacksonJsonSupport.<init>(JacksonJsonSupport.java:311)
    at com.corundumstudio.socketio.protocol.JacksonJsonSupport.<init>(JacksonJsonSupport.java:304)
    ... 13 more

您的项目中显然存在jackson-databind版本的冲突,实际上com.corundumstudio.socketio.protocol.JacksonJsonSupport类依赖于方法SimpleModule#setSerializerModifier(BeanSerializerModifier mod) ,因为该方法自2.2版本以来已添加找到此方法,这意味着您在类路径中拥有的jackson-databind版本早于2.2 ,因此找不到该方法。

检查类路径中所有的jar,并确保只有对应于netty-socketio期望的版本的jackson-databind版本。 例如,假设您使用netty-socketio 1.7.12版本,则jackson-databind的预期版本为2.7.4 ,如此处所示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM