2014-10-31 5 views
1

@ServerEndpointDecodersEncoders을 만듭니다. 내가 서버인수 유형 불일치 @onmessage

나는 이리저리 굴리는 달라질 수 있지만, 문제를 찾을 수 없습니다에 session.sendObject(message)를 사용하여 객체를 보낸다 때 java.lang.IllegalArgumentException: argument type mismatch :

서버

나에게 오류가 발생합니다. 이 내 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이라고 말합니다.

무엇이 문제입니까?

답변

0

마침내 내 문제를 발견했습니다.

MessageTextDecode 클래스의 willDecode 기능은 false을 반환이고 serverEndpointargument type mismatch 말을이었다.

문자열에 문제가없는 경우 함수는 true을 반환해야합니다.

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