1

@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);
}

オブジェクトをサーバーに送信しようとしているときに問題が発生し、サーバーはjava.lang.IllegalArgumentException: argument type mismatch.

問題は何ですか?

4

1 に答える 1

0

私はついに自分の問題を見つけました。

クラスのwillDecode関数MessageTextDecodeは returnfalseで、serverEndpointsayargument type mismatchでした。

true文字列に問題がない場合、関数は返されます。

public boolean willDecode(String arg0) 
{
    return true;  // in previous my code this returned false 
}
于 2014-10-31T06:51:11.780 に答える