【问题标题】:java.lang.NoSuchMethodError in netty-socketio servernetty-socketio 服务器中的 java.lang.NoSuchMethodError
【发布时间】:2016-12-18 10:08:18
【问题描述】:

我正在尝试启动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

【问题讨论】:

    标签: java sockets socket.io


    【解决方案1】:

    您的项目中显然存在jackson-databind 的版本冲突,确实com.corundumstudio.socketio.protocol.JacksonJsonSupport 类依赖于自2.2 版本以来添加的方法SimpleModule#setSerializerModifier(BeanSerializerModifier mod),因此找不到此方法,它表示您的类路径中的jackson-databind 版本早于2.2,因此无法找到该方法。

    检查您在类路径中拥有的所有 jar,并确保您只有一个版本的 jackson-databind 对应于 netty-socketio 预期的版本。例如假设您使用netty-socketio 的版本1.7.12,则jackson-databind 的预期版本是2.7.4,如您所见here

    【讨论】:

    • 谢谢,这正是问题所在。
    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多