Hello!

    I'm playing with the "wicket-atmosphere" module and, while generally it 
works fine, I stumbled upon a couple of issues:

    1) Suppose I have a Page with a method marked with @Subscribe annotation, 
this subscribtion has a filter attached. Is it possible to get the Page 
instance inside the filter to, e.g., access Page instance variables when 
deciding on event filtering?

    2) It seems like sometimes empty Atmosphere messages are sent to a page 
when a filter rejected the specific message. For such events I have the 
following log record on the server
    [Atmosphere-AsyncWrite-1] INFO  o.a.w.atmosphere.AtmosphereBehavior - 
onBroadcast: 0<|msg|>
and there is a JS error in a browser after receiveing the event
    ERROR: Wicket.Ajax.Call.failure: Error while parsing response: Could not 
find root <ajax-response> element
What is the purpose of sending empty messages to a browser?

    3) In my app Apache Shiro framework is integrated via a plugin adapted from 
"fiftyfive-wicket-shiro" project. User credentials are checked in an AJAX login 
form. In order to prevent a session fixation attack there is a call to 
invalidate old and create new session right before credentials check:
    getSession().replaceSession(); // inside AjaxFallbackButton.onSubmit()
After integration with Atmosphere this code no longer works, an exception in 
thrown on login attempt:

    22:11:41.698 [qtp18908406-24] ERROR o.a.wicket.DefaultExceptionMapper - 
Unexpected error occurred
org.apache.wicket.WicketRuntimeException: Method onRequest of interface 
org.apache.wicket.behavior.IBehaviorListener targeted at 
org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton$1@f78197 on 
component [AjaxFallbackButton [Component id = submit]] threw an exception
        at 
org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268)
 ~[wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
 ~[wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:247)
 ~[wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:226)
 ~[wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:840)
 ~[wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
 ~[wicket-request-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:254) 
[wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:211)
 [wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:282)
 [wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:244)
 [wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
 [wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:267) 
[wicket-core-6.6.0.jar:6.6.0]
        at 
org.atmosphere.util.AtmosphereFilterChain.doFilter(AtmosphereFilterChain.java:155)
 [atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.util.AtmosphereFilterChain.invokeFilterChain(AtmosphereFilterChain.java:132)
 [atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.handler.ReflectorServletProcessor$FilterChainServletWrapper.service(ReflectorServletProcessor.java:314)
 [atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.handler.ReflectorServletProcessor.onRequest(ReflectorServletProcessor.java:172)
 [atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:256) 
[atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:166)
 [atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.container.Jetty7CometSupport.service(Jetty7CometSupport.java:96) 
[atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.container.JettyAsyncSupportWithWebSocket.service(JettyAsyncSupportWithWebSocket.java:70)
 [atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1307)
 [atmosphere-runtime-1.0.8.jar:1.0.8]
        at 
org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:293) 
[atmosphere-runtime-1.0.8.jar:1.0.8]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) 
[javax.servlet-3.0.0.v201112011016.jar:na]
             ............
Caused by: java.lang.IllegalStateException: null
        at 
org.eclipse.jetty.server.session.AbstractSession.checkValid(AbstractSession.java:109)
 ~[na:na]
        at 
org.eclipse.jetty.server.session.HashedSession.checkValid(HashedSession.java:73)
 ~[na:na]
        at 
org.eclipse.jetty.server.session.AbstractSession.getAttribute(AbstractSession.java:132)
 ~[na:na]
        at 
org.apache.wicket.session.HttpSessionStore.getAttribute(HttpSessionStore.java:264)
 ~[wicket-core-6.6.0.jar:6.6.0]
        at 
org.apache.wicket.session.HttpSessionStore.lookup(HttpSessionStore.java:201) 
~[wicket-core-6.6.0.jar:6.6.0]
        at org.apache.wicket.Session.bind(Session.java:262) 
~[wicket-core-6.6.0.jar:6.6.0]
        at org.apache.wicket.Session.replaceSession(Session.java:538) 
~[wicket-core-6.6.0.jar:6.6.0]
        at 
org.myapp.MyWebApplication$1.replaceSession(MyWebApplication.java:66) 
~[classes/:na]
        at org.myapp.IndexPage$2.onSubmit(IndexPage.java:137) ~[classes/:na]
        at 
org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton$1.onSubmit(AjaxFallbackButton.java:76)
 ~[wicket-core-6.6.0.jar:6.6.0]

Thank you.

Reply via email to