参数类型不匹配@onmessage

时间:2014-10-31 04:14:01

标签: java-ee java-websocket

我创建了@ServerEndpointDecoders以及Encoders

当我使用java.lang.IllegalArgumentException: argument type mismatch向服务器

发送对象时服务器出错:session.sendObject(message)

我改变了护目镜,但找不到问题。 这是我的serverEndpoint

@ServerEndpoint(value="/room" 
        , encoders = MessageEncoder.class
        , decoders = MessageDecoder.class)
public class myServerEndpoint 
{
    @OnMessage
    public void onMessage(Message message, Session session)
    {
       //some code to proccess message
    }
}

这是我的MessageDecoder:

public class MessageDecoder implements Decoder.Text<Message> 
{
     public Message decode(String str) throws DecodeException 
     {
         JsonObject obj = Json
                .createReader(new StringReader(str)).readObject();

         Message msg = new Message();
         msg.setMessage(obj.getString("message"));
         msg.setSender(obj.getString("sender"));
         msg.setReceivedDate((Date) obj.get("receivedDate"));

         return msg;
     }
     //... and other Methods
}

这是我的Message.class

public class Message implements Serializable
{
    private String message;
    private String sender;
    private Date receivedDate;

    public Message() {}
    //setters and getters
}

这是我的客户代码:

public static void main(String[] args) 
{
    WebSocketContainer container = ContainerProvider.getWebSocketContainer();
    Session session = container
            .connectToServer(WSClient.class,
             URI.create("ws://localhost:8080/mySocket/room"));

    Message msg = new Message();
    msg.setMessage("msg");
    msg.setSender("me");
    msg.setReceivedDate(new Date());

    session.getBasicRemote().sendObject(msg);
}

当我尝试将Object发送到服务器并且服务器说java.lang.IllegalArgumentException: argument type mismatch时出现问题。

什么是问题?

1 个答案:

答案 0 :(得分:0)

我终于找到了问题。

willDecode课程中的MessageTextDecode函数返回falseserverEndpoint代表argument type mismatch

如果字符串没有问题,该函数应该返回true

public boolean willDecode(String arg0) 
{
    return true;  // in previous my code this returned false 
}