Repository: cxf Updated Branches: refs/heads/master 938183d7b -> 344feb533
[CXF-6882] Making NioReaderEntity completion closer to the CompletionStage pattern Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/344feb53 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/344feb53 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/344feb53 Branch: refs/heads/master Commit: 344feb53305bdf28a807c9fc2d515bda70e5f640 Parents: 938183d Author: Sergey Beryozkin <sberyoz...@gmail.com> Authored: Tue Aug 8 15:44:05 2017 +0100 Committer: Sergey Beryozkin <sberyoz...@gmail.com> Committed: Tue Aug 8 15:44:05 2017 +0100 ---------------------------------------------------------------------- .../apache/cxf/jaxrs/nio/NioErrorHandler.java | 30 -------------------- .../cxf/jaxrs/nio/NioReadCompletionHandler.java | 2 +- .../org/apache/cxf/jaxrs/nio/NioReadEntity.java | 10 ++----- .../cxf/jaxrs/nio/NioReadListenerImpl.java | 4 +-- .../apache/cxf/jaxrs/nio/NioWriteEntity.java | 6 ++-- .../cxf/jaxrs/nio/NioWriteErrorHandler.java | 30 ++++++++++++++++++++ .../cxf/systest/jaxrs/nio/NioBookStore.java | 21 +++++--------- 7 files changed, 45 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/344feb53/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioErrorHandler.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioErrorHandler.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioErrorHandler.java deleted file mode 100644 index e7a538f..0000000 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioErrorHandler.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cxf.jaxrs.nio; - -@FunctionalInterface -public interface NioErrorHandler { - /** - * Method called when an exception or error occurred. - * - * @param throwable the error or exception encountered. - */ - void error(Throwable throwable) throws Throwable; -} - http://git-wip-us.apache.org/repos/asf/cxf/blob/344feb53/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadCompletionHandler.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadCompletionHandler.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadCompletionHandler.java index c889a0d..2901166 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadCompletionHandler.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadCompletionHandler.java @@ -20,6 +20,6 @@ package org.apache.cxf.jaxrs.nio; @FunctionalInterface public interface NioReadCompletionHandler { - void complete(NioInputStream in); + void complete(NioInputStream in, Throwable t); } http://git-wip-us.apache.org/repos/asf/cxf/blob/344feb53/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadEntity.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadEntity.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadEntity.java index a7b17fe..413b744 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadEntity.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadEntity.java @@ -29,12 +29,10 @@ import org.apache.cxf.transport.http.AbstractHTTPDestination; public class NioReadEntity { private final NioReadHandler reader; private final NioReadCompletionHandler completion; - private final NioErrorHandler error; - - public NioReadEntity(NioReadHandler reader, NioReadCompletionHandler completion, NioErrorHandler error) { + + public NioReadEntity(NioReadHandler reader, NioReadCompletionHandler completion) { this.reader = reader; this.completion = completion; - this.error = error; try { final Message m = JAXRSUtils.getCurrentMessage(); @@ -56,8 +54,4 @@ public class NioReadEntity { public NioReadCompletionHandler getCompletion() { return completion; } - - public NioErrorHandler getError() { - return error; - } } http://git-wip-us.apache.org/repos/asf/cxf/blob/344feb53/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadListenerImpl.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadListenerImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadListenerImpl.java index c39ab36..cece8b9 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadListenerImpl.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioReadListenerImpl.java @@ -40,7 +40,7 @@ public final class NioReadListenerImpl implements ReadListener { @Override public void onError(Throwable t) { try { - entity.getError().error(t); + entity.getCompletion().complete(null, t); } catch (final Throwable ex) { LOG.warning("NIO NioReadListener error: " + ExceptionUtils.getStackTrace(ex)); } @@ -55,6 +55,6 @@ public final class NioReadListenerImpl implements ReadListener { @Override public void onAllDataRead() throws IOException { - entity.getCompletion().complete(in); + entity.getCompletion().complete(in, null); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cxf/blob/344feb53/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteEntity.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteEntity.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteEntity.java index 32874e3..af39eaa 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteEntity.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteEntity.java @@ -20,9 +20,9 @@ package org.apache.cxf.jaxrs.nio; public final class NioWriteEntity { private final NioWriteHandler writer; - private final NioErrorHandler error; + private final NioWriteErrorHandler error; - public NioWriteEntity(final NioWriteHandler writer, final NioErrorHandler error) { + public NioWriteEntity(final NioWriteHandler writer, final NioWriteErrorHandler error) { this.writer = writer; this.error = error; } @@ -31,7 +31,7 @@ public final class NioWriteEntity { return writer; } - public NioErrorHandler getError() { + public NioWriteErrorHandler getError() { return error; } } http://git-wip-us.apache.org/repos/asf/cxf/blob/344feb53/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteErrorHandler.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteErrorHandler.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteErrorHandler.java new file mode 100644 index 0000000..91feb2c --- /dev/null +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/nio/NioWriteErrorHandler.java @@ -0,0 +1,30 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cxf.jaxrs.nio; + +@FunctionalInterface +public interface NioWriteErrorHandler { + /** + * Method called when an exception or error occurred. + * + * @param throwable the error or exception encountered. + */ + void error(Throwable throwable) throws Throwable; +} + http://git-wip-us.apache.org/repos/asf/cxf/blob/344feb53/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/nio/NioBookStore.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/nio/NioBookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/nio/NioBookStore.java index 1498653..7545a28 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/nio/NioBookStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/nio/NioBookStore.java @@ -99,6 +99,7 @@ public class NioBookStore { final LongAdder adder = new LongAdder(); new NioReadEntity( + // read handler in -> { try { final int n = in.read(buffer); @@ -107,24 +108,16 @@ public class NioBookStore { out.write(buffer, 0, n); } } catch (IOException e) { - throw new WebApplicationException(e); + response.resume(new WebApplicationException(e)); } }, - in -> { - try { - if (!in.isFinished()) { - throw new IllegalStateException("Reader did not finish yet"); - } - - out.close(); + // completion handler + (in, throwable) -> { + if (throwable != null) { + response.resume(throwable); + } else { response.resume("Book Store uploaded: " + adder.longValue() + " bytes"); - } catch (IOException e) { - throw new WebApplicationException(e); } - }, - throwable -> { // error handler - System.out.println("Problem found: " + throwable.getMessage()); - throw throwable; }); } }