junedo/javamelody

FilterServletOutputStream does not implement Servlet 3.1 abstract methods

Closed this issue · 2 comments

If you try and use Servlet 3.1 async methods on a ServletOutputStream that is 
wrapped with the CounterResponseWrapper (eg setWriteListener), a java exception 
is thrown complaing that the method is abstract.

This is because the Java Melody class FilterServletOutputStream does not 
implement these abstract methods, new in Servlet 3.1 spec:

    /**
     * Checks if a non-blocking write will succeed. If this returns
     * <code>false</code>, it will cause a callback to
     * {@link WriteListener#onWritePossible()} when the buffer has emptied. If
     * this method returns <code>false</code> no further data must be written
     * until the contain calls {@link WriteListener#onWritePossible()}.
     *
     * @return <code>true</code> if data can be written, else <code>false</code>
     *
     * @since Servlet 3.1
     */
    public abstract boolean isReady();

    /**
     * Sets the {@link WriteListener} for this {@link ServletOutputStream} and
     * thereby switches to non-blocking IO. It is only valid to switch to
     * non-blocking IO within async processing or HTTP upgrade processing.
     *
     * @param listener  The non-blocking IO write listener
     *
     * @throws IllegalStateException    If this method is called if neither
     *                                  async nor HTTP upgrade is in progress or
     *                                  if the {@link WriteListener} has already
     *                                  been set
     * @throws NullPointerException     If listener is null
     *
     * @since Servlet 3.1
     */
    public abstract void setWriteListener(javax.servlet.WriteListener listener);


Original issue reported on code.google.com by jon.ner...@gmail.com on 15 Sep 2014 at 4:02

Original comment by evernat@free.fr on 15 Sep 2014 at 10:44

  • Changed state: Accepted
It should be fixed in trunk (revision 3993) and ready for the next release 
(1.55).
And some ServletInputStream should also be fixed like ServletOutputStream in 
the same revision.

You can test a new build from trunk including the fix, which is available at:
https://javamelody.ci.cloudbees.com/job/javamelody%20ant/lastSuccessfulBuild/art
ifact/javamelody.jar

Thanks jon for the issue.

Original comment by evernat@free.fr on 13 Dec 2014 at 11:44

  • Changed state: Fixed