Index: ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartEntryNIOInputStream.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartEntryNIOInputStream.java (revision 8a153e317d58f22dbf5e27198bbb8326a61218f2) +++ ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartEntryNIOInputStream.java (revision ) @@ -41,6 +41,7 @@ package org.glassfish.grizzly.http.multipart; import org.glassfish.grizzly.Buffer; +import org.glassfish.grizzly.CompletionHandler; import org.glassfish.grizzly.ReadHandler; import java.io.IOException; import org.glassfish.grizzly.http.io.NIOInputStream; @@ -56,6 +57,7 @@ // private final ReadHandler parentReadHandler; private final MultipartEntry multipartEntry; + private final CompletionHandler completionHandler; private NIOInputStream parentNIOInputStream; private int requestedSize; @@ -71,11 +73,13 @@ * belongs to. */ public MultipartEntryNIOInputStream( - final MultipartEntry multipartEntry + final MultipartEntry multipartEntry, + final CompletionHandler completionHandler // final ReadHandler parentReadHandler, ) { this.multipartEntry = multipartEntry; + this.completionHandler = completionHandler; // this.parentReadHandler = parentReadHandler; } @@ -214,8 +218,12 @@ parentNIOInputStream.close(); } catch (IOException e) { } + // user's ReadHandler + if (!(handler instanceof MultipartReadHandler) && completionHandler != null) { + completionHandler.failed(ioe); - } - } + } + } + } return; } @@ -231,8 +239,12 @@ parentNIOInputStream.close(); } catch (IOException e) { } + // user's ReadHandler + if (!(handler instanceof MultipartReadHandler) && completionHandler != null) { + completionHandler.failed(ioe); - } - } + } + } + } return; } @@ -325,6 +337,10 @@ try { parentNIOInputStream.close(); } catch (IOException ee) { + } + // user's ReadHandler + if (!(handler instanceof MultipartReadHandler) && completionHandler != null) { + completionHandler.failed(e); } } } Index: ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartReadHandler.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartReadHandler.java (revision 8a153e317d58f22dbf5e27198bbb8326a61218f2) +++ ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartReadHandler.java (revision ) @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright (c) 2011-2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011-2014 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development @@ -101,7 +101,7 @@ multipartMixedCompletionHandler = null; multipartMixedEntry = null; - multipartEntry = new MultipartEntry(multipartContext); + multipartEntry = new MultipartEntry(multipartContext, completionHandler); } public MultipartReadHandler(final MultipartEntry parentMultipartEntry, @@ -120,7 +120,7 @@ requestCompletionHandler = null; isMultipartMixed = true; - multipartEntry = new MultipartEntry(multipartContext); + multipartEntry = new MultipartEntry(multipartContext, completionHandler); } @Override Index: ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartEntry.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartEntry.java (revision 8a153e317d58f22dbf5e27198bbb8326a61218f2) +++ ../../../dev/grizzly2_git/extras/http-server-multipart/src/main/java/org/glassfish/grizzly/http/multipart/MultipartEntry.java (revision ) @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright (c) 2011-2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011-2014 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development @@ -45,6 +45,7 @@ import java.util.Set; import java.util.TreeMap; +import org.glassfish.grizzly.CompletionHandler; import org.glassfish.grizzly.http.server.Request; import org.glassfish.grizzly.http.io.NIOInputStream; import org.glassfish.grizzly.http.io.NIOReader; @@ -110,8 +111,8 @@ */ private boolean isMultipartParsed; - MultipartEntry(final MultipartContext multipartContext) { - inputStream = new MultipartEntryNIOInputStream(this); + MultipartEntry(final MultipartContext multipartContext, final CompletionHandler completionHandler) { + inputStream = new MultipartEntryNIOInputStream(this, completionHandler); reader = new MultipartEntryNIOReader(this); this.multipartContext = multipartContext; } Index: ../../../dev/grizzly2_git/modules/http-server/src/main/java/org/glassfish/grizzly/http/server/NIOInputStreamImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- ../../../dev/grizzly2_git/modules/http-server/src/main/java/org/glassfish/grizzly/http/server/NIOInputStreamImpl.java (revision 8a153e317d58f22dbf5e27198bbb8326a61218f2) +++ ../../../dev/grizzly2_git/modules/http-server/src/main/java/org/glassfish/grizzly/http/server/NIOInputStreamImpl.java (revision ) @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright (c) 2011-2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011-2014 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development @@ -65,7 +65,7 @@ * {@inheritDoc} */ @Override public int read() throws IOException { - return inputBuffer.readByte(); + return inputBuffer == null ? 0 : inputBuffer.readByte(); } @@ -73,50 +73,56 @@ * {@inheritDoc} */ @Override public int read(byte[] b) throws IOException { - return inputBuffer.read(b, 0, b.length); + return inputBuffer == null ? 0 : inputBuffer.read(b, 0, b.length); } /** * {@inheritDoc} */ @Override public int read(byte[] b, int off, int len) throws IOException { - return inputBuffer.read(b, off, len); + return inputBuffer == null ? 0 : inputBuffer.read(b, off, len); } /** * {@inheritDoc} */ @Override public long skip(long n) throws IOException { - return inputBuffer.skip(n/*, true*/); + return inputBuffer == null ? 0 : inputBuffer.skip(n/*, true*/); } /** * {@inheritDoc} */ @Override public int available() throws IOException { - return inputBuffer.available(); + return inputBuffer == null ? 0 : inputBuffer.available(); } /** * {@inheritDoc} */ @Override public void close() throws IOException { + if (inputBuffer != null) { - inputBuffer.close(); - } + inputBuffer.close(); + } + } /** * {@inheritDoc} */ @Override public void mark(int readlimit) { + if (inputBuffer != null) { - inputBuffer.mark(readlimit); - } + inputBuffer.mark(readlimit); + } + } /** * {@inheritDoc} */ @Override public void reset() throws IOException { + if (inputBuffer != null) { - inputBuffer.reset(); - } + inputBuffer.reset(); + } + } /** * This {@link NIOInputStream} implementation supports marking. @@ -124,7 +130,7 @@ * @return true */ @Override public boolean markSupported() { - return inputBuffer.markSupported(); + return inputBuffer != null && inputBuffer.markSupported(); } @@ -136,23 +142,27 @@ */ @Override public void notifyAvailable(ReadHandler handler) { + if (inputBuffer != null) { - inputBuffer.notifyAvailable(handler); - } + inputBuffer.notifyAvailable(handler); + } + } /** * {@inheritDoc} */ @Override public void notifyAvailable(ReadHandler handler, int size) { + if (inputBuffer != null) { - inputBuffer.notifyAvailable(handler, size); - } + inputBuffer.notifyAvailable(handler, size); + } + } /** * {@inheritDoc} */ @Override public boolean isFinished() { - return inputBuffer.isFinished(); + return inputBuffer == null || inputBuffer.isFinished(); } /** @@ -160,7 +170,7 @@ */ @Override public int readyData() { - return inputBuffer.available(); + return inputBuffer == null ? 0 : inputBuffer.available(); } /** @@ -168,7 +178,7 @@ */ @Override public boolean isReady() { - return (inputBuffer.available() > 0); + return (inputBuffer != null && inputBuffer.available() > 0); } @@ -179,7 +189,7 @@ */ @Override public Buffer getBuffer() { - return inputBuffer.getBuffer(); + return inputBuffer == null ? null : inputBuffer.getBuffer(); } /** @@ -187,7 +197,7 @@ */ @Override public Buffer readBuffer() { - return inputBuffer.readBuffer(); + return inputBuffer == null ? null : inputBuffer.readBuffer(); } /** @@ -195,7 +205,7 @@ */ @Override public Buffer readBuffer(final int size) { - return inputBuffer.readBuffer(size); + return inputBuffer == null ? null : inputBuffer.readBuffer(size); } // -------------------------------------------------- Methods from Cacheable