This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-xproc.git
commit bf8e0b96b713e9df37bdbdb28ccba8085069ac1f Author: Bertrand Delacretaz <[email protected]> AuthorDate: Wed Apr 1 14:09:20 2009 +0000 SLING-908 - PipelineImpl retrieves the response's OutputStream only if actually needed, so that error handles can use it otherwise git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk@760897 13f79535-47bb-0310-9956-ffa450edef68 --- .../xproc/xpl/impl/OutputStreamWrapper.java | 57 ++++++++++++++++++++++ .../scripting/xproc/xpl/impl/PipelineImpl.java | 13 ++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/sling/scripting/xproc/xpl/impl/OutputStreamWrapper.java b/src/main/java/org/apache/sling/scripting/xproc/xpl/impl/OutputStreamWrapper.java new file mode 100644 index 0000000..c0525ba --- /dev/null +++ b/src/main/java/org/apache/sling/scripting/xproc/xpl/impl/OutputStreamWrapper.java @@ -0,0 +1,57 @@ +/* + * 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.sling.scripting.xproc.xpl.impl; + +import java.io.IOException; +import java.io.OutputStream; + +/** OutputStream that wraps another one using a method + * that's only called if the wrapped stream is actually + * used. + */ +abstract class OutputStreamWrapper extends OutputStream { + + protected abstract OutputStream getWrappedStream() throws IOException; + + @Override + public void close() throws IOException { + getWrappedStream().close(); + } + + @Override + public void flush() throws IOException { + getWrappedStream().flush(); + } + + @Override + public void write(byte[] arg0, int arg1, int arg2) throws IOException { + getWrappedStream().write(arg0, arg1, arg2); + } + + @Override + public void write(byte[] arg0) throws IOException { + getWrappedStream().write(arg0); + } + + @Override + public void write(int arg0) throws IOException { + getWrappedStream().write(arg0); + } + +} diff --git a/src/main/java/org/apache/sling/scripting/xproc/xpl/impl/PipelineImpl.java b/src/main/java/org/apache/sling/scripting/xproc/xpl/impl/PipelineImpl.java index cad818f..cf4befa 100644 --- a/src/main/java/org/apache/sling/scripting/xproc/xpl/impl/PipelineImpl.java +++ b/src/main/java/org/apache/sling/scripting/xproc/xpl/impl/PipelineImpl.java @@ -18,6 +18,7 @@ */ package org.apache.sling.scripting.xproc.xpl.impl; +import java.io.IOException; import java.io.OutputStream; import javax.xml.namespace.QName; @@ -48,7 +49,17 @@ public class PipelineImpl extends AbstractCompoundStepImpl implements Pipeline { } this.getEnv().getCcPipeline().addComponent(new XMLSerializer()); - OutputStream out = this.getEnv().getSling().getResponse().getOutputStream(); + + // Don't retrieve OutputStream from response until actually writing + // to response, so that error handlers can retrieve it without getting + // an error + final OutputStream out = new OutputStreamWrapper() { + @Override + protected OutputStream getWrappedStream() throws IOException { + return getEnv().getSling().getResponse().getOutputStream(); + } + }; + this.getEnv().getCcPipeline().setup(out); this.getEnv().getCcPipeline().execute(); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
