tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Niki Dokovski <nick...@gmail.com>
Subject Re: Tomcat 8 WebSocket Encoders / Decoders Questions
Date Thu, 17 Oct 2013 19:06:17 GMT
On Thu, Oct 17, 2013 at 12:46 AM, Niki Dokovski <nickytd@gmail.com> wrote:

>
>
>
> On Wed, Oct 16, 2013 at 6:36 PM, Daniel Mikusa <dmikusa@gopivotal.com>wrote:
>
>> I have a simple WebSocket endpoint defined, it is just echoing the data
>> sent by the client.  Here's the code.
>>
>> @ServerEndpoint(value="/websocket",
>>             decoders={ListStringDecoder.class},
>>             encoders={ListStringEncoder.class})
>> public static class Server {
>>         @OnMessage
>>         public List<String> rx(List<String> in) {
>>             return in;
>>         }
>> }
>>
>> As you can see by the endpoint annotation, I'm defining an encoder and
>> decoder.  Here's the code for that.
>>
>>     public static class ListStringEncoder implements
>> Encoder.Text<List<String>> {
>>
>>         @Override
>>         public void init(EndpointConfig endpointConfig) {
>>         }
>>
>>         @Override
>>         public void destroy() {
>>         }
>>
>>         @Override
>>         public String encode(List<String> list) throws EncodeException {
>>             return list.toString();
>>         }
>>     }
>>
>>     public static class ListStringDecoder implements
>> Decoder.Text<List<String>> {
>>
>>         @Override
>>         public void init(EndpointConfig endpointConfig) {
>>         }
>>
>>         @Override
>>         public void destroy() {
>>         }
>>
>>         @Override
>>         public List<String> decode(String data) throws DecodeException {
>>                 List<String> tmp = new ArrayList<String>();
>>                 for (String str : data.substring(1, data.length() -
>> 1).split(",")) {
>>                         tmp.add(str);
>>                 }
>>                 return tmp;
>>         }
>>
>>         @Override
>>         public boolean willDecode(String s) {
>>             return s.startsWith("[") && s.endsWith("]");
>>         }
>>     }
>>
>> Now when I run this, I get the following exception as Tomcat starts up.
>>
>> 16-Oct-2013 11:29:40.311 SEVERE [localhost-startStop-1]
>> org.apache.catalina.core.StandardContext.listenerStart Exception sending
>> context initialized event to listener instance of class
>> org.apache.tomcat.websocket.pojo.TesterUtil$ServerConfigListener
>>  java.lang.NullPointerException
>>         at
>> org.apache.tomcat.websocket.Util$DecoderMatch.<init>(Util.java:428)
>>         at
>> org.apache.tomcat.websocket.pojo.PojoMethodMapping$MessageHandlerInfo.<init>(PojoMethodMapping.java:396)
>>         at
>> org.apache.tomcat.websocket.pojo.PojoMethodMapping.<init>(PojoMethodMapping.java:114)
>>         at
>> org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:194)
>>         at
>> org.apache.tomcat.websocket.pojo.TesterUtil$ServerConfigListener.contextInitialized(TesterUtil.java:45)
>>         at
>> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4830)
>>         at
>> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5276)
>>         at
>> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>>         at
>> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1390)
>>         at
>> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1)
>>         at
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>>         at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>         at java.lang.Thread.run(Thread.java:724)
>>
>> If I change my encoder & decoder to use "List" rather than "List<String>"
>> everything works fine.
>>
>> Any thoughts on what's going on here?
>>
>
> Hi Dan,
> IMHO current implementation of
> o.a.t.w.Util#getGenericType/getTypeParameter can be improved. More detailed
> inspection of the typed parameter will help. Your sample runs perfectly
> well on WebSocket RI implementation, hence I think this is a bug in Tomcat.
>

Bug report https://issues.apache.org/bugzilla/show_bug.cgi?id=55664


> cheers
> Niki
>
>
>>
>> Thanks
>>
>> Dan
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message