You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/10/26 23:22:09 UTC

[6/8] juneau git commit: Update code to reflect changes in Java 7.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java
index 7eef2dd..18cf44f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java
@@ -116,13 +116,11 @@ public class ObjectMap extends LinkedHashMap<String,Object> {
 		private static final long serialVersionUID = 1L;
 
 		@Override /* Map */
-		@SuppressWarnings("unchecked")
 		public Set<Map.Entry<String,Object>> entrySet() {
 			return Collections.EMPTY_MAP.entrySet();
 		}
 
 		@Override /* Map */
-		@SuppressWarnings("unchecked")
 		public Set<String> keySet() {
 			return Collections.EMPTY_MAP.keySet();
 		}
@@ -1426,7 +1424,7 @@ public class ObjectMap extends LinkedHashMap<String,Object> {
 	public Set<String> keySet() {
 		if (inner == null)
 			return super.keySet();
-		LinkedHashSet<String> s = new LinkedHashSet<String>();
+		LinkedHashSet<String> s = new LinkedHashSet<>();
 		s.addAll(inner.keySet());
 		s.addAll(super.keySet());
 		return s;

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
index cb1d4fb..8a11bf6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
@@ -254,17 +254,17 @@ public final class PropertyStore {
 	// All configuration properties in this object.
 	// Keys are property prefixes (e.g. 'BeanContext').
 	// Values are maps containing properties for that specific prefix.
-	private Map<String,PropertyMap> properties = new ConcurrentSkipListMap<String,PropertyMap>();
+	private Map<String,PropertyMap> properties = new ConcurrentSkipListMap<>();
 
 	// Context cache.
 	// This gets cleared every time any properties change on this object.
-	private final Map<Class<? extends Context>,Context> contexts = new ConcurrentHashMap<Class<? extends Context>,Context>();
+	private final Map<Class<? extends Context>,Context> contexts = new ConcurrentHashMap<>();
 
 	// Global Context cache.
 	// Property stores that are the 'same' will use the same maps from this cache.
 	// 'same' means the context properties are all the same when converted to strings.
 	private static final ConcurrentHashMap<Integer, ConcurrentHashMap<Class<? extends Context>,Context>>
-		globalContextCache = new ConcurrentHashMap<Integer, ConcurrentHashMap<Class<? extends Context>,Context>>();
+		globalContextCache = new ConcurrentHashMap<>();
 
 	private ReadWriteLock lock = new ReentrantReadWriteLock();
 	private Lock rl = lock.readLock(), wl = lock.writeLock();
@@ -929,7 +929,7 @@ public final class PropertyStore {
 	 */
 	public class PropertyMap {
 
-		private final Map<String,Property> map = new ConcurrentSkipListMap<String,Property>();
+		private final Map<String,Property> map = new ConcurrentSkipListMap<>();
 		private volatile int hashCode = 0;
 		private final ReadWriteLock lock = new ReentrantReadWriteLock();
 		private final Lock rl = lock.readLock(), wl = lock.writeLock();
@@ -1038,7 +1038,7 @@ public final class PropertyStore {
 		public Map<String,Object> asMap() {
 			rl.lock();
 			try {
-				Map<String,Object> m = new LinkedHashMap<String,Object>();
+				Map<String,Object> m = new LinkedHashMap<>();
 				for (Property p : map.values())
 					m.put(p.name, p.value);
 				return m;
@@ -1223,7 +1223,7 @@ public final class PropertyStore {
 		private final Set<Object> value;
 
 		private SetProperty(String name, Object value) {
-			super(name, "SET", new ConcurrentSkipListSet<Object>(PROPERTY_COMPARATOR));
+			super(name, "SET", new ConcurrentSkipListSet<>(PROPERTY_COMPARATOR));
 			this.value = (Set<Object>)value();
 			add(value);
 		}
@@ -1283,7 +1283,7 @@ public final class PropertyStore {
 		private final LinkedList<Object> value;
 
 		private ListProperty(String name, Object value) {
-			super(name, "LIST", new LinkedList<Object>());
+			super(name, "LIST", new LinkedList<>());
 			this.value = (LinkedList<Object>)value();
 			add(value);
 		}
@@ -1298,7 +1298,7 @@ public final class PropertyStore {
 				for (ListIterator<Object> i = l.listIterator(l.size()); i.hasPrevious();)
 					add(i.previous());
 			} else if (val instanceof Collection) {
-				List<Object> l = new ArrayList<Object>((Collection<Object>)val);
+				List<Object> l = new ArrayList<>((Collection<Object>)val);
 				for (ListIterator<Object> i = l.listIterator(l.size()); i.hasPrevious();)
 					add(i.previous());
 			} else {
@@ -1345,7 +1345,7 @@ public final class PropertyStore {
 
 		MapProperty(String name, Object value) {
 			// ConcurrentSkipListMap doesn't support Map.Entry.remove(), so use TreeMap instead.
-			super(name, "MAP", Collections.synchronizedMap(new TreeMap<Object,Object>(PROPERTY_COMPARATOR)));
+			super(name, "MAP", Collections.synchronizedMap(new TreeMap<>(PROPERTY_COMPARATOR)));
 			this.value = (Map<Object,Object>)value();
 			put(value);
 		}
@@ -1413,7 +1413,7 @@ public final class PropertyStore {
 	 * Compares two objects for "string"-equality.
 	 * Basically mean both objects are equal if they're the same when converted to strings.
 	 */
-	@SuppressWarnings({ "rawtypes", "unchecked" })
+	@SuppressWarnings({ "rawtypes" })
 	private static boolean same(Object o1, Object o2) {
 		if (o1 == o2)
 			return true;

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
index 056604c..061bd9d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
@@ -38,7 +38,6 @@ public abstract class Session {
 	private final ObjectMap properties;
 	private final Context ctx;
 	private Map<String,Object> cache;
-	private boolean closed;
 	private List<String> warnings;                 // Any warnings encountered.
 
 
@@ -138,7 +137,7 @@ public abstract class Session {
 	 */
 	public final void addToCache(String key, Object val) {
 		if (cache == null)
-			cache = new TreeMap<String,Object>();
+			cache = new TreeMap<>();
 		cache.put(key, val);
 	}
 
@@ -155,7 +154,7 @@ public abstract class Session {
 	public final void addToCache(Map<String,Object> cacheObjects) {
 		if (cacheObjects != null) {
 			if (cache == null)
-				cache = new TreeMap<String,Object>();
+				cache = new TreeMap<>();
 			cache.putAll(cacheObjects);
 		}
 	}
@@ -180,7 +179,7 @@ public abstract class Session {
 	 */
 	public final void addWarning(String msg, Object... args) {
 		if (warnings == null)
-			warnings = new LinkedList<String>();
+			warnings = new LinkedList<>();
 		getLogger().warning(msg, args);
 		warnings.add((warnings.size() + 1) + ": " + format(msg, args));
 	}
@@ -235,23 +234,12 @@ public abstract class Session {
 			return e.getLocalizedMessage();
 		}
 	}
-
+	
 	/**
-	 * Perform cleanup on this context object if necessary.
-	 *
-	 * @return <jk>true</jk> if this method wasn't previously called.
-	 * @throws BeanRuntimeException If called more than once, or in debug mode and warnings occurred.
+	 * Throws a {@link BeanRuntimeException} if any warnings occurred in this session.
 	 */
-	public boolean close() throws BeanRuntimeException {
-		if (closed)
-			return false;
-		closed = true;
-		return true;
-	}
-
-	@Override /* Object */
-	protected void finalize() throws Throwable {
-//		if (! closed)
-//			throw new RuntimeException("Session was not closed.");
+	public void checkForWarnings() {
+		if (! warnings.isEmpty())
+			throw new BeanRuntimeException("Warnings occurred in session: \n" + join(getWarnings(), "\n"));		
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java
index 5a03b5b..c9e1e47 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java
@@ -131,7 +131,7 @@ public enum Visibility {
 	 * 	The same method if visibility requirements met, or <jk>null</jk> if visibility requirement not
 	 * 	met or call to {@link Method#setAccessible(boolean)} throws a security exception.
 	 */
-	public <T> Method transform(Method x) {
+	public Method transform(Method x) {
 		if (x == null)
 			return null;
 		if (isVisible(x))

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java
index 7f2324f..3037fed 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java
@@ -39,11 +39,11 @@ public final class CsvParserSession extends ReaderParserSession {
 
 	@Override /* ParserSession */
 	protected <T> T doParse(ParserPipe pipe, ClassMeta<T> type) throws Exception {
-		ParserReader r = pipe.getParserReader();
-		if (r == null)
-			return null;
-		T o = parseAnything(type, r, getOuter(), null);
-		return o;
+		try (ParserReader r = pipe.getParserReader()) {
+			if (r == null)
+				return null;
+			return parseAnything(type, r, getOuter(), null);
+		}
 	}
 
 	@SuppressWarnings({"static-method"})

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java
index 0a1478b..d97ac35 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java
@@ -44,36 +44,37 @@ public final class CsvSerializerSession extends WriterSerializerSession {
 	}
 
 	@Override /* SerializerSession */
-	protected final void doSerialize(SerializerPipe out, Object o) throws Exception {
-		Writer w = out.getWriter();
-		ClassMeta<?> cm = getClassMetaForObject(o);
-		Collection<?> l = null;
-		if (cm.isArray()) {
-			l = Arrays.asList((Object[])o);
-		} else {
-			l = (Collection<?>)o;
-		}
-		// TODO - Doesn't support DynaBeans.
-		if (l.size() > 0) {
-			ClassMeta<?> entryType = getClassMetaForObject(l.iterator().next());
-			if (entryType.isBean()) {
-				BeanMeta<?> bm = entryType.getBeanMeta();
-				int i = 0;
-				for (BeanPropertyMeta pm : bm.getPropertyMetas()) {
-					if (i++ > 0)
-						w.append(',');
-					append(w, pm.getName());
-				}
-				w.append('\n');
-				for (Object o2 : l) {
-					i = 0;
-					BeanMap<?> bean = toBeanMap(o2);
+	protected final void doSerialize(SerializerPipe pipe, Object o) throws Exception {
+		try (Writer w = pipe.getWriter()) {
+			ClassMeta<?> cm = getClassMetaForObject(o);
+			Collection<?> l = null;
+			if (cm.isArray()) {
+				l = Arrays.asList((Object[])o);
+			} else {
+				l = (Collection<?>)o;
+			}
+			// TODO - Doesn't support DynaBeans.
+			if (l.size() > 0) {
+				ClassMeta<?> entryType = getClassMetaForObject(l.iterator().next());
+				if (entryType.isBean()) {
+					BeanMeta<?> bm = entryType.getBeanMeta();
+					int i = 0;
 					for (BeanPropertyMeta pm : bm.getPropertyMetas()) {
 						if (i++ > 0)
 							w.append(',');
-						append(w, pm.get(bean, pm.getName()));
+						append(w, pm.getName());
 					}
 					w.append('\n');
+					for (Object o2 : l) {
+						i = 0;
+						BeanMap<?> bean = toBeanMap(o2);
+						for (BeanPropertyMeta pm : bm.getPropertyMetas()) {
+							if (i++ > 0)
+								w.append(',');
+							append(w, pm.get(bean, pm.getName()));
+						}
+						w.append('\n');
+					}
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
index ec3632a..0c8c448 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
@@ -55,7 +55,7 @@ import org.apache.juneau.http.*;
 public final class EncoderGroup {
 
 	// Maps Accept-Encoding headers to matching encoders.
-	private final ConcurrentHashMap<String,EncoderMatch> cache = new ConcurrentHashMap<String,EncoderMatch>();
+	private final ConcurrentHashMap<String,EncoderMatch> cache = new ConcurrentHashMap<>();
 
 	private final String[] encodings;
 	private final List<String> encodingsList;
@@ -68,10 +68,10 @@ public final class EncoderGroup {
 	 * @param encoders The encoders to add to this group.
 	 */
 	public EncoderGroup(Encoder[] encoders) {
-		this.encoders = Collections.unmodifiableList(new ArrayList<Encoder>(Arrays.asList(encoders)));
+		this.encoders = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(encoders)));
 
-		List<String> lc = new ArrayList<String>();
-		List<Encoder> l = new ArrayList<Encoder>();
+		List<String> lc = new ArrayList<>();
+		List<Encoder> l = new ArrayList<>();
 		for (Encoder e : encoders) {
 			for (String c: e.getCodings()) {
 				lc.add(c);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroupBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroupBuilder.java
index db54070..6e05a5a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroupBuilder.java
@@ -28,7 +28,7 @@ public class EncoderGroupBuilder {
 	 * Create an empty encoder group builder.
 	 */
 	public EncoderGroupBuilder() {
-		this.encoders = new ArrayList<Encoder>();
+		this.encoders = new ArrayList<>();
 	}
 
 	/**
@@ -37,7 +37,7 @@ public class EncoderGroupBuilder {
 	 * @param copyFrom The encoder group that we're copying settings and encoders from.
 	 */
 	public EncoderGroupBuilder(EncoderGroup copyFrom) {
-		this.encoders = new ArrayList<Encoder>();
+		this.encoders = new ArrayList<>();
 		addReverse(encoders, copyFrom.getEncoders());
 	}
 
@@ -95,7 +95,7 @@ public class EncoderGroupBuilder {
 	 * @return A new {@link EncoderGroup} object.
 	 */
 	public EncoderGroup build() {
-		List<Encoder> l = new ArrayList<Encoder>();
+		List<Encoder> l = new ArrayList<>();
 		for (Object e : encoders)
 			l.add(newInstance(Encoder.class, e));
 		Collections.reverse(l);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
index 2bceb2a..4ffc57e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
@@ -52,7 +52,7 @@ public final class HtmlBeanPropertyMeta extends BeanPropertyMetaExtended {
 		this.anchorText = b.anchorText;
 	}
 
-	private static class Builder {
+	static final class Builder {
 		boolean asXml, noTables, noTableHeaders, asPlainText;
 		Class<? extends HtmlRender> render = HtmlRender.class;
 		String link, anchorText;

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 3405483..f107823 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -223,17 +223,18 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	@Override /* Serializer */
 	protected void doSerialize(SerializerPipe out, Object o) throws Exception {
 
-		HtmlWriter w = getHtmlWriter(out);
-		HtmlDocTemplate t = getTemplate();
-
-		w.sTag("html").nl(0);
-		w.sTag(1, "head").nl(1);
-		t.head(this, w, o);
-		w.eTag(1, "head").nl(1);
-		w.sTag(1, "body").nl(1);
-		t.body(this, w, o);
-		w.eTag(1, "body").nl(1);
-		w.eTag("html").nl(0);
+		try (HtmlWriter w = getHtmlWriter(out)) {
+			HtmlDocTemplate t = getTemplate();
+
+			w.sTag("html").nl(0);
+			w.sTag(1, "head").nl(1);
+			t.head(this, w, o);
+			w.eTag(1, "head").nl(1);
+			w.sTag(1, "body").nl(1);
+			t.body(this, w, o);
+			w.eTag(1, "body").nl(1);
+			w.eTag("html").nl(0);
+		}
 	}
 
 	/**
@@ -245,11 +246,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @throws Exception
 	 */
 	public void parentSerialize(Object out, Object o) throws Exception {
-		SerializerPipe pipe = createPipe(out);
-		try {
+		try (SerializerPipe pipe = createPipe(out)) {
 			super.doSerialize(pipe, o);
-		} finally  {
-			pipe.close();
 		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index 975cae4..2bde2c2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -36,7 +36,7 @@ import org.apache.juneau.xml.*;
 @SuppressWarnings({ "unchecked", "rawtypes" })
 public final class HtmlParserSession extends XmlParserSession {
 
-	private static final Set<String> whitespaceElements = new HashSet<String>(
+	private static final Set<String> whitespaceElements = new HashSet<>(
 		Arrays.asList(
 			new String[]{"br","bs","sp","ff"}
 		)
@@ -312,7 +312,7 @@ public final class HtmlParserSession extends XmlParserSession {
 	}
 
 	private static Map<String,String> getAttributes(XmlReader r) {
-		Map<String,String> m = new TreeMap<String,String>() ;
+		Map<String,String> m = new TreeMap<>() ;
 		for (int i = 0; i < r.getAttributeCount(); i++)
 			m.put(r.getAttributeLocalName(i), r.getAttributeValue(i));
 		return m;
@@ -375,7 +375,7 @@ public final class HtmlParserSession extends XmlParserSession {
 			ClassMeta<E> type, BeanPropertyMeta pMeta) throws Exception {
 
 		HtmlTag tag = nextTag(r, TR);
-		List<String> keys = new ArrayList<String>();
+		List<String> keys = new ArrayList<>();
 		while (true) {
 			tag = nextTag(r, TH, xTR);
 			if (tag == xTR)

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializerSession.java
index 847b40d..a530f12 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializerSession.java
@@ -116,7 +116,7 @@ public class HtmlSchemaDocSerializerSession extends HtmlDocSerializerSession {
 
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	private static List<String> getEnumStrings(Class<? extends Enum> c) {
-		List<String> l = new LinkedList<String>();
+		List<String> l = new LinkedList<>();
 		for (Object e : EnumSet.allOf(c))
 			l.add(e.toString());
 		return l;

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 1cb1a6e..bd15915 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -384,7 +384,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 		CR_NORMAL     // Normal content.  Use whitespace.
 	}
 
-	@SuppressWarnings({ "rawtypes", "unchecked" })
+	@SuppressWarnings({ "rawtypes" })
 	private void serializeMap(HtmlWriter out, Map m, ClassMeta<?> sType,
 			ClassMeta<?> eKeyType, ClassMeta<?> eValueType, String typeName, BeanPropertyMeta ppMeta) throws Exception {
 
@@ -694,7 +694,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 			return null;
 		c = sort(c);
 		Object[] th;
-		Set<ClassMeta> prevC = new HashSet<ClassMeta>();
+		Set<ClassMeta> prevC = new HashSet<>();
 		Object o1 = null;
 		for (Object o : c)
 			if (o != null) {
@@ -723,7 +723,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 		if (canIgnoreValue(cm, null, o1))
 			return null;
 		if (cm.isMap() && ! cm.isBeanMap()) {
-			Set<Object> set = new LinkedHashSet<Object>();
+			Set<Object> set = new LinkedHashSet<>();
 			for (Object o : c) {
 				if (! canIgnoreValue(cm, null, o)) {
 					if (! cm.isInstance(o))
@@ -737,7 +737,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 			}
 			th = set.toArray(new Object[set.size()]);
 		} else {
-			Map<String,Boolean> m = new LinkedHashMap<String,Boolean>();
+			Map<String,Boolean> m = new LinkedHashMap<>();
 			for (Object o : c) {
 				if (! canIgnoreValue(cm, null, o)) {
 					if (! cm.isInstance(o))
@@ -761,7 +761,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 		boolean isSortable = true;
 		for (Object o : th)
 			isSortable &= (o instanceof Comparable);
-		Set<Object> s = (isSortable ? new TreeSet<Object>() : new LinkedHashSet<Object>());
+		Set<Object> s = (isSortable ? new TreeSet<>() : new LinkedHashSet<>());
 		s.addAll(Arrays.asList(th));
 
 		for (Object o : c) {

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerSession.java
index 7589781..31749e1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerSession.java
@@ -40,12 +40,13 @@ public class HtmlStrippedDocSerializerSession extends HtmlSerializerSession {
 
 	@Override /* SerializerSession */
 	protected void doSerialize(SerializerPipe out, Object o) throws Exception {
-		HtmlWriter w = getHtmlWriter(out);
-		if (o == null
-			|| (o instanceof Collection && ((Collection<?>)o).size() == 0)
-			|| (o.getClass().isArray() && Array.getLength(o) == 0))
-			w.sTag(1, "p").append("No Results").eTag("p").nl(1);
-		else
-			super.doSerialize(out, o);
+		try (HtmlWriter w = getHtmlWriter(out)) {
+			if (o == null
+				|| (o instanceof Collection && ((Collection<?>)o).size() == 0)
+				|| (o.getClass().isArray() && Array.getLength(o) == 0))
+				w.sTag(1, "p").append("No Results").eTag("p").nl(1);
+			else
+				super.doSerialize(out, o);
+		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlTag.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlTag.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlTag.java
index e841931..663bf64 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlTag.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlTag.java
@@ -60,7 +60,7 @@ enum HtmlTag {
 	xP(-18, "</p>"),
 	xHTML(-19, "</html>");
 
-	private Map<Integer,HtmlTag> cache = new HashMap<Integer,HtmlTag>();
+	private Map<Integer,HtmlTag> cache = new HashMap<>();
 
 	int id;
 	String label;

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Accept.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Accept.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Accept.java
index 5b5c64f..f095f97 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Accept.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Accept.java
@@ -148,7 +148,7 @@ import org.apache.juneau.internal.*;
  */
 public final class Accept {
 
-	private static final Cache<String,Accept> cache = new Cache<String,Accept>(NOCACHE, CACHE_MAX_SIZE);
+	private static final Cache<String,Accept> cache = new Cache<>(NOCACHE, CACHE_MAX_SIZE);
 
 	/**
 	 * Returns a parsed <code>Accept</code> header.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptCharset.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptCharset.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptCharset.java
index c17ec3f..39e6c79 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptCharset.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptCharset.java
@@ -76,7 +76,7 @@ import org.apache.juneau.internal.*;
  */
 public final class AcceptCharset extends HeaderRangeArray {
 
-	private static final Cache<String,AcceptCharset> cache = new Cache<String,AcceptCharset>(NOCACHE, CACHE_MAX_SIZE);
+	private static final Cache<String,AcceptCharset> cache = new Cache<>(NOCACHE, CACHE_MAX_SIZE);
 
 	/**
 	 * Returns a parsed <code>Accept-Charset</code> header.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptEncoding.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptEncoding.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptEncoding.java
index c0cf845..9a8a516 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptEncoding.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptEncoding.java
@@ -96,7 +96,7 @@ import org.apache.juneau.internal.*;
  */
 public final class AcceptEncoding extends HeaderRangeArray {
 
-	private static final Cache<String,AcceptEncoding> cache = new Cache<String,AcceptEncoding>(NOCACHE, CACHE_MAX_SIZE);
+	private static final Cache<String,AcceptEncoding> cache = new Cache<>(NOCACHE, CACHE_MAX_SIZE);
 
 	/**
 	 * Returns a parsed <code>Accept-Encoding</code> header.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptLanguage.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptLanguage.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptLanguage.java
index cd187d9..c855445 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptLanguage.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/AcceptLanguage.java
@@ -108,7 +108,7 @@ import org.apache.juneau.internal.*;
  */
 public final class AcceptLanguage extends HeaderRangeArray {
 
-	private static final Cache<String,AcceptLanguage> cache = new Cache<String,AcceptLanguage>(NOCACHE, CACHE_MAX_SIZE);
+	private static final Cache<String,AcceptLanguage> cache = new Cache<>(NOCACHE, CACHE_MAX_SIZE);
 
 	/**
 	 * Returns a parsed <code>Accept-Language</code> header.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentType.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentType.java
index 5bcc4ed..062a199 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentType.java
@@ -53,7 +53,7 @@ import org.apache.juneau.internal.*;
  */
 public class ContentType extends MediaType {
 
-	private static Cache<String,ContentType> cache = new Cache<String,ContentType>(NOCACHE, CACHE_MAX_SIZE);
+	private static Cache<String,ContentType> cache = new Cache<>(NOCACHE, CACHE_MAX_SIZE);
 
 	/**
 	 * Returns a parsed <code>Content-Type</code> header.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java
index 58313a2..285a698 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java
@@ -55,7 +55,7 @@ public enum HttpMethod {
 	/** A non-standard value. */
 	OTHER;
 
-	private static final Map<String,HttpMethod> cache = new TreeMap<String,HttpMethod>(String.CASE_INSENSITIVE_ORDER);
+	private static final Map<String,HttpMethod> cache = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
 	static {
 		cache.put("OPTIONS", OPTIONS);
 		cache.put("GET", GET);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaType.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaType.java
index 6f9c3db..4745c64 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaType.java
@@ -36,11 +36,10 @@ import org.apache.juneau.json.*;
  * </ul>
  */
 @BeanIgnore
-@SuppressWarnings("unchecked")
 public class MediaType implements Comparable<MediaType> {
 
 	private static final boolean nocache = Boolean.getBoolean("juneau.nocache");
-	private static final ConcurrentHashMap<String,MediaType> cache = new ConcurrentHashMap<String,MediaType>();
+	private static final ConcurrentHashMap<String,MediaType> cache = new ConcurrentHashMap<>();
 
 	/** Reusable predefined media type */
 	@SuppressWarnings("javadoc")
@@ -135,20 +134,20 @@ public class MediaType implements Comparable<MediaType> {
 		this.hasSubtypeMeta = b.hasSubtypeMeta;
 	}
 
-	private static class Builder {
+	static class Builder {
 		private String mediaType, type, subType;
 		private String[] subTypes, subTypesSorted;
 		private Map<String,Set<String>> parameters;
 		private boolean hasSubtypeMeta;
 
-		private Builder(String mt) {
+		Builder(String mt) {
 			mt = mt.trim();
 
 			int i = mt.indexOf(';');
 			if (i == -1) {
 				this.parameters = Collections.EMPTY_MAP;
 			} else {
-				this.parameters = new TreeMap<String,Set<String>>();
+				this.parameters = new TreeMap<>();
 				String[] tokens = mt.substring(i+1).split(";");
 
 				for (int j = 0; j < tokens.length; j++) {

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaTypeRange.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaTypeRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaTypeRange.java
index 0cdfd99..8d1ce59 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaTypeRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/MediaTypeRange.java
@@ -78,7 +78,7 @@ public final class MediaTypeRange implements Comparable<MediaTypeRange>  {
 		if (value.indexOf(',') == -1)
 			return new MediaTypeRange[]{new MediaTypeRange(value)};
 
-		Set<MediaTypeRange> ranges = new TreeSet<MediaTypeRange>();
+		Set<MediaTypeRange> ranges = new TreeSet<>();
 
 		for (String r : StringUtils.split(value)) {
 			r = r.trim();
@@ -92,7 +92,6 @@ public final class MediaTypeRange implements Comparable<MediaTypeRange>  {
 		return ranges.toArray(new MediaTypeRange[ranges.size()]);
 	}
 
-	@SuppressWarnings("unchecked")
 	private MediaTypeRange(String token) {
 		Builder b = new Builder(token);
 		this.mediaType = b.mediaType;
@@ -100,12 +99,12 @@ public final class MediaTypeRange implements Comparable<MediaTypeRange>  {
 		this.extensions = (b.extensions == null ? Collections.EMPTY_MAP : Collections.unmodifiableMap(b.extensions));
 	}
 
-	private static class Builder {
-		private MediaType mediaType;
-		private Float qValue = 1f;
-		private Map<String,Set<String>> extensions;
+	static class Builder {
+		MediaType mediaType;
+		Float qValue = 1f;
+		Map<String,Set<String>> extensions;
 
-		private Builder(String token) {
+		Builder(String token) {
 
 			token = token.trim();
 
@@ -129,7 +128,7 @@ public final class MediaTypeRange implements Comparable<MediaTypeRange>  {
 						String k = parm[0], v = parm[1];
 						if (isInExtensions) {
 							if (extensions == null)
-								extensions = new TreeMap<String,Set<String>>();
+								extensions = new TreeMap<>();
 							if (! extensions.containsKey(k))
 								extensions.put(k, new TreeSet<String>());
 							extensions.get(k).add(v);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java
index 593a02d..9ae0bea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StringRange.java
@@ -85,7 +85,7 @@ public final class StringRange implements Comparable<StringRange>  {
 		if (value.indexOf(',') == -1)
 			return new StringRange[]{new StringRange(value)};
 
-		Set<StringRange> ranges = new TreeSet<StringRange>();
+		Set<StringRange> ranges = new TreeSet<>();
 
 		for (String r : StringUtils.split(value)) {
 			r = r.trim();
@@ -99,7 +99,6 @@ public final class StringRange implements Comparable<StringRange>  {
 		return ranges.toArray(new StringRange[ranges.size()]);
 	}
 
-	@SuppressWarnings("unchecked")
 	private StringRange(String token) {
 		Builder b = new Builder(token);
 		this.type = b.type;
@@ -136,7 +135,7 @@ public final class StringRange implements Comparable<StringRange>  {
 						String k = parm[0], v = parm[1];
 						if (isInExtensions) {
 							if (extensions == null)
-								extensions = new TreeMap<String,Set<String>>();
+								extensions = new TreeMap<>();
 							if (! extensions.containsKey(k))
 								extensions.put(k, new TreeSet<String>());
 							extensions.get(k).add(v);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/TE.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/TE.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/TE.java
index 282f891..e944191 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/TE.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/TE.java
@@ -93,7 +93,7 @@ import org.apache.juneau.internal.*;
  */
 public final class TE extends HeaderRangeArray {
 
-	private static final Cache<String,TE> cache = new Cache<String,TE>(NOCACHE, CACHE_MAX_SIZE);
+	private static final Cache<String,TE> cache = new Cache<>(NOCACHE, CACHE_MAX_SIZE);
 
 	/**
 	 * Returns a parsed <code>Accept</code> header.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java
index 9221bff..7181ed2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java
@@ -231,7 +231,7 @@ public final class ArrayUtils {
 	 */
 	@SuppressWarnings("unchecked")
 	public static <T> List<T> toList(Object array, Class<T> componentType) {
-		List<T> l = new ArrayList<T>(Array.getLength(array));
+		List<T> l = new ArrayList<>(Array.getLength(array));
 		for (int i = 0; i < Array.getLength(array); i++)
 			l.add((T)Array.get(array, i));
 		return l;
@@ -370,7 +370,7 @@ public final class ArrayUtils {
 	 * @return A new list of objects copied from the iterable.
 	 */
 	public static List<?> toList(Iterable<?> i) {
-		List<Object> l = new ArrayList<Object>();
+		List<Object> l = new ArrayList<>();
 		Iterator<?> i2 = i.iterator();
 		while (i2.hasNext())
 			l.add(i2.next());

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ByteArrayCache.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ByteArrayCache.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ByteArrayCache.java
index 0dde655..dc90746 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ByteArrayCache.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ByteArrayCache.java
@@ -29,7 +29,7 @@ public class ByteArrayCache {
 	 */
 	public static final ByteArrayCache DEFAULT = new ByteArrayCache();
 
-	private final ConcurrentHashMap<ByteArray,byte[]> cache = new ConcurrentHashMap<ByteArray,byte[]>();
+	private final ConcurrentHashMap<ByteArray,byte[]> cache = new ConcurrentHashMap<>();
 
 	/**
 	 * Add the specified byte array to this cache.
@@ -73,11 +73,11 @@ public class ByteArrayCache {
 		return cache.size();
 	}
 
-	private static class ByteArray {
-		private int hashCode;
-		private byte[] contents;
+	static final class ByteArray {
+		int hashCode;
+		byte[] contents;
 
-		private ByteArray(byte[] contents) {
+		ByteArray(byte[] contents) {
 			this.contents = contents;
 			int multiplier = 1;
 			for (int i = 0; i < contents.length; i++) {

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/Cache.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/Cache.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/Cache.java
index e811bf5..65bf6f6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/Cache.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/Cache.java
@@ -38,7 +38,7 @@ public class Cache<K,V> {
 		this.nocache = disabled;
 		this.maxSize = maxSize;
 		if (! nocache)
-			cache = new ConcurrentHashMap<K,V>();
+			cache = new ConcurrentHashMap<>();
 		else
 			cache = null;
 	}

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
index a42684c..8ee3811 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
@@ -200,8 +200,8 @@ public final class ClassUtils {
 	}
 
 	private final static Map<Class<?>, Class<?>>
-		pmap1 = new HashMap<Class<?>, Class<?>>(),
-		pmap2 = new HashMap<Class<?>, Class<?>>();
+		pmap1 = new HashMap<>(),
+		pmap2 = new HashMap<>();
 	static {
 		pmap1.put(boolean.class, Boolean.class);
 		pmap1.put(byte.class, Byte.class);
@@ -450,7 +450,7 @@ public final class ClassUtils {
 	public static Class<?> resolveParameterType(Class<?> c, int index, Class<?> oc) {
 
 		// We need to make up a mapping of type names.
-		Map<Type,Type> typeMap = new HashMap<Type,Type>();
+		Map<Type,Type> typeMap = new HashMap<>();
 		while (c != oc.getSuperclass()) {
 			extractTypes(typeMap, oc);
 			oc = oc.getSuperclass();
@@ -477,12 +477,12 @@ public final class ClassUtils {
 
 		} else if (actualType instanceof TypeVariable) {
 			TypeVariable<?> typeVariable = (TypeVariable<?>)actualType;
-			List<Class<?>> nestedOuterTypes = new LinkedList<Class<?>>();
+			List<Class<?>> nestedOuterTypes = new LinkedList<>();
 			for (Class<?> ec = oc.getEnclosingClass(); ec != null; ec = ec.getEnclosingClass()) {
 				try {
 					Class<?> outerClass = oc.getClass();
 					nestedOuterTypes.add(outerClass);
-					Map<Type,Type> outerTypeMap = new HashMap<Type,Type>();
+					Map<Type,Type> outerTypeMap = new HashMap<>();
 					extractTypes(outerTypeMap, outerClass);
 					for (Map.Entry<Type,Type> entry : outerTypeMap.entrySet()) {
 						Type key = entry.getKey(), value = entry.getValue();
@@ -820,7 +820,7 @@ public final class ClassUtils {
 				if (con != null)
 					return (T)con.newInstance(args);
 				if (outer != null) {
-					Object[] args2 = new AList<Object>().append(outer).appendAll(args).toArray();
+					Object[] args2 = new AList<>().append(outer).appendAll(args).toArray();
 					con = findPublicConstructor(c3, args2);
 					if (con != null)
 						return (T)con.newInstance(args2);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
index ce3bccf..1e76346 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
@@ -28,12 +28,12 @@ public class CollectionUtils {
 	public static <K,V> LinkedHashMap<K,V> reverse(Map<K,V> in) {
 		if (in == null)
 			return null;
-		LinkedHashMap<K,V> m = new LinkedHashMap<K,V>();
+		LinkedHashMap<K,V> m = new LinkedHashMap<>();
 
 		// Note:  Entry objects are reusable in an entry set, so we simply can't
 		// create a reversed iteration of that set.
-		List<K> keys = new ArrayList<K>(in.keySet());
-		List<V> values = new ArrayList<V>(in.values());
+		List<K> keys = new ArrayList<>(in.keySet());
+		List<V> values = new ArrayList<>(in.values());
 		for (int i = in.size()-1; i >= 0; i--)
 			m.put(keys.get(i), values.get(i));
 

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
index bf07973..63ad26a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
@@ -185,8 +185,8 @@ public final class DateUtils {
 			final SoftReference<Map<String,SimpleDateFormat>> ref = THREADLOCAL_FORMATS.get();
 			Map<String,SimpleDateFormat> formats = ref.get();
 			if (formats == null) {
-				formats = new HashMap<String,SimpleDateFormat>();
-				THREADLOCAL_FORMATS.set(new SoftReference<Map<String,SimpleDateFormat>>(formats));
+				formats = new HashMap<>();
+				THREADLOCAL_FORMATS.set(new SoftReference<>(formats));
 			}
 			SimpleDateFormat format = formats.get(pattern);
 			if (format == null) {

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
index 69563f3..8b41f09 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
@@ -92,7 +92,7 @@ public class DelegateBeanMap<T> extends BeanMap<T> {
 
 	@Override /* BeanMap */
 	public BeanMeta<T> getMeta() {
-		return new BeanMetaFiltered<T>(super.getMeta(), keys);
+		return new BeanMetaFiltered<>(super.getMeta(), keys);
 	}
 
 	@Override /* Map */
@@ -113,7 +113,7 @@ public class DelegateBeanMap<T> extends BeanMap<T> {
 
 	@Override /* BeanMap */
 	public Collection<BeanPropertyMeta> getProperties() {
-		List<BeanPropertyMeta> l = new ArrayList<BeanPropertyMeta>(keys.size());
+		List<BeanPropertyMeta> l = new ArrayList<>(keys.size());
 		for (final String key : keys) {
 			BeanPropertyMeta p = this.getPropertyMeta(key);
 			if (overrideValues.containsKey(key))
@@ -125,10 +125,10 @@ public class DelegateBeanMap<T> extends BeanMap<T> {
 		return l;
 	}
 
-	private class BeanMapEntryOverride extends BeanMapEntry {
+	final class BeanMapEntryOverride extends BeanMapEntry {
 		Object value;
 
-		private BeanMapEntryOverride(BeanMap<?> bm, BeanPropertyMeta bpm, Object value) {
+		BeanMapEntryOverride(BeanMap<?> bm, BeanPropertyMeta bpm, Object value) {
 			super(bm, bpm, bpm.getName());
 			this.value = value;
 		}

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileReaderBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileReaderBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileReaderBuilder.java
new file mode 100644
index 0000000..0664645
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileReaderBuilder.java
@@ -0,0 +1,116 @@
+// ***************************************************************************************************************************
+// * 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.nio.charset.*;
+
+/**
+ * Utility class for creating {@link FileReader} objects.
+ */
+public final class FileReaderBuilder {
+	
+	private File file;
+	private Charset cs = Charset.defaultCharset();
+	private boolean allowNoFile;
+	
+	/**
+	 * Creates a new builder.
+	 * 
+	 * @return A new builder.
+	 */
+	public static FileReaderBuilder create() {
+		return new FileReaderBuilder();
+	}
+	
+	/**
+	 * Creates a new builder initialized with the specified file.
+	 * 
+	 * @param file The file being written to.
+	 * @return A new builder.
+	 */
+	public static FileReaderBuilder create(File file) {
+		return new FileReaderBuilder().file(file);
+	}
+	
+	/**
+	 * Sets the file being written from.
+	 * 
+	 * @param file The file being written from.
+	 * @return This object (for method chaining).
+	 */
+	public FileReaderBuilder file(File file) {
+		this.file = file;
+		return this;
+	}
+	
+	/**
+	 * Sets the path of the file being written from.
+	 * 
+	 * @param path The path of the file being written from.
+	 * @return This object (for method chaining).
+	 */
+	public FileReaderBuilder file(String path) {
+		this.file = new File(path);
+		return this;
+	}
+	
+	/**
+	 * Sets the character encoding of the file.
+	 * 
+	 * @param cs 
+	 * 	The character encoding.
+	 * 	The default is {@link Charset#defaultCharset()}.  
+	 * @return This object (for method chaining).
+	 */
+	public FileReaderBuilder charset(Charset cs) {
+		this.cs = cs;
+		return this;
+	}
+	
+	/**
+	 * Sets the character encoding of the file.
+	 * 
+	 * @param cs 
+	 * 	The character encoding.
+	 * 	The default is {@link Charset#defaultCharset()}.  
+	 * @return This object (for method chaining).
+	 */
+	public FileReaderBuilder charset(String cs) {
+		this.cs = Charset.forName(cs);
+		return this;
+	}
+	
+	/**
+	 * If called and the file is <jk>null</jk> or non-existent, then the {@link #build()} command will return an empty
+	 * reader instead of a {@link FileNotFoundException}.
+	 * 
+	 * @return This object (for method chaining).
+	 */
+	public FileReaderBuilder allowNoFile() {
+		this.allowNoFile = true;
+		return this;
+	}
+	
+	/**
+	 * Creates a new File reader.
+	 * 
+	 * @return A new File reader. 
+	 * @throws FileNotFoundException If file could not be found.
+	 */
+	public Reader build() throws FileNotFoundException {
+		if (allowNoFile && (file == null || ! file.exists()))
+			return new StringReader("");
+		return new InputStreamReader(new FileInputStream(file), cs);
+	}
+}

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileWriterBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileWriterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileWriterBuilder.java
new file mode 100644
index 0000000..dfb4f6d
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileWriterBuilder.java
@@ -0,0 +1,123 @@
+// ***************************************************************************************************************************
+// * 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.nio.charset.*;
+
+/**
+ * Utility class for creating {@link FileWriter} objects.
+ */
+public final class FileWriterBuilder {
+	
+	private File file;
+	private Charset cs = Charset.defaultCharset();
+	private boolean append;
+	
+	/**
+	 * Creates a new builder.
+	 * 
+	 * @return A new builder.
+	 */
+	public static FileWriterBuilder create() {
+		return new FileWriterBuilder();
+	}
+	
+	/**
+	 * Creates a new builder initialized with the specified file.
+	 * 
+	 * @param file The file being written to.
+	 * @return A new builder.
+	 */
+	public static FileWriterBuilder create(File file) {
+		return new FileWriterBuilder().file(file);
+	}
+
+	/**
+	 * Creates a new builder initialized with the specified file path.
+	 * 
+	 * @param path The file path being written to.
+	 * @return A new builder.
+	 */
+	public static FileWriterBuilder create(String path) {
+		return new FileWriterBuilder().file(path);
+	}
+	
+	/**
+	 * Sets the file being written to.
+	 * 
+	 * @param file The file being written to.
+	 * @return This object (for method chaining).
+	 */
+	public FileWriterBuilder file(File file) {
+		this.file = file;
+		return this;
+	}
+	
+	/**
+	 * Sets the path of the file being written to.
+	 * 
+	 * @param path The path of the file being written to.
+	 * @return This object (for method chaining).
+	 */
+	public FileWriterBuilder file(String path) {
+		this.file = new File(path);
+		return this;
+	}
+	
+	/**
+	 * Sets the character encoding of the file.
+	 * 
+	 * @param cs 
+	 * 	The character encoding.
+	 * 	The default is {@link Charset#defaultCharset()}.  
+	 * @return This object (for method chaining).
+	 */
+	public FileWriterBuilder charset(Charset cs) {
+		this.cs = cs;
+		return this;
+	}
+	
+	/**
+	 * Sets the character encoding of the file.
+	 * 
+	 * @param cs 
+	 * 	The character encoding.
+	 * 	The default is {@link Charset#defaultCharset()}.  
+	 * @return This object (for method chaining).
+	 */
+	public FileWriterBuilder charset(String cs) {
+		this.cs = Charset.forName(cs);
+		return this;
+	}
+	
+	/**
+	 * Sets the append mode on the writer to <jk>true</jk>.
+	 * 
+	 * @return This object (for method chaining).
+	 */
+	public FileWriterBuilder append() {
+		this.append = true;
+		return this;
+	}
+		
+	/**
+	 * Creates a new File writer.
+	 * 
+	 * @return A new File writer. 
+	 * @throws FileNotFoundException If file could not be found.
+	 */
+	public Writer build() throws FileNotFoundException {
+		return new OutputStreamWriter(new FileOutputStream(file, append), cs);
+	}
+}

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FilteredMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FilteredMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FilteredMap.java
index 1321112..41b8633 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FilteredMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FilteredMap.java
@@ -43,11 +43,11 @@ public final class FilteredMap<K,V> extends AbstractMap<K,V> implements Delegate
 
 		this.classMeta = classMeta;
 		this.innerMap = innerMap;
-			List<Map.Entry<K,V>> l = new ArrayList<Map.Entry<K,V>>(keys.length);
+			List<Map.Entry<K,V>> l = new ArrayList<>(keys.length);
 			for (K k : keys)
 				if (innerMap.containsKey(k))
 					l.add(createEntry(k));
-			entries = new ListSet<Map.Entry<K,V>>(l);
+			entries = new ListSet<>(l);
 		}
 
 	private Map.Entry<K,V> createEntry(final K key) {

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java
index c8018bf..a17ae60 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/IOUtils.java
@@ -49,8 +49,9 @@ public final class IOUtils {
 	public static String read(File in) throws IOException {
 		if (in == null || ! in.exists())
 			return null;
-		Reader r = new InputStreamReader(new FileInputStream(in), Charset.defaultCharset());
-		return read(r, 0, 1024);
+		try (Reader r = FileReaderBuilder.create(in).build()) {
+			return read(r, 0, 1024);
+		}
 	}
 
 	/**
@@ -95,11 +96,8 @@ public final class IOUtils {
 	public static int write(File out, Reader in) throws IOException {
 		assertFieldNotNull(out, "out");
 		assertFieldNotNull(in, "in");
-		Writer w = new OutputStreamWriter(new FileOutputStream(out), Charset.defaultCharset());
-		try {
-			return IOPipe.create(in, w).closeOut().run();
-		} finally {
-			w.close();
+		try (Writer w = FileWriterBuilder.create(out).build()) {
+			return IOPipe.create(in, w).run();
 		}
 	}
 
@@ -114,11 +112,8 @@ public final class IOUtils {
 	public static int write(File out, InputStream in) throws IOException {
 		assertFieldNotNull(out, "out");
 		assertFieldNotNull(in, "in");
-		OutputStream os = new FileOutputStream(out);
-		try {
-			return IOPipe.create(in, os).closeOut().run();
-		} finally {
-			os.close();
+		try (OutputStream os = new FileOutputStream(out)) {
+			return IOPipe.create(in, os).run();
 		}
 	}
 
@@ -197,11 +192,8 @@ public final class IOUtils {
 		if (f == null || ! (f.exists() && f.canRead()))
 			return null;
 
-		FileInputStream fis = new FileInputStream(f);
-		try {
+		try (FileInputStream fis = new FileInputStream(f)) {
 			return readBytes(fis, (int)f.length());
-		} finally {
-			fis.close();
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/JuneauLogger.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/JuneauLogger.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/JuneauLogger.java
index cb2344f..93db12a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/JuneauLogger.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/JuneauLogger.java
@@ -39,7 +39,7 @@ public class JuneauLogger extends java.util.logging.Logger {
 		.simple()
 		.build();
 
-	private static final ConcurrentHashMap<Class<?>,String> rbMap = new ConcurrentHashMap<Class<?>,String>();
+	private static final ConcurrentHashMap<Class<?>,String> rbMap = new ConcurrentHashMap<>();
 
 	private final ResourceBundle rb;
 	private final java.util.logging.Logger innerLogger;

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiIterable.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiIterable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiIterable.java
index 38852bb..c283076 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiIterable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiIterable.java
@@ -23,7 +23,7 @@ import java.util.*;
  */
 public class MultiIterable<E> implements Iterable<E> {
 
-	final List<Iterator<E>> iterators = new LinkedList<Iterator<E>>();
+	final List<Iterator<E>> iterators = new LinkedList<>();
 
 	/**
 	 * Constructor.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiSet.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiSet.java
index 32615a7..e79626f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MultiSet.java
@@ -24,7 +24,7 @@ import java.util.*;
 public class MultiSet<E> extends AbstractSet<E> {
 
 	/** Inner collections. */
-	private List<Collection<E>> l = new ArrayList<Collection<E>>();
+	private List<Collection<E>> l = new ArrayList<>();
 
 	/**
 	 * Create a new Set that consists as a coalesced set of the specified collections.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseOutputStream.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseOutputStream.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseOutputStream.java
new file mode 100644
index 0000000..a005e76
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseOutputStream.java
@@ -0,0 +1,60 @@
+// ***************************************************************************************************************************
+// * 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.*;
+
+/**
+ * Wraps an existing {@link OutputStream} where the {@link #close()} method is a no-op.
+ * 
+ * <p>
+ * Useful in cases where you're working with streams that should not be implicitly closed.
+ */
+public final class NoCloseOutputStream extends OutputStream {
+
+	private final OutputStream os;
+	
+	/**
+	 * Constructor.
+	 * 
+	 * @param os The output stream to wrap.
+	 */
+	public NoCloseOutputStream(OutputStream os) {
+		this.os = os;
+	}
+	
+	@Override /* OutputStream */
+	public void write(int b) throws IOException {
+		os.write(b);
+	}
+	
+	@Override /* OutputStream */
+	public void write(byte[] b) throws IOException {
+		os.write(b);
+	}
+	
+	@Override /* OutputStream */
+	public void write(byte[] b, int off, int len) throws IOException {
+		os.write(b, off, len);
+	}
+	
+	@Override /* OutputStream */
+	public void flush() throws IOException {
+		os.flush();
+	}
+	
+	@Override /* OutputStream */
+	public void close() throws IOException {
+		os.flush();
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseWriter.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseWriter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseWriter.java
new file mode 100644
index 0000000..c088879
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/NoCloseWriter.java
@@ -0,0 +1,85 @@
+// ***************************************************************************************************************************
+// * 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.*;
+
+/**
+ * Wraps an existing {@link Writer} where the {@link #close()} method is a no-op.
+ * 
+ * <p>
+ * Useful in cases where you're working with streams that should not be implicitly closed.
+ */
+public final class NoCloseWriter extends Writer {
+
+	private final Writer w;
+	
+	/**
+	 * Constructor.
+	 * 
+	 * @param w The writer to wrap.
+	 */
+	public NoCloseWriter(Writer w) {
+		this.w = w;
+	}
+	
+	@Override /* Writer */
+	public Writer append(char c) throws IOException {
+		return w.append(c);
+	}
+	
+	@Override /* Writer */
+	public Writer append(CharSequence csq) throws IOException {
+		return w.append(csq);
+	}
+	
+	@Override /* Writer */
+	public Writer append(CharSequence csq, int start, int end) throws IOException {
+		return w.append(csq, start, end);
+	}
+	
+	@Override /* Writer */
+	public void close() throws IOException {
+		w.flush();
+	}
+	
+	@Override /* Writer */
+	public void flush() throws IOException {
+		w.flush();
+	}
+	
+	@Override /* Writer */
+	public void write(char[] cbuf) throws IOException {
+		w.write(cbuf);
+	}
+	
+	@Override /* Writer */
+	public void write(char[] cbuf, int off, int len) throws IOException {
+		w.write(cbuf, off, len);
+	}
+	
+	@Override /* Writer */
+	public void write(int c) throws IOException {
+		w.write(c);
+	}
+	
+	@Override /* Writer */
+	public void write(String str) throws IOException {
+		w.write(str);
+	}
+	
+	@Override /* Writer */
+	public void write(String str, int off, int len) throws IOException {
+		w.write(str, off, len);
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReflectionUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReflectionUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReflectionUtils.java
index 644ff3e..6d0e80b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReflectionUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReflectionUtils.java
@@ -84,7 +84,7 @@ public final class ReflectionUtils {
 	 * @return The found matches, or an empty array if annotation was not found.
 	 */
 	public static <T extends Annotation> List<T> findAnnotations(Class<T> a, Class<?> c) {
-		List<T> l = new LinkedList<T>();
+		List<T> l = new LinkedList<>();
 		appendAnnotations(a, c, l);
 		return l;
 	}
@@ -115,7 +115,7 @@ public final class ReflectionUtils {
 	 * @return The found matches, or an empty map if annotation was not found.
 	 */
 	public static <T extends Annotation> LinkedHashMap<Class<?>,T> findAnnotationsMap(Class<T> a, Class<?> c) {
-		LinkedHashMap<Class<?>,T> m = new LinkedHashMap<Class<?>,T>();
+		LinkedHashMap<Class<?>,T> m = new LinkedHashMap<>();
 		findAnnotationsMap(a, c, m);
 		return m;
 	}

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
index 8ad75c8..70109ca 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
@@ -313,10 +313,9 @@ public final class StringUtils {
 	 */
 	public static String getStackTrace(Throwable t) {
 		StringWriter sw = new StringWriter();
-		PrintWriter pw = new PrintWriter(sw);
-		t.printStackTrace(pw);
-		pw.flush();
-		pw.close();
+		try (PrintWriter pw = new PrintWriter(sw)) {
+			t.printStackTrace(pw);
+		}
 		return sw.toString();
 	}
 
@@ -504,7 +503,7 @@ public final class StringUtils {
 		if (s.indexOf(c) == -1)
 			return new String[]{s};
 
-		List<String> l = new LinkedList<String>();
+		List<String> l = new LinkedList<>();
 		char[] sArray = s.toCharArray();
 		int x1 = 0, escapeCount = 0;
 		for (int i = 0; i < sArray.length; i++) {
@@ -534,7 +533,7 @@ public final class StringUtils {
 	public static String[] split(String[] s, char c) {
 		if (s == null)
 			return null;
-		List<String> l = new LinkedList<String>();
+		List<String> l = new LinkedList<>();
 		for (String ss : s) {
 			if (ss == null || ss.indexOf(c) == -1)
 				l.add(ss);
@@ -560,7 +559,6 @@ public final class StringUtils {
 	 * @param trim Trim strings after parsing.
 	 * @return The parsed map.  Never <jk>null</jk>.
 	 */
-	@SuppressWarnings("unchecked")
 	public static Map<String,String> splitMap(String s, char delim, char eq, boolean trim) {
 
 		char[] unEscapeChars = new char[]{'\\', delim, eq};
@@ -570,7 +568,7 @@ public final class StringUtils {
 		if (isEmpty(s))
 			return Collections.EMPTY_MAP;
 
-		Map<String,String> m = new LinkedHashMap<String,String>();
+		Map<String,String> m = new LinkedHashMap<>();
 
 		int
 			S1 = 1,  // Found start of key, looking for equals.
@@ -1212,6 +1210,21 @@ public final class StringUtils {
 		return cs.decode(buff).toString();
 	}
 
+	/**
+	 * Converts a space-deliminted hexadecimal byte stream (e.g. "34 A5 BC") into a UTF-8 encoded string.
+	 *
+	 * @param hex The hexadecimal string.
+	 * @return The UTF-8 string.
+	 */
+	public static String fromSpacedHexToUTF8(String hex) {
+		ByteBuffer buff = ByteBuffer.allocate((hex.length()+1)/3);
+		for (int i = 0; i < hex.length(); i+=3)
+			buff.put((byte)Integer.parseInt(hex.substring(i, i+2), 16));
+		buff.rewind();
+		Charset cs = Charset.forName("UTF-8");
+		return cs.decode(buff).toString();
+	}
+
 	private final static char[] HEX = "0123456789ABCDEF".toCharArray();
 
 	/**
@@ -1222,7 +1235,24 @@ public final class StringUtils {
 	 */
 	public static String toHex(byte[] bytes) {
 		StringBuilder sb = new StringBuilder(bytes.length * 2);
-		for ( int j = 0; j < bytes.length; j++ ) {
+		for (int j = 0; j < bytes.length; j++) {
+			int v = bytes[j] & 0xFF;
+			sb.append(HEX[v >>> 4]).append(HEX[v & 0x0F]);
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Same as {@link #toHex(byte[])} but puts spaces between the byte strings.
+	 *
+	 * @param bytes The bytes to convert to hexadecimal.
+	 * @return A new string consisting of hexadecimal characters.
+	 */
+	public static String toSpacedHex(byte[] bytes) {
+		StringBuilder sb = new StringBuilder(bytes.length * 3);
+		for (int j = 0; j < bytes.length; j++) {
+			if (j > 0)
+				sb.append(' ');
 			int v = bytes[j] & 0xFF;
 			sb.append(HEX[v >>> 4]).append(HEX[v & 0x0F]);
 		}
@@ -1244,6 +1274,20 @@ public final class StringUtils {
 	}
 
 	/**
+	 * Same as {@link #fromHex(String)} except expects spaces between the byte strings.
+	 *
+	 * @param hex The string to convert to a byte array.
+	 * @return A new byte array.
+	 */
+	public static byte[] fromSpacedHex(String hex) {
+		ByteBuffer buff = ByteBuffer.allocate((hex.length()+1)/3);
+		for (int i = 0; i < hex.length(); i+=3)
+			buff.put((byte)Integer.parseInt(hex.substring(i, i+2), 16));
+		buff.rewind();
+		return buff.array();
+	}
+
+	/**
 	 * Creates a repeated pattern.
 	 *
 	 * @param count The number of times to repeat the pattern.

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeOutputStream.java
----------------------------------------------------------------------
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
index 96dfe73..0c312ab 100644
--- 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
@@ -92,7 +92,7 @@ public class TeeOutputStream extends OutputStream {
 	public TeeOutputStream add(String id, OutputStream os, boolean close) {
 		if (id != null) {
 			if (outputStreamMap == null)
-				outputStreamMap = new TreeMap<String,OutputStream>();
+				outputStreamMap = new TreeMap<>();
 			outputStreamMap.put(id, os);
 		}
 		return add(os, close);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/TeeWriter.java
----------------------------------------------------------------------
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
index be48416..d0920e2 100644
--- 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
@@ -79,7 +79,7 @@ public class TeeWriter extends Writer {
 	public TeeWriter add(String id, Writer w, boolean close) {
 		if (id != null) {
 			if (writerMap == null)
-				writerMap = new TreeMap<String,Writer>();
+				writerMap = new TreeMap<>();
 			writerMap.put(id, w);
 		}
 		return add(w, close);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerSession.java
index 5aef62a..83b8c42 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerSession.java
@@ -43,9 +43,8 @@ public class JsoSerializerSession extends OutputStreamSerializerSession {
 
 	@Override /* OutputStreamSerializerSession */
 	protected void doSerialize(SerializerPipe out, Object o) throws Exception {
-		ObjectOutputStream oos = new ObjectOutputStream(out.getOutputStream());
-		oos.writeObject(o);
-		oos.flush();
-		oos.close();
+		try (ObjectOutputStream oos = new ObjectOutputStream(out.getOutputStream())) {
+			oos.writeObject(o);
+		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
index 2373ac2..a5b61e7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
@@ -81,34 +81,37 @@ public final class JsonParserSession extends ReaderParserSession {
 
 	@Override /* ParserSession */
 	protected <T> T doParse(ParserPipe pipe, ClassMeta<T> type) throws Exception {
-		ParserReader r = pipe.getParserReader();
-		if (r == null)
-			return null;
-		T o = parseAnything(type, r, getOuter(), null);
-		validateEnd(r);
-		return o;
+		try (ParserReader r = pipe.getParserReader()) {
+			if (r == null)
+				return null;
+			T o = parseAnything(type, r, getOuter(), null);
+			validateEnd(r);
+			return o;
+		}
 	}
 
 	@Override /* ReaderParserSession */
 	protected <K,V> Map<K,V> doParseIntoMap(ParserPipe pipe, Map<K,V> m, Type keyType, Type valueType) throws Exception {
-		ParserReader r = pipe.getParserReader();
-		m = parseIntoMap2(r, m, (ClassMeta<K>)getClassMeta(keyType), (ClassMeta<V>)getClassMeta(valueType), null);
-		validateEnd(r);
-		return m;
+		try (ParserReader r = pipe.getParserReader()) {
+			m = parseIntoMap2(r, m, (ClassMeta<K>)getClassMeta(keyType), (ClassMeta<V>)getClassMeta(valueType), null);
+			validateEnd(r);
+			return m;
+		}
 	}
 
 	@Override /* ReaderParserSession */
 	protected <E> Collection<E> doParseIntoCollection(ParserPipe pipe, Collection<E> c, Type elementType) throws Exception {
-		ParserReader r = pipe.getParserReader();
-		c = parseIntoCollection2(r, c, getClassMeta(elementType), null);
-		validateEnd(r);
-		return c;
+		try (ParserReader r = pipe.getParserReader()) {
+			c = parseIntoCollection2(r, c, getClassMeta(elementType), null);
+			validateEnd(r);
+			return c;
+		}
 	}
 
 	private <T> T parseAnything(ClassMeta<?> eType, ParserReader r, Object outer, BeanPropertyMeta pMeta) throws Exception {
 
 		if (eType == null)
-			eType = (ClassMeta<T>)object();
+			eType = object();
 		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getPojoSwap(this);
 		ClassMeta<?> sType = swap == null ? eType : swap.getSwapClassMeta(this);
 		setCurrentClass(sType);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java
index 9a782ae..9ca88ea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java
@@ -120,7 +120,7 @@ public class JsonSchemaSerializerSession extends JsonSerializerSession {
 
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	private static List<String> getEnumStrings(Class<? extends Enum> c) {
-		List<String> l = new LinkedList<String>();
+		List<String> l = new LinkedList<>();
 		for (Object e : EnumSet.allOf(c))
 			l.add(e.toString());
 		return l;

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
index e559bb2..1361437 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
@@ -45,9 +45,9 @@ public final class MsgPackParserSession extends InputStreamParserSession {
 
 	@Override /* ParserSession */
 	protected <T> T doParse(ParserPipe pipe, ClassMeta<T> type) throws Exception {
-		MsgPackInputStream is = new MsgPackInputStream(pipe);
-		T o = parseAnything(type, is, getOuter(), null);
-		return o;
+		try (MsgPackInputStream is = new MsgPackInputStream(pipe)) {
+			return parseAnything(type, is, getOuter(), null);
+		}
 	}
 
 	/*
@@ -56,7 +56,7 @@ public final class MsgPackParserSession extends InputStreamParserSession {
 	private <T> T parseAnything(ClassMeta<?> eType, MsgPackInputStream is, Object outer, BeanPropertyMeta pMeta) throws Exception {
 
 		if (eType == null)
-			eType = (ClassMeta<T>)object();
+			eType = object();
 		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getPojoSwap(this);
 		ClassMeta<?> sType = swap == null ? eType : swap.getSwapClassMeta(this);
 		setCurrentClass(sType);

http://git-wip-us.apache.org/repos/asf/juneau/blob/d1258753/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
index 5bf892c..28b0d31 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
@@ -169,7 +169,7 @@ public final class MsgPackSerializerSession extends OutputStreamSerializerSessio
 
 		// The map size may change as we're iterating over it, so
 		// grab a snapshot of the entries in a separate list.
-		List<SimpleMapEntry> entries = new ArrayList<SimpleMapEntry>(m.size());
+		List<SimpleMapEntry> entries = new ArrayList<>(m.size());
 		for (Map.Entry e : (Set<Map.Entry>)m.entrySet())
 			entries.add(new SimpleMapEntry(e.getKey(), e.getValue()));
 
@@ -209,11 +209,11 @@ public final class MsgPackSerializerSession extends OutputStreamSerializerSessio
 		}
 	}
 
-	private static class SimpleMapEntry {
+	final static class SimpleMapEntry {
 		final Object key;
 		final Object value;
 
-		private SimpleMapEntry(Object key, Object value) {
+		SimpleMapEntry(Object key, Object value) {
 			this.key = key;
 			this.value = value;
 		}
@@ -223,7 +223,7 @@ public final class MsgPackSerializerSession extends OutputStreamSerializerSessio
 	private void serializeCollection(MsgPackOutputStream out, Collection c, ClassMeta<?> type) throws Exception {
 
 		ClassMeta<?> elementType = type.getElementType();
-		List<Object> l = new ArrayList<Object>(c.size());
+		List<Object> l = new ArrayList<>(c.size());
 
 		c = sort(c);
 		l.addAll(c);