This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 8ffdc92  Remove unused/untested APIs.
8ffdc92 is described below

commit 8ffdc92a9e0460eabefff1cc9c7bf20e62c7325b
Author: JamesBognar <[email protected]>
AuthorDate: Thu Nov 12 15:09:52 2020 -0500

    Remove unused/untested APIs.
---
 .../juneau/http/header/BasicDateHeader_Test.java   |   2 +-
 .../java/org/apache/juneau/oapi/OpenApiTest.java   |   1 -
 .../apache/juneau/testutils}/CalendarUtils.java    |   2 +-
 .../org/apache/juneau/internal/ClassTreeSet.java   |  47 ---
 .../org/apache/juneau/internal/MappedIterable.java |  65 ----
 .../apache/juneau/internal/TeeOutputStream.java    | 133 -------
 .../java/org/apache/juneau/internal/TeeWriter.java | 139 -------
 .../apache/juneau/internal/WriterOutputStream.java | 340 -----------------
 .../apache/juneau/serializer/WriterSerializer.java |  11 -
 .../java/org/apache/juneau/utils/IdGenerator.java  |  35 --
 .../java/org/apache/juneau/utils/IdGenerators.java |  83 -----
 .../main/java/org/apache/juneau/utils/IdMap.java   | 106 ------
 .../java/org/apache/juneau/utils/ProcBuilder.java  | 411 ---------------------
 .../org/apache/juneau/utils/StringMessage.java     |  78 ----
 .../java/org/apache/juneau/utils/StringObject.java |  98 -----
 .../java/org/apache/juneau/utils/ZipFileList.java  | 173 ---------
 pom.xml                                            |   1 -
 17 files changed, 2 insertions(+), 1723 deletions(-)

diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java
index 40942ad..f72cd6a 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/header/BasicDateHeader_Test.java
@@ -24,7 +24,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client.*;
 import org.apache.juneau.rest.mock.*;
-import org.apache.juneau.utils.*;
+import org.apache.juneau.testutils.*;
 
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.http.header.BasicDateHeader.*;
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/oapi/OpenApiTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/oapi/OpenApiTest.java
index 982a794..23e6c38 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/oapi/OpenApiTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/oapi/OpenApiTest.java
@@ -25,7 +25,6 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.marshall.*;
 import org.apache.juneau.testutils.*;
-import org.apache.juneau.utils.*;
 import org.junit.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/CalendarUtils.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/CalendarUtils.java
similarity index 99%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/CalendarUtils.java
rename to 
juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/CalendarUtils.java
index da1c152..bc0d7ea 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/CalendarUtils.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/CalendarUtils.java
@@ -10,7 +10,7 @@
 // * "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.juneau.utils;
+package org.apache.juneau.testutils;
 
 import static org.apache.juneau.internal.DateUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassTreeSet.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassTreeSet.java
deleted file mode 100644
index eca4e5a..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassTreeSet.java
+++ /dev/null
@@ -1,47 +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.juneau.internal;
-
-import java.util.*;
-
-/**
- * {@link TreeSet} for {@link Class} objects.
- */
-public class ClassTreeSet extends TreeSet<Class<?>> {
-
-       private static final long serialVersionUID = 1L;
-
-       private static final Comparator<Class<?>> COMPARATOR = new 
Comparator<Class<?>>() {
-               @Override
-               public int compare(Class<?> o1, Class<?> o2) {
-                       return o1.getName().compareTo(o2.getName());
-               }
-       };
-
-       /**
-        * Constructor.
-        */
-       public ClassTreeSet() {
-               super(COMPARATOR);
-       }
-
-       /**
-        * Constructor.
-        *
-        * @param c Initial contents of set.
-        */
-       public ClassTreeSet(Collection<Class<?>> c) {
-               super(COMPARATOR);
-               addAll(c);
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MappedIterable.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MappedIterable.java
deleted file mode 100644
index e4e3dfb..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MappedIterable.java
+++ /dev/null
@@ -1,65 +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.juneau.internal;
-
-import java.util.*;
-import java.util.function.*;
-
-/**
- * Combines an {@link Iterable} with a {@link Function} so that you can map
- * entries while iterating over them.
- *
- * @param <I> The unmapped type.
- * @param <E> The mapped type.
- */
-public class MappedIterable<I,E> implements Iterable<E> {
-
-       final Iterator<I> i;
-       final Function<I,E> f;
-
-       /**
-        * Constructor.
-        *
-        * @param i The original iterable being wrapped.
-        * @param f The function to use to convert from unmapped to mapped 
types.
-        */
-       protected MappedIterable(Iterable<I> i, Function<I,E> f) {
-               this.i = i.iterator();
-               this.f = f;
-       }
-
-       /**
-        * Constructor.
-        *
-        * @param i The original iterable being wrapped.
-        * @param f The function to use to convert from unmapped to mapped 
types.
-        * @return A new iterable.
-        */
-       public static <I,E> Iterable<E> of(Iterable<I> i, Function<I,E> f) {
-               return new MappedIterable<>(i, f);
-       }
-
-       @Override
-       public Iterator<E> iterator() {
-               return new Iterator<E>() {
-                       @Override
-                       public boolean hasNext() {
-                               return i.hasNext();
-                       }
-                       @Override
-                       public E next() {
-                               return f.apply(i.next());
-                       }
-               };
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeOutputStream.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeOutputStream.java
deleted file mode 100644
index e2c7bc4..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeOutputStream.java
+++ /dev/null
@@ -1,133 +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.juneau.internal;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Output stream that can send output to multiple output streams.
- */
-public class TeeOutputStream extends OutputStream {
-       private OutputStream[] outputStreams = new OutputStream[0];
-       private Map<String,OutputStream> outputStreamMap;
-
-       /**
-        * Constructor.
-        *
-        * @param outputStreams The list of output streams.
-        */
-       public TeeOutputStream(OutputStream...outputStreams) {
-               this.outputStreams = outputStreams;
-       }
-
-       /**
-        * Constructor.
-        *
-        * @param outputStreams The list of output streams.
-        */
-       public TeeOutputStream(Collection<OutputStream> outputStreams) {
-               this.outputStreams = outputStreams.toArray(new 
OutputStream[outputStreams.size()]);
-       }
-
-       /**
-        * Adds an output stream to this tee output stream.
-        *
-        * @param os The output stream to add to this tee output stream.
-        * @param close
-        *      If <jk>false</jk>, then calling {@link #close()} on this stream 
will not filter to the specified output stream.
-        * @return This object (for method chaining).
-        */
-       public TeeOutputStream add(OutputStream os, boolean close) {
-               if (os == null)
-                       return this;
-               if (! close)
-                       os = new NoCloseOutputStream(os);
-               if (os == this)
-                       throw new RuntimeException("Cannot add this output 
stream to itself.");
-               for (OutputStream os2 : outputStreams)
-                       if (os2 == os)
-                               throw new RuntimeException("Cannot add this 
output stream again.");
-               if (os instanceof TeeOutputStream) {
-                       for (OutputStream os2 : 
((TeeOutputStream)os).outputStreams)
-                               add(os2, true);
-               } else {
-                       outputStreams = ArrayUtils.append(outputStreams, os);
-               }
-               return this;
-       }
-
-       /**
-        * Returns the output stream identified through the <c>id</c> parameter 
passed in through the
-        * {@link #add(String, OutputStream, boolean)} method.
-        *
-        * @param id The ID associated with the output stream.
-        * @return The output stream, or <jk>null</jk> if no identifier was 
specified when the output stream was added.
-        */
-       public OutputStream getOutputStream(String id) {
-               if (outputStreamMap != null)
-                       return outputStreamMap.get(id);
-               return null;
-       }
-
-       /**
-        * Same as {@link #add(OutputStream, boolean)} but associates the 
stream with an identifier so the stream can be
-        * retrieved through {@link #getOutputStream(String)}.
-        *
-        * @param id The ID to associate the output stream with.
-        * @param os The output stream to add.
-        * @param close Close the specified stream afterwards.
-        * @return This object (for method chaining).
-        */
-       public TeeOutputStream add(String id, OutputStream os, boolean close) {
-               if (id != null) {
-                       if (outputStreamMap == null)
-                               outputStreamMap = new TreeMap<>();
-                       outputStreamMap.put(id, os);
-               }
-               return add(os, close);
-       }
-
-       /**
-        * Returns the number of inner streams in this tee stream.
-        *
-        * @return The number of streams in this tee stream.
-        */
-       public int size() {
-               return outputStreams.length;
-       }
-
-       @Override /* OutputStream */
-       public void write(int b) throws IOException {
-               for (OutputStream os : outputStreams)
-                       os.write(b);
-       }
-
-       @Override /* OutputStream */
-       public void write(byte b[], int off, int len) throws IOException {
-               for (OutputStream os : outputStreams)
-                       os.write(b, off, len);
-       }
-
-       @Override /* OutputStream */
-       public void flush() throws IOException {
-               for (OutputStream os : outputStreams)
-                       os.flush();
-       }
-
-       @Override /* OutputStream */
-       public void close() throws IOException {
-               for (OutputStream os : outputStreams)
-                       os.close();
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeWriter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeWriter.java
deleted file mode 100644
index e7631cf..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeWriter.java
+++ /dev/null
@@ -1,139 +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.juneau.internal;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Writer that can send output to multiple writers.
- */
-public class TeeWriter extends Writer {
-       private Writer[] writers = new Writer[0];
-       private Map<String,Writer> writerMap;
-
-       /**
-        * Constructor.
-        *
-        * @param writers The list of writers.
-        */
-       public TeeWriter(Writer...writers) {
-               this.writers = writers;
-       }
-
-       /**
-        * Constructor.
-        *
-        * @param writers The list of writers.
-        */
-       public TeeWriter(Collection<Writer> writers) {
-               this.writers = writers.toArray(new Writer[writers.size()]);
-       }
-
-       /**
-        * Adds a writer to this tee writer.
-        *
-        * @param w The writer to add to this tee writer.
-        * @param close
-        *      If <jk>false</jk>, then calling {@link #close()} on this tee 
writer will not filter to the specified writer.
-        * @return This object (for method chaining).
-        */
-       public TeeWriter add(Writer w, boolean close) {
-               if (w == null)
-                       return this;
-               if (! close)
-                       w = new NoCloseWriter(w);
-               if (w == this)
-                       throw new RuntimeException("Cannot add this writer to 
itself.");
-               for (Writer w2 : writers)
-                       if (w2 == w)
-                               throw new RuntimeException("Cannot add this 
writer again.");
-               if (w instanceof TeeWriter) {
-                       for (Writer w2 : ((TeeWriter)w).writers)
-                               add(w2, true);
-               } else {
-                       writers = ArrayUtils.append(writers, w);
-               }
-               return this;
-       }
-
-       /**
-        * Same as {@link #add(Writer, boolean)} but associates the writer with 
an identifier so the writer can be retrieved
-        * through {@link #getWriter(String)}.
-        *
-        * @param id The ID to associate the writer with.
-        * @param w The writer to add.
-        * @param close Close the specified writer afterwards.
-        * @return This object (for method chaining).
-        */
-       public TeeWriter add(String id, Writer w, boolean close) {
-               if (id != null) {
-                       if (writerMap == null)
-                               writerMap = new TreeMap<>();
-                       writerMap.put(id, w);
-               }
-               return add(w, close);
-       }
-
-       /**
-        * Returns the number of inner writers in this tee writer.
-        *
-        * @return The number of writers.
-        */
-       public int size() {
-               return writers.length;
-       }
-
-       /**
-        * Returns the writer identified through the <c>id</c> parameter passed 
in through the
-        * {@link #add(String, Writer, boolean)} method.
-        *
-        * @param id The ID associated with the writer.
-        * @return The writer, or <jk>null</jk> if no identifier was specified 
when the writer was added.
-        */
-       public Writer getWriter(String id) {
-               if (writerMap != null)
-                       return writerMap.get(id);
-               return null;
-       }
-
-       @Override /* Writer */
-       public void write(char[] cbuf, int off, int len) throws IOException {
-               for (Writer w : writers)
-                       if (w != null)
-                       w.write(cbuf, off, len);
-       }
-
-       @Override /* Writer */
-       public void flush() throws IOException {
-               for (Writer w : writers)
-                       if (w != null)
-                       w.flush();
-       }
-
-       @Override /* Writer */
-       public void close() throws IOException {
-               IOException e = null;
-               for (Writer w : writers) {
-                       if (w != null) {
-                               try {
-                       w.close();
-                               } catch (IOException e2) {
-                                       e = e2;
-                               }
-                       }
-               }
-               if (e != null)
-                       throw e;
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/WriterOutputStream.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/WriterOutputStream.java
deleted file mode 100644
index e14a4f6..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/WriterOutputStream.java
+++ /dev/null
@@ -1,340 +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.juneau.internal;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CodingErrorAction;
-
-/**
- * {@link OutputStream} implementation that transforms a byte stream to a
- * character stream using a specified charset encoding and writes the resulting
- * stream to a {@link Writer}. The stream is transformed using a
- * {@link CharsetDecoder} object, guaranteeing that all charset
- * encodings supported by the JRE are handled correctly.
- * <p>
- * The output of the {@link CharsetDecoder} is buffered using a fixed size 
buffer.
- * This implies that the data is written to the underlying {@link Writer} in 
chunks
- * that are no larger than the size of this buffer. By default, the buffer is
- * flushed only when it overflows or when {@link #flush()} or {@link #close()}
- * is called. In general there is therefore no need to wrap the underlying 
{@link Writer}
- * in a {@link java.io.BufferedWriter}. {@link WriterOutputStream} can also
- * be instructed to flush the buffer after each write operation. In this case, 
all
- * available data is written immediately to the underlying {@link Writer}, 
implying that
- * the current position of the {@link Writer} is correlated to the current 
position
- * of the {@link WriterOutputStream}.
- * <p>
- * {@link WriterOutputStream} implements the inverse transformation of {@link 
java.io.OutputStreamWriter};
- * in the following example, writing to {@code out2} would have the same 
result as writing to
- * {@code out} directly (provided that the byte sequence is legal with respect 
to the
- * charset encoding):
- * <pre>
- * OutputStream out = ...
- * Charset cs = ...
- * OutputStreamWriter writer = new OutputStreamWriter(out, cs);
- * WriterOutputStream out2 = new WriterOutputStream(writer, cs);</pre>
- * {@link WriterOutputStream} implements the same transformation as {@link 
java.io.InputStreamReader},
- * except that the control flow is reversed: both classes transform a byte 
stream
- * into a character stream, but {@link java.io.InputStreamReader} pulls data 
from the underlying stream,
- * while {@link WriterOutputStream} pushes it to the underlying stream.
- * <p>
- * Note that while there are use cases where there is no alternative to using
- * this class, very often the need to use this class is an indication of a flaw
- * in the design of the code. This class is typically used in situations where 
an existing
- * API only accepts an {@link OutputStream} object, but where the stream is 
known to represent
- * character data that must be decoded for further use.
- * <p>
- * Instances of {@link WriterOutputStream} are not thread safe.
- *
- * @since 2.0
- */
-public class WriterOutputStream extends OutputStream {
-    private static final int BUFFER_SIZE = 1024;
-
-    private final Writer writer;
-    private final CharsetDecoder decoder;
-    private final boolean writeImmediately;
-
-    /**
-     * ByteBuffer used as input for the decoder. This buffer can be small
-     * as it is used only to transfer the received data to the
-     * decoder.
-     */
-    private final ByteBuffer decoderIn = ByteBuffer.allocate(128);
-
-    /**
-     * CharBuffer used as output for the decoder. It should be
-     * somewhat larger as we write from this buffer to the
-     * underlying Writer.
-     */
-    private final CharBuffer decoderOut;
-
-    /**
-     * Constructs a new {@link WriterOutputStream} with a default output 
buffer size of 1024
-     * characters. The output buffer will only be flushed when it overflows or 
when {@link #flush()} or {@link #close()}
-     * is called.
-     *
-     * @param writer the target {@link Writer}
-     * @param decoder the charset decoder
-     * @since 2.1
-     */
-    public WriterOutputStream(final Writer writer, final CharsetDecoder 
decoder) {
-        this(writer, decoder, BUFFER_SIZE, false);
-    }
-
-    /**
-     * Constructs a new {@link WriterOutputStream}.
-     *
-     * @param writer the target {@link Writer}
-     * @param decoder the charset decoder
-     * @param bufferSize the size of the output buffer in number of characters
-     * @param writeImmediately If {@code true} the output buffer will be 
flushed after each
-     *                         write operation, i.e. all available data will 
be written to the
-     *                         underlying {@link Writer} immediately. If 
{@code false}, the
-     *                         output buffer will only be flushed when it 
overflows or when
-     *                         {@link #flush()} or {@link #close()} is called.
-     * @since 2.1
-     */
-    public WriterOutputStream(final Writer writer, final CharsetDecoder 
decoder, final int bufferSize,
-                              final boolean writeImmediately) {
-        checkIbmJdkWithBrokenUTF16( decoder.charset());
-        this.writer = writer;
-        this.decoder = decoder;
-        this.writeImmediately = writeImmediately;
-        decoderOut = CharBuffer.allocate(bufferSize);
-    }
-
-    /**
-     * Constructs a new {@link WriterOutputStream}.
-     *
-     * @param writer the target {@link Writer}
-     * @param charset the charset encoding
-     * @param bufferSize the size of the output buffer in number of characters
-     * @param writeImmediately If {@code true} the output buffer will be 
flushed after each
-     *                         write operation, i.e. all available data will 
be written to the
-     *                         underlying {@link Writer} immediately. If 
{@code false}, the
-     *                         output buffer will only be flushed when it 
overflows or when
-     *                         {@link #flush()} or {@link #close()} is called.
-     */
-    public WriterOutputStream(final Writer writer, final Charset charset, 
final int bufferSize,
-                              final boolean writeImmediately) {
-        this(writer,
-             charset.newDecoder()
-                    .onMalformedInput(CodingErrorAction.REPLACE)
-                    .onUnmappableCharacter(CodingErrorAction.REPLACE)
-                    .replaceWith("?"),
-             bufferSize,
-             writeImmediately);
-    }
-
-    /**
-     * Constructs a new {@link WriterOutputStream} with a default output 
buffer size of 1024
-     * characters. The output buffer will only be flushed when it overflows or 
when {@link #flush()} or {@link #close()}
-     * is called.
-     *
-     * @param writer the target {@link Writer}
-     * @param charset the charset encoding
-     */
-    public WriterOutputStream(final Writer writer, final Charset charset) {
-        this(writer, charset, BUFFER_SIZE, false);
-    }
-
-    /**
-     * Constructs a new {@link WriterOutputStream}.
-     *
-     * @param writer the target {@link Writer}
-     * @param charsetName the name of the charset encoding
-     * @param bufferSize the size of the output buffer in number of characters
-     * @param writeImmediately If {@code true} the output buffer will be 
flushed after each
-     *                         write operation, i.e. all available data will 
be written to the
-     *                         underlying {@link Writer} immediately. If 
{@code false}, the
-     *                         output buffer will only be flushed when it 
overflows or when
-     *                         {@link #flush()} or {@link #close()} is called.
-     */
-    public WriterOutputStream(final Writer writer, final String charsetName, 
final int bufferSize,
-                              final boolean writeImmediately) {
-        this(writer, Charset.forName(charsetName), bufferSize, 
writeImmediately);
-    }
-
-    /**
-     * Constructs a new {@link WriterOutputStream} with a default output 
buffer size of 1024
-     * characters. The output buffer will only be flushed when it overflows or 
when {@link #flush()} or {@link #close()}
-     * is called.
-     *
-     * @param writer the target {@link Writer}
-     * @param charsetName the name of the charset encoding
-     */
-    public WriterOutputStream(final Writer writer, final String charsetName) {
-        this(writer, charsetName, BUFFER_SIZE, false);
-    }
-
-    /**
-     * Write bytes from the specified byte array to the stream.
-     *
-     * @param b the byte array containing the bytes to write
-     * @param off the start offset in the byte array
-     * @param len the number of bytes to write
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    public void write(final byte[] b, int off, int len) throws IOException {
-        while (len > 0) {
-            final int c = Math.min(len, decoderIn.remaining());
-            decoderIn.put(b, off, c);
-            processInput(false);
-            len -= c;
-            off += c;
-        }
-        if (writeImmediately) {
-            flushOutput();
-        }
-    }
-
-    /**
-     * Write bytes from the specified byte array to the stream.
-     *
-     * @param b the byte array containing the bytes to write
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    public void write(final byte[] b) throws IOException {
-        write(b, 0, b.length);
-    }
-
-    /**
-     * Write a single byte to the stream.
-     *
-     * @param b the byte to write
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    public void write(final int b) throws IOException {
-        write(new byte[] { (byte)b }, 0, 1);
-    }
-
-    /**
-     * Flush the stream. Any remaining content accumulated in the output buffer
-     * will be written to the underlying {@link Writer}. After that
-     * {@link Writer#flush()} will be called.
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    public void flush() throws IOException {
-        flushOutput();
-        writer.flush();
-    }
-
-    /**
-     * Close the stream. Any remaining content accumulated in the output buffer
-     * will be written to the underlying {@link Writer}. After that
-     * {@link Writer#close()} will be called.
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    public void close() throws IOException {
-        processInput(true);
-        flushOutput();
-        writer.close();
-    }
-
-    /**
-     * Decode the contents of the input ByteBuffer into a CharBuffer.
-     *
-     * @param endOfInput indicates end of input
-     * @throws IOException if an I/O error occurs
-     */
-    private void processInput(final boolean endOfInput) throws IOException {
-        // Prepare decoderIn for reading
-        decoderIn.flip();
-        CoderResult coderResult;
-        while (true) {
-            coderResult = decoder.decode(decoderIn, decoderOut, endOfInput);
-            if (coderResult.isOverflow()) {
-                flushOutput();
-            } else if (coderResult.isUnderflow()) {
-                break;
-            } else {
-                // The decoder is configured to replace malformed input and 
unmappable characters,
-                // so we should not get here.
-                throw new IOException("Unexpected coder result");
-            }
-        }
-        // Discard the bytes that have been read
-        decoderIn.compact();
-    }
-
-    /**
-     * Flush the output.
-     *
-     * @throws IOException if an I/O error occurs
-     */
-    private void flushOutput() throws IOException {
-        if (decoderOut.position() > 0) {
-            writer.write(decoderOut.array(), 0, decoderOut.position());
-            decoderOut.rewind();
-        }
-    }
-
-    /**
-     * Check if the JDK in use properly supports the given charset.
-     *
-     * @param charset the charset to check the support for
-     */
-    private static void checkIbmJdkWithBrokenUTF16(final Charset charset){
-        if (!"UTF-16".equals(charset.name())) {
-            return;
-        }
-        final String TEST_STRING_2 = "v\u00e9s";
-        final byte[] bytes = TEST_STRING_2.getBytes(charset);
-
-        final CharsetDecoder charsetDecoder2 = charset.newDecoder();
-        final ByteBuffer bb2 = ByteBuffer.allocate(16);
-        final CharBuffer cb2 = CharBuffer.allocate(TEST_STRING_2.length());
-        final int len = bytes.length;
-        for (int i = 0; i < len; i++) {
-            bb2.put(bytes[i]);
-            bb2.flip();
-            try {
-                charsetDecoder2.decode(bb2, cb2, i == (len - 1));
-            } catch ( final IllegalArgumentException e){
-                throw new UnsupportedOperationException("UTF-16 requested when 
runninng on an IBM JDK with broken UTF-16 support. " +
-                        "Please find a JDK that supports UTF-16 if you intend 
to use UF-16 with WriterOutputStream");
-            }
-            bb2.compact();
-        }
-        cb2.rewind();
-        if (!TEST_STRING_2.equals(cb2.toString())){
-            throw new UnsupportedOperationException("UTF-16 requested when 
runninng on an IBM JDK with broken UTF-16 support. " +
-                    "Please find a JDK that supports UTF-16 if you intend to 
use UF-16 with WriterOutputStream");
-        }
-
-    }
-}
-
-
-
-
-
-
-
-
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index 743785c..19a5719 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -18,7 +18,6 @@ import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.utils.*;
 
 /**
  * Subclass of {@link Serializer} for character-based serializers.
@@ -398,16 +397,6 @@ public abstract class WriterSerializer extends Serializer {
        }
 
        /**
-        * Wraps the specified object inside a {@link StringObject}.
-        *
-        * @param o The object to wrap.
-        * @return The wrapped object.
-        */
-       public final StringObject toStringObject(Object o) {
-               return new StringObject(this, o);
-       }
-
-       /**
         * Convenience method for serializing an object and sending it to 
STDOUT.
         *
         * @param o The object to serialize.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdGenerator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdGenerator.java
deleted file mode 100644
index d20215a..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdGenerator.java
+++ /dev/null
@@ -1,35 +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.juneau.utils;
-
-/**
- * Simple interface for defining atomic ID generators.
- *
- * @param <K> The ID type.
- */
-public interface IdGenerator<K> {
-
-       /**
-        * Returns the next available ID.
-        *
-        * @return The next available ID.
-        */
-       K next();
-
-       /**
-        * Sets a lower bound for this generator.
-        *
-        * @param k The lower bound.
-        */
-       void lb(K k);
-}
\ No newline at end of file
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdGenerators.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdGenerators.java
deleted file mode 100644
index 8780be7..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdGenerators.java
+++ /dev/null
@@ -1,83 +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.juneau.utils;
-
-import java.util.concurrent.atomic.*;
-
-/**
- * Predefined ID generators.
- */
-public class IdGenerators {
-
-       /**
-        * Creates an ID generator using {@link AtomicInteger} initialized to 
value <c>1</c>.
-        *
-        * @param initValue The initial value.
-        * @return A new ID generator.
-        */
-       public static IdGenerator<Integer> createIntGenerator(final int 
initValue) {
-               return new IdGenerator<Integer>() {
-                       private final AtomicInteger i = new 
AtomicInteger(initValue);
-
-                       @Override /* IdGenerator */
-                       public synchronized Integer next() {
-                               return i.getAndIncrement();
-                       }
-
-                       @Override
-                       public synchronized void lb(Integer k) {
-                               i.set(Math.max(k + 1, i.get()));
-                       }
-               };
-       }
-
-       /**
-        * Creates an ID generator using {@link AtomicInteger} initialized to 
the specified value.
-        *
-        * @return A new ID generator.
-        */
-       public static IdGenerator<Integer> createIntGenerator() {
-               return createIntGenerator(1);
-       }
-
-       /**
-        * Creates an ID generator using {@link AtomicLong} initialized to 
value <c>1</c>.
-        *
-        * @param initValue The initial value.
-        * @return A new ID generator.
-        */
-       public static IdGenerator<Long> createLongGenerator(final long 
initValue) {
-               return new IdGenerator<Long>() {
-                       private final AtomicLong l = new AtomicLong(initValue);
-
-                       @Override /* IdGenerator */
-                       public synchronized Long next() {
-                               return l.getAndIncrement();
-                       }
-
-                       @Override
-                       public synchronized void lb(Long k) {
-                               l.set(Math.max(k + 1, l.get()));
-                       }
-               };
-       }
-
-       /**
-        * Creates an ID generator using {@link AtomicLong} initialized to the 
specified value.
-        *
-        * @return A new ID generator.
-        */
-       public static IdGenerator<Long> createLongGenerator() {
-               return createLongGenerator(1);
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdMap.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdMap.java
deleted file mode 100644
index bedc48b..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/IdMap.java
+++ /dev/null
@@ -1,106 +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.juneau.utils;
-
-import java.util.concurrent.*;
-
-/**
- * Map consisting of auto-generated atomic keys.
- *
- * <p>
- * Useful for creating in-memory 'databases' of POJOs.
- *
- * @param <K> The key type.
- * @param <V> The value type.
- */
-public class IdMap<K,V> extends ConcurrentHashMap<K,V> {
-
-       private static final long serialVersionUID = 1L;
-
-       private final IdGenerator<K> idGen;
-
-
-       /**
-        * Creates a new ID map with integer keys with generator initialized to 
<c>1</c>.
-        *
-        * @param c The value type.
-        * @return A new map.
-        */
-       public static <T> IdMap<Integer,T> createIntMap(Class<T> c) {
-               return createIntMap(c, 1);
-       }
-
-       /**
-        * Creates a new ID map with integer keys with generator initialized to 
the specified value.
-        *
-        * @param c The value type.
-        * @param initValue The initial value of the generator.
-        * @return A new map.
-        */
-       public static <T> IdMap<Integer,T> createIntMap(Class<T> c, int 
initValue) {
-               return create(c, IdGenerators.createIntGenerator(initValue));
-       }
-
-       /**
-        * Creates a new ID map with long keys with generator initialized to 
<c>1</c>.
-        *
-        * @param c The value type.
-        * @return A new map.
-        */
-       public static <T> IdMap<Long,T> createLongMap(Class<T> c) {
-               return createLongMap(c, 1l);
-       }
-
-       /**
-        * Creates a new ID map with long keys with generator initialized to 
the specified value.
-        *
-        * @param c The value type.
-        * @param initValue The initial value of the generator.
-        * @return A new map.
-        */
-       public static <T> IdMap<Long,T> createLongMap(Class<T> c, long 
initValue) {
-               return create(c, IdGenerators.createLongGenerator(initValue));
-       }
-
-       /**
-        * Creates a new map.
-        *
-        * @param c The value type.
-        * @param idGen An ID generator.
-        * @return A new instance.
-        */
-       public static <K,T> IdMap<K,T> create(Class<T> c, IdGenerator<K> idGen) 
{
-               return new IdMap<>(c, idGen);
-       }
-
-       private IdMap(Class<V> c, IdGenerator<K> idGen) {
-               this.idGen = idGen;
-       }
-
-       /**
-        * Returns the next available ID.
-        *
-        * @return The next available ID.
-        */
-       public K nextId() {
-               return idGen.next();
-       }
-
-       /**
-        * Sets a lower bound on the specified ID.
-        * @param k The lower-bound key.
-        */
-       public void lbId(K k) {
-               idGen.lb(k);
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ProcBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ProcBuilder.java
deleted file mode 100644
index a238fd3..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ProcBuilder.java
+++ /dev/null
@@ -1,411 +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.juneau.utils;
-
-import static org.apache.juneau.internal.IOUtils.*;
-import static org.apache.juneau.internal.StringUtils.*;
-
-import java.io.*;
-import java.lang.reflect.*;
-import java.util.*;
-import java.util.logging.*;
-
-import org.apache.juneau.internal.*;
-import org.apache.juneau.utils.IOPipe.*;
-
-/**
- * Utility class for running operating system processes.
- *
- * <p>
- * Similar to {@link java.lang.ProcessBuilder} but with additional features.
- */
-public class ProcBuilder {
-
-       private java.lang.ProcessBuilder pb = new java.lang.ProcessBuilder();
-       private TeeWriter outWriters = new TeeWriter(), logWriters = new 
TeeWriter();
-       private LineProcessor lp;
-       private Process p;
-       private int maxExitStatus = 0;
-       private boolean byLines;
-       private String divider = 
"--------------------------------------------------------------------------------";
-
-       /**
-        * Creates a process builder with the specified arguments.
-        *
-        * <p>
-        * Equivalent to calling <c>ProcessBuilder.create().command(args);</c>
-        *
-        * @param args The command-line arguments.
-        * @return A new process builder.
-        */
-       public static ProcBuilder create(Object...args) {
-               return new ProcBuilder().command(args);
-       }
-
-       /**
-        * Creates an empty process builder.
-        *
-        * @return A new process builder.
-        */
-       public static ProcBuilder create() {
-               return new ProcBuilder().command();
-       }
-
-       /**
-        * Command arguments.
-        *
-        * <p>
-        * Arguments can be collections or arrays and will be automatically 
expanded.
-        *
-        * @param args The command-line arguments.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder command(Object...args) {
-               return commandIf(ANY, args);
-       }
-
-       /**
-        * Command arguments if the specified matcher matches.
-        *
-        * <p>
-        * Can be used for specifying OS-specific commands.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      ProcBuilder pb = ProcBuilder
-        *              .create()
-        *              .commandIf(<jsf>WINDOWS</jsf>, <js>"cmd /c dir"</js>)
-        *              .commandIf(<jsf>UNIX</jsf>, <js>"bash -c ls"</js>)
-        *              .merge()
-        *              .execute();
-        * </p>
-        *
-        * @param m The matcher.
-        * @param args The command line arguments if matcher matches.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder commandIf(Matcher m, Object...args) {
-               if (m.matches())
-                       pb.command(toList(args));
-               return this;
-       }
-
-       /**
-        * Append to the command arguments.
-        *
-        * <p>
-        * Arguments can be collections or arrays and will be automatically 
expanded.
-        *
-        * @param args The command-line arguments.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder append(Object...args) {
-               return appendIf(ANY, args);
-       }
-
-       /**
-        * Append to the command arguments if the specified matcher matches.
-        *
-        * <p>
-        * Arguments can be collections or arrays and will be automatically 
expanded.
-        *
-        * @param m The matcher.
-        * @param args The command line arguments if matcher matches.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder appendIf(Matcher m, Object...args) {
-               if (m.matches())
-                       pb.command().addAll(toList(args));
-               return this;
-       }
-
-       /**
-        * Merge STDOUT and STDERR into a single stream.
-        *
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder merge() {
-               pb.redirectErrorStream(true);
-               return this;
-       }
-
-       /**
-        * Use by-lines mode.
-        *
-        * <p>
-        * Flushes output after every line of input.
-        *
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder byLines() {
-               this.byLines = true;
-               return this;
-       }
-
-       /**
-        * Pipe output to the specified writer.
-        *
-        * <p>
-        * The method can be called multiple times to write to multiple writers.
-        *
-        * @param w The writer to pipe to.
-        * @param close Close the writer afterwards.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder pipeTo(Writer w, boolean close) {
-               this.outWriters.add(w, close);
-               return this;
-       }
-
-       /**
-        * Pipe output to the specified writer, but don't close the writer.
-        *
-        * @param w The writer to pipe to.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder pipeTo(Writer w) {
-               return pipeTo(w, false);
-       }
-
-       /**
-        * Pipe output to the specified writer, including the command and 
return code.
-        *
-        * <p>
-        * The method can be called multiple times to write to multiple writers.
-        *
-        * @param w The writer to pipe to.
-        * @param close Close the writer afterwards.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder logTo(Writer w, boolean close) {
-               this.logWriters.add(w, close);
-               this.outWriters.add(w, close);
-               return this;
-       }
-
-       /**
-        * Pipe output to the specified writer, including the command and 
return code.
-        *
-        * <p>
-        * The method can be called multiple times to write to multiple writers.
-        * Don't close the writer afterwards.
-        *
-        * @param w The writer to pipe to.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder logTo(Writer w) {
-               return logTo(w, false);
-       }
-
-       /**
-        * Pipe output to the specified writer, including the command and 
return code.
-        * The method can be called multiple times to write to multiple writers.
-        *
-        * @param level The log level.
-        * @param logger The logger to log to.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder logTo(final Level level, final Logger logger) {
-               if (logger.isLoggable(level)) {
-                       logTo(new StringWriter() {
-                               private boolean isClosed;  // Prevents messages 
from being written twice.
-                               @Override /* Writer */
-                               public void close() {
-                                       if (! isClosed)
-                                               logger.log(level, 
this.toString());
-                                       isClosed = true;
-                               }
-                       }, true);
-               }
-               return this;
-       }
-
-       /**
-        * Line processor to use to process/convert lines of output returned by 
the process.
-        *
-        * @param lp The new line processor.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder lp(LineProcessor lp) {
-               this.lp = lp;
-               return this;
-       }
-
-       /**
-        * Append the specified environment variables to the process.
-        *
-        * @param env The new set of environment variables.
-        * @return This object (for method chaining).
-        */
-       @SuppressWarnings({"rawtypes"})
-       public ProcBuilder env(Map env) {
-               if (env != null)
-                       for (Map.Entry e : (Set<Map.Entry>)env.entrySet())
-                               environment(e.getKey().toString(), e.getValue() 
== null ? null : e.getValue().toString());
-               return this;
-       }
-
-       /**
-        * Append the specified environment variable.
-        *
-        * @param key The environment variable name.
-        * @param val The environment variable value.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder environment(String key, String val) {
-               pb.environment().put(key, val);
-               return this;
-       }
-
-       /**
-        * Sets the directory where the command will be executed.
-        *
-        * @param directory The directory.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder directory(File directory) {
-               pb.directory(directory);
-               return this;
-       }
-
-       /**
-        * Sets the maximum allowed return code on the process call.
-        *
-        * <p>
-        * If the return code exceeds this value, an IOException is returned on 
the {@link #run()} command.
-        * The default value is '0'.
-        *
-        * @param maxExitStatus The maximum exit status.
-        * @return This object (for method chaining).
-        */
-       public ProcBuilder maxExitStatus(int maxExitStatus) {
-               this.maxExitStatus = maxExitStatus;
-               return this;
-       }
-
-       /**
-        * Run this command and pipes the output to the specified writer or 
output stream.
-        *
-        * @return The exit code from the process.
-        * @throws IOException Thrown by underlying stream.
-        * @throws InterruptedException Thread was interrupted.
-        */
-       public int run() throws IOException, InterruptedException {
-               if (pb.command().size() == 0)
-                       throw new IOException("No command specified in 
ProcBuilder.");
-               try {
-                       logWriters.append(divider).append('\n').flush();
-                       logWriters.append(join(pb.command(), " 
")).append('\n').flush();
-                       p = pb.start();
-                       IOPipe.create(p.getInputStream(), 
outWriters).lineProcessor(lp).byLines(byLines).run();
-                       int rc = p.waitFor();
-                       logWriters.append("Exit: 
").append(String.valueOf(p.exitValue())).append('\n').flush();
-                       if (rc > maxExitStatus)
-                               throw new IOException("Return code "+rc+" from 
command " + join(pb.command(), " "));
-                       return rc;
-               } finally {
-                       close();
-               }
-       }
-
-       /**
-        * Run this command and returns the output as a simple string.
-        *
-        * @return The output from the command.
-        * @throws IOException Thrown by underlying stream.
-        * @throws InterruptedException Thread was interrupted.
-        */
-       public String getOutput() throws IOException, InterruptedException {
-               StringWriter sw = new StringWriter();
-               pipeTo(sw).run();
-               return sw.toString();
-       }
-
-       /**
-        * Returns the output from this process as a {@link Scanner}.
-        *
-        * @return The output from the process as a Scanner object.
-        * @throws IOException Thrown by underlying stream.
-        * @throws InterruptedException Thread was interrupted.
-        */
-       public Scanner getScanner() throws IOException, InterruptedException {
-               StringWriter sw = new StringWriter();
-               pipeTo(sw, true);
-               run();
-               return new Scanner(sw.toString());
-       }
-
-       /**
-        * Destroys the underlying process.
-        *
-        * <p>
-        * This method is only needed if the {@link #getScanner()} method was 
used.
-        */
-       private void close() {
-               closeQuietly(logWriters, outWriters);
-               if (p != null)
-                       p.destroy();
-       }
-
-       /**
-        * Specifies interface for defining OS-specific commands.
-        */
-       public abstract static class Matcher {
-               abstract boolean matches();
-       }
-
-       static final String OS = System.getProperty("os.name").toLowerCase();
-
-       /** Operating system matcher: Any operating system. */
-       public static final Matcher ANY = new Matcher() {
-               @Override boolean matches() {
-                       return true;
-               }
-       };
-
-       /** Operating system matcher: Any Windows system. */
-       public static final Matcher WINDOWS = new Matcher() {
-               @Override boolean matches() {
-                       return OS.indexOf("win") >= 0;
-               }
-       };
-
-       /** Operating system matcher: Any Mac system. */
-       public static final Matcher MAC = new Matcher() {
-               @Override boolean matches() {
-                       return OS.indexOf("mac") >= 0;
-               }
-       };
-
-       /** Operating system matcher: Any Unix or Linux system. */
-       public static final Matcher UNIX = new Matcher() {
-               @Override boolean matches() {
-                       return OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 
|| OS.indexOf("aix") > 0;
-               }
-       };
-
-       private static List<String> toList(Object...args) {
-               List<String> l = new LinkedList<>();
-               for (Object o : args) {
-                       if (o.getClass().isArray())
-                               for (int i = 0; i < Array.getLength(o); i++)
-                                       l.add(Array.get(o, i).toString());
-                       else if (o instanceof Collection)
-                               for (Object o2 : (Collection<?>)o)
-                                       l.add(o2.toString());
-                       else
-                               l.add(o.toString());
-               }
-               return l;
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringMessage.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringMessage.java
deleted file mode 100644
index 68988ce..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringMessage.java
+++ /dev/null
@@ -1,78 +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.juneau.utils;
-
-import static org.apache.juneau.internal.StringUtils.*;
-
-import java.io.*;
-import java.text.*;
-
-import org.apache.juneau.*;
-
-/**
- * An encapsulated MessageFormat-style string and arguments.
- *
- * <p>
- * Useful for delayed serialization of arguments for logging.
- * Message string will not be constructed until the <c>toString()</c> method 
is called.
- */
-public class StringMessage implements CharSequence, Writable {
-
-       private final String pattern;
-       private final Object[] args;
-       private String results;
-
-       /**
-        * Constructor.
-        *
-        * @param pattern {@link MessageFormat}-style pattern.
-        * @param args Message arguments.
-        */
-       public StringMessage(String pattern, Object...args) {
-               this.pattern = pattern;
-               this.args = args;
-       }
-
-       @Override /* Writable */
-       public Writer writeTo(Writer w) throws IOException {
-               w.write(toString());
-               return w;
-       }
-
-       @Override /* Writable */
-       public String getMediaType() {
-               return null;
-       }
-
-       @Override /* CharSequence */
-       public char charAt(int index) {
-               return toString().charAt(index);
-       }
-
-       @Override /* CharSequence */
-       public int length() {
-               return toString().length();
-       }
-
-       @Override /* CharSequence */
-       public CharSequence subSequence(int start, int end) {
-               return toString().subSequence(start, end);
-       }
-
-       @Override /* Object */
-       public String toString() {
-               if (results == null)
-                       results = format(pattern, args);
-               return results;
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringObject.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringObject.java
deleted file mode 100644
index f389978..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringObject.java
+++ /dev/null
@@ -1,98 +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.juneau.utils;
-
-import java.io.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.json.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * A serializer/object pair used for delayed object serialization.
- *
- * <p>
- * Useful in certain conditions such as logging when you don't want to 
needlessly serialize objects.
- *
- * <p>
- * Instances of this method are created by the {@link 
WriterSerializer#toStringObject(Object)} method.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- *     <jc>// The POJO will not be serialized unless DEBUG is enabled.</jc>
- *     logger.log(<jsf>DEBUG</jsf>, <js>"Object contents are: {0}"</js>, 
JsonSerializer.<jsf>DEFAULT</jsf>.toObjectString(myPojo));
- * </p>
- */
-public class StringObject implements CharSequence, Writable {
-
-       private final WriterSerializer s;
-       private final Object o;
-       private String results;
-
-       /**
-        * Constructor.
-        *
-        * @param s The serializer to use to serialize the object.
-        * @param o The object to be serialized.
-        */
-       public StringObject(WriterSerializer s, Object o) {
-               this.s = s;
-               this.o = o;
-       }
-
-       /**
-        * Constructor with default serializer {@link 
SimpleJsonSerializer#DEFAULT}
-        *
-        * @param o The object to be serialized.
-        */
-       public StringObject(Object o) {
-               this(SimpleJsonSerializer.DEFAULT, o);
-       }
-
-       @Override /* Object */
-       public String toString() {
-               if (results == null)
-                       results = s.toString(o);
-               return results;
-       }
-
-       @Override /* CharSequence */
-       public int length() {
-               return toString().length();
-       }
-
-       @Override /* CharSequence */
-       public char charAt(int index) {
-               return toString().charAt(index);
-       }
-
-       @Override /* CharSequence */
-       public CharSequence subSequence(int start, int end) {
-               return toString().subSequence(start, end);
-       }
-
-       @Override /* Writable */
-       public Writer writeTo(Writer w) throws IOException {
-               try {
-                       s.serialize(o, w);
-                       return w;
-               } catch (SerializeException e) {
-                       throw new IOException(e);
-               }
-       }
-
-       @Override /* Writable */
-       public String getMediaType() {
-               return s.getPrimaryMediaType().toString();
-       }
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
deleted file mode 100644
index a9e4c17..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
+++ /dev/null
@@ -1,173 +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.juneau.utils;
-
-import java.io.*;
-import java.util.*;
-import java.util.zip.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.http.annotation.*;
-
-/**
- * Utility class for representing the contents of a zip file as a list of 
entries whose contents don't resolve until
- * serialization time.
- *
- * <p>
- * Generally associated with <c>RestServlets</c> using the 
<c>responseHandlers</c> annotation so that
- * REST methods can easily create ZIP file responses by simply returning 
instances of this class.
- */
-@Response
-public class ZipFileList extends LinkedList<ZipFileList.ZipFileEntry> 
implements Streamable {
-
-       private static final long serialVersionUID = 1L;
-
-       /**
-        * The name of the zip file.
-        */
-       public final String fileName;
-
-       @Header("Content-Type")
-       @Override /* Streamable */
-       public String getMediaType() {
-               return "application/zip";
-       }
-
-       /**
-        * Returns the value for the <c>Content-Disposition</c> header.
-        *
-        * @return The value for the <c>Content-Disposition</c> header.
-        */
-       @Header("Content-Disposition")
-       public String getContentDisposition() {
-               return "attachment;filename=" + fileName;
-       }
-
-       @ResponseBody
-       @Override /* Streamable */
-       public void streamTo(OutputStream os) throws IOException {
-               try (ZipOutputStream zos = new ZipOutputStream(os)) {
-                       for (ZipFileEntry e : this)
-                               e.write(zos);
-               }
-               os.flush();
-       }
-
-       /**
-        * Constructor.
-        *
-        * @param fileName The file name of the zip file to create.
-        */
-       public ZipFileList(String fileName) {
-               this.fileName = fileName;
-       }
-
-       /**
-        * Add an entry to this list.
-        *
-        * @param e The zip file entry.
-        * @return This object (for method chaining).
-        */
-       public ZipFileList append(ZipFileEntry e) {
-               add(e);
-               return this;
-       }
-
-       /**
-        * Interface for ZipFileList entries.
-        */
-       public static interface ZipFileEntry {
-               /**
-                * Write this entry to the specified output stream.
-                *
-                * @param zos The output stream to write to.
-                * @throws IOException Thrown by underlying stream.
-                */
-               void write(ZipOutputStream zos) throws IOException;
-       }
-
-       /**
-        * ZipFileList entry for File entry types.
-        */
-       public static class FileEntry implements ZipFileEntry {
-
-               /** The root file to base the entry paths on. */
-               protected File root;
-
-               /** The file being zipped. */
-               protected File file;
-
-               /**
-                * Constructor.
-                *
-                * @param root The root file that represents the base path.
-                * @param file The file to add to the zip file.
-                */
-               public FileEntry(File root, File file) {
-                       this.root = root;
-                       this.file = file;
-               }
-
-               /**
-                * Constructor.
-                *
-                * @param file The file to add to the zip file.
-                */
-               public FileEntry(File file) {
-                       this.file = file;
-                       this.root = (file.isDirectory() ? file : 
file.getParentFile());
-               }
-
-               @Override /* ZipFileEntry */
-               public void write(ZipOutputStream zos) throws IOException {
-                       addFile(zos, file);
-               }
-
-               /**
-                * Subclasses can override this method to customize which files 
get added to a zip file.
-                *
-                * @param f The file being added to the zip file.
-                * @return Always returns <jk>true</jk>.
-                */
-               public boolean doAdd(File f) {
-                       return true;
-               }
-
-               /**
-                * Adds the specified file to the specified output stream.
-                *
-                * @param zos The output stream.
-                * @param f The file to add.
-                * @throws IOException Thrown by underlying stream.
-                */
-               protected void addFile(ZipOutputStream zos, File f) throws 
IOException {
-                       if (doAdd(f)) {
-                               if (f.isDirectory()) {
-                                       File[] fileList = f.listFiles();
-                                       if (fileList == null)
-                                               throw new 
IOException(f.toString());
-                                       for (File fc : fileList)
-                                               addFile(zos, fc);
-                               } else if (f.canRead()) {
-                                       String path = 
f.getAbsolutePath().substring(root.getAbsolutePath().length() + 
1).replace('\\', '/');
-                                       ZipEntry e = new ZipEntry(path);
-                                       e.setSize(f.length());
-                                       zos.putNextEntry(e);
-                                       try (FileInputStream fis = new 
FileInputStream(f)) {
-                                               IOPipe.create(fis, zos).run();
-                                       }
-                               }
-                       }
-               }
-       }
-}
diff --git a/pom.xml b/pom.xml
index 54d8ff8..597bac6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -351,7 +351,6 @@
                                        <excludes>
                                                <exclude>**/doc/**/*</exclude>
                                                
<exclude>**/examples/**/*</exclude>
-                                               
<exclude>**/testutils/**/*</exclude>
                                        </excludes>
                                        <fileSets>
                                                <fileSet 
implementation="org.apache.maven.shared.model.fileset.FileSet">

Reply via email to