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/09/03 14:37:09 UTC

[1/2] incubator-juneau git commit: Add PojoMerge class.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master a7104d8ae -> e5f46938c


Add PojoMerge class.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/fffaec49
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/fffaec49
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/fffaec49

Branch: refs/heads/master
Commit: fffaec491a02040dd0e7609edcb6bf01304ec7b0
Parents: a7104d8
Author: JamesBognar <ja...@apache.org>
Authored: Sun Sep 3 10:36:16 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Sun Sep 3 10:36:16 2017 -0400

----------------------------------------------------------------------
 .../org/apache/juneau/utils/PojoMergeTest.java  |  86 +++++++++++
 .../java/org/apache/juneau/utils/PojoMerge.java | 142 +++++++++++++++++++
 .../doc-files/ReleaseNotes_632_DarkStyle.png    | Bin 0 -> 221326 bytes
 3 files changed, 228 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fffaec49/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoMergeTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoMergeTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoMergeTest.java
new file mode 100644
index 0000000..7698e5a
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/utils/PojoMergeTest.java
@@ -0,0 +1,86 @@
+// ***************************************************************************************************************************
+// * 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.junit.Assert.*;
+
+import org.junit.*;
+
+/**
+ * Test the PojoMerge class.
+ */
+public class PojoMergeTest {
+
+	//====================================================================================================
+	// Basic tests
+	//====================================================================================================
+	@Test
+	public void basicTests() throws Exception {
+		IA a1, a2, am;
+		
+		a1 = new A("1"); a2 = new A("2");
+		am = PojoMerge.merge(IA.class, a1, a2);
+		assertEquals("1", am.getA());
+		am.setA("x");
+		assertEquals("x", am.getA());
+		assertEquals("x", a1.getA());
+		assertEquals("2", a2.getA());
+
+		a1 = new A("1"); a2 = new A("2");
+		am = PojoMerge.merge(IA.class, true, a1, a2);
+		assertEquals("1", am.getA());
+		am.setA("x");
+		assertEquals("x", am.getA());
+		assertEquals("x", a1.getA());
+		assertEquals("x", a2.getA());
+		
+		a1 = new A(null); a2 = new A("2");
+		am = PojoMerge.merge(IA.class, a1, a2);
+		assertEquals("2", am.getA());
+		am.setA("x");
+		assertEquals("x", am.getA());
+		assertEquals("x", a1.getA());
+		assertEquals("2", a2.getA());
+		
+		a1 = new A(null); a2 = new A(null);
+		am = PojoMerge.merge(IA.class, a1, a2);
+		assertEquals(null, am.getA());
+		
+		a1 = new A(null); a2 = new A("2");
+		am = PojoMerge.merge(IA.class, null, a1, null, null, a2, null);
+		assertEquals("2", am.getA());
+	}
+
+	public static interface IA {
+		String getA();
+		void setA(String a);
+	}
+
+	public static class A implements IA {
+		private String a;
+
+		public A(String a) {
+			this.a = a;
+		}
+
+		@Override
+		public String getA() {
+			return a;
+		}
+
+		@Override
+		public void setA(String a) {
+			this.a = a;
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fffaec49/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoMerge.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoMerge.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoMerge.java
new file mode 100644
index 0000000..7f90048
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoMerge.java
@@ -0,0 +1,142 @@
+// ***************************************************************************************************************************
+// * 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.lang.reflect.*;
+
+/**
+ * Utility class for merging POJOs behind a single interface.
+ *
+ * <p>
+ * Useful in cases where you want to define beans with 'default' values.
+ *
+ * <p>
+ * For example, given the following bean classes...
+ *
+ * <p class='bcode'>
+ * 	<jk>public interface</jk> IA {
+ * 		String getX();
+ * 		<jk>void</jk> setX(String x);
+ * 	}
+ *
+ * 	<jk>public class</jk> A <jk>implements</jk> IA {
+ * 		<jk>private</jk> String <jf>x</jf>;
+ *
+ * 		<jk>public</jk> A(String x) {
+ * 			<jk>this</jk>.<jf>x</jf> = x;
+ * 		}
+ *
+ * 		<jk>public</jk> String getX() {
+ * 			<jk>return</jk> <jf>x</jf>;
+ * 		}
+ *
+ * 		<jk>public void</jk> setX(String x) {
+ * 			<jk>this</jk>.<jf>x</jf> = x;
+ * 		}
+ * 	}
+ * </p>
+ *
+ * <p>
+ * The getters will be called in order until the first non-null value is returned...
+ *
+ * <p class='bcode'>
+ * 	PojoMerge m;
+ *
+ * 	m = PojoMerge.<jsm>merge</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<js>"1"</js>), <jk>new</jk> A(<js>"2"</js>));
+ * 	<jsm>assertEquals</jsm>(<js>"1"</js>, m.getX());
+ *
+ * 	m = PojoMerge.<jsm>merge</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<jk>null</jk>), <jk>new</jk> A(<js>"2"</js>));
+ * 	<jsm>assertEquals</jsm>(<js>"2"</js>, m.getX());
+ *
+ * 	m = PojoMerge.<jsm>merge</jsm>(IA.<jk>class</jk>, <jk>new</jk> A(<jk>null</jk>), <jk>new</jk> A(<jk>null</jk>));
+ * 	<jsm>assertEquals</jsm>(<jk>null</jk>, m.getX());
+ * </p>
+ *
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * 	<li>Null POJOs are ignored.
+ * 	<li>Non-getter methods are either invoked on the first POJO or all POJOs depending on the <code>callAllNonGetters</code> flag
+ * 		passed into the constructor.
+ * 	<li>For purposes of this interface, a getter is any method with zero arguments and a non-<code>void</code> return type.
+ * </ul>
+ */
+public class PojoMerge {
+
+	/**
+	 * Create a proxy interface on top of zero or more POJOs.
+	 *
+	 * <p>
+	 * This is a shortcut to calling <code>merge(interfaceClass, <jk>false</jk>, pojos);</code>
+	 *
+	 * @param interfaceClass The common interface class.
+	 * @param pojos
+	 * 	Zero or more POJOs to merge.
+	 * 	<br>Can contain nulls.
+	 * @return A proxy interface over the merged POJOs.
+	 */
+	public static <T> T merge(Class<T> interfaceClass, T...pojos) {
+		return merge(interfaceClass, false, pojos);
+	}
+
+	/**
+	 * Create a proxy interface on top of zero or more POJOs.
+	 *
+	 * @param interfaceClass The common interface class.
+	 * @param callAllNonGetters
+	 * 	If <jk>true</jk>, when calling a method that's not a getter, the method will be invoked on all POJOs.
+	 * 	<br>Otherwise, the method will only be called on the first POJO.
+	 * @param pojos
+	 * 	Zero or more POJOs to merge.
+	 * 	<br>Can contain nulls.
+	 * @return A proxy interface over the merged POJOs.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T merge(Class<T> interfaceClass, boolean callAllNonGetters, T...pojos) {
+		return (T)Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class[] { interfaceClass }, new PojoMergeInvocationHandler(callAllNonGetters, pojos));
+	}
+
+	private static class PojoMergeInvocationHandler implements InvocationHandler {
+		private final Object[] pojos;
+		private final boolean callAllNonGetters;
+
+		public PojoMergeInvocationHandler(boolean callAllNonGetters, Object...pojos) {
+			this.callAllNonGetters = callAllNonGetters;
+			this.pojos = pojos;
+		}
+
+		/**
+		 * Implemented to handle the method called.
+		 * @throws InvocationTargetException
+		 * @throws IllegalAccessException
+		 * @throws IllegalArgumentException
+		 */
+		@Override /* InvocationHandler */
+		public Object invoke(Object proxy, Method method, Object[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+			Object r = null;
+			boolean isGetter = args == null && method.getReturnType() != Void.class;
+			for (Object pojo : pojos) {
+				if (pojo != null) {
+					r = method.invoke(pojo, args);
+					if (isGetter) {
+						if (r != null)
+							return r;
+					} else {
+						if (! callAllNonGetters)
+							return r;
+					}
+				}
+			}
+			return r;
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/fffaec49/juneau-core/juneau-marshall/src/main/javadoc/doc-files/ReleaseNotes_632_DarkStyle.png
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/javadoc/doc-files/ReleaseNotes_632_DarkStyle.png b/juneau-core/juneau-marshall/src/main/javadoc/doc-files/ReleaseNotes_632_DarkStyle.png
new file mode 100644
index 0000000..73732dc
Binary files /dev/null and b/juneau-core/juneau-marshall/src/main/javadoc/doc-files/ReleaseNotes_632_DarkStyle.png differ


[2/2] incubator-juneau git commit: Fix javadocs.

Posted by ja...@apache.org.
Fix javadocs.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/e5f46938
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/e5f46938
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/e5f46938

Branch: refs/heads/master
Commit: e5f46938c4f89f634b9d938ea233116efb5be157
Parents: fffaec4
Author: JamesBognar <ja...@apache.org>
Authored: Sun Sep 3 10:37:05 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Sun Sep 3 10:37:05 2017 -0400

----------------------------------------------------------------------
 .../src/main/javadoc/overview.html              | 220 +++++++++++++++++--
 1 file changed, 205 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/e5f46938/juneau-core/juneau-marshall/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/javadoc/overview.html b/juneau-core/juneau-marshall/src/main/javadoc/overview.html
index 003ef97..03fed7b 100644
--- a/juneau-core/juneau-marshall/src/main/javadoc/overview.html
+++ b/juneau-core/juneau-marshall/src/main/javadoc/overview.html
@@ -5036,7 +5036,7 @@
 		* [OPTIONS /*] 
 		* View resource options 
 		*/</jd> 
-		<ja>@Override</ja> /* RestServletJenaDefault */ 
+		<ja>@Override</ja> /* RestServletDefault */ 
 		<ja>@RestMethod</ja>(name=<js>"OPTIONS"</js>, path=<js>"/*"</js>) 
 		<jk>public</jk> Swagger getOptions(RestRequest req) { 
 			<jk>return</jk> req.getSwagger(); 
@@ -6814,9 +6814,187 @@
 	<h3 class='topic' onclick='toggle(this)'>6.3.2 (TBD)</h3>
 	<div class='topic'>
 		<p>
+			The major change in this release is the project structure
 		</p>
+		<p>
+			The library now consists of the following artifacts found in the Maven group <code>"org.apache.juneau"</code>:
+		</p>
+		<table class='styled' style='min-width:800px;'>
+			<tr>
+				<th>Category</th><th>Maven Artifacts</th><th>Description</th><th>Prereqs</th>
+			</tr>
+			<tr class='dark bb'>
+				<td rowspan="5" style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' href='#JuneauCore'>Juneau Core</a></td>
+				<td class='code'><a class='doclink' href='#juneau-marshall'>juneau-marshall</a></td>
+				<td>Serializers and parsers for:
+					<ul style='margin:0px 10px;'>
+						<li>JSON
+						<li>XML
+						<li>HTML
+						<li>UON
+						<li>URL-Encoding
+						<li>MessagePack
+						<li>SOAP/XML
+						<li>CSV
+						<li>BSON (coming soon)
+						<li>YAML (coming soon)
+						<li>Protobuf (coming soon)
+					</ul>
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 6
+					</ul>
+				</td>
+			</tr>
+			<tr class='dark bb'>
+				<td class='code'><a class='doclink' href='#juneau-marshall-rdf'>juneau-marshall-rdf</a></td>
+				<td>
+					Serializers and parsers for:
+					<ul style='margin:0px 10px;'>
+						<li>RDF/XML
+						<li>RDF/XML-Abbrev 
+						<li>N-Triple
+						<li>Turtle
+						<li>N3
+					</ul>				
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 6
+						<li>Apache Jena 2.7.1
+					</ul>
+				</td>
+			</tr>
+			<tr class='dark bb'>
+				<td class='code'><a class='doclink' href='#juneau-dto'>juneau-dto</a></td>
+				<td>
+					Data Transfer Objects for:
+					<ul style='margin:0px 10px;'>
+						<li>HTML5
+						<li>Atom
+						<li>Cognos
+						<li>JSON-Schema
+						<li>Swagger 2.0
+					</ul>				
+				</td>
+				<td><ul style='margin:0px 10px;'><li>Java 6</li></ul></td>
+			</tr>
+			<tr class='dark bb'>
+				<td class='code'><a class='doclink' href='#juneau-svl'>juneau-svl</a></td>
+				<td>
+					Simple Variable Language API
+				</td>
+				<td><ul style='margin:0px 10px;'><li>Java 6</li></ul></td>
+			</tr>
+			<tr class='dark bb'>
+				<td class='code'><a class='doclink' href='#juneau-config'>juneau-config</a></td>
+				<td>
+					Configuration file API
+				</td>
+				<td><ul style='margin:0px 10px;'><li>Java 6</li></ul></td>
+			</tr>
+			<tr class='light bb'>
+				<td rowspan="5" style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' href='#JuneauRest'>Juneau REST</a></td>
+				<td class='code'><a class='doclink' href='#juneau-rest-server'>juneau-rest-server</a></td>
+				<td>
+					REST Servlet API
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 6
+						<li>Servlet 3.1
+					</ul>
+				</td>
+			</tr>
+			<tr class='light bb'>
+				<td class='code'><a class='doclink' href='#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></td>
+				<td>
+					Optional JAX-RS support
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 6
+						<li>JAX-RS 2.0
+					</ul>
+				</td>
+			</tr>
+			<tr class='light bb'>
+				<td class='code'><a class='doclink' href='#juneau-rest-client'>juneau-rest-client</a></td>
+				<td>
+					REST Client API
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 6
+						<li>Apache HttpClient 4.5
+					</ul>
+				</td>
+			</tr>
+			<tr class='light bb'>
+				<td class='code'><a class='doclink' href='#juneau-microservice'>juneau-microservice</a></td>
+				<td>
+					REST Microservice API
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 8
+						<li>Eclipse Jetty 9.4.3
+					</ul>
+				</td>
+			</tr>
+			<tr class='light bb'>
+				<td class='code'><a class='doclink' href='#juneau-microservice-template'>juneau-microservice-template</a></td>
+				<td>
+					Developer template project
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 8
+						<li>Eclipse Jetty 9.4.3
+					</ul>
+				</td>
+			</tr>
+			<tr class='dark bb'>
+				<td rowspan="2" style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' href='#Examples'>Examples</a></td>
+				<td class='code'><code>juneau-examples-core</code></td>
+				<td>
+					Core code examples
+				</td>
+				<td></td>
+			</tr>
+			<tr class='dark bb'>
+				<td class='code'><code>juneau-examples-rest</code></td>
+				<td>
+					REST code examples
+				</td>
+				<td></td>
+			</tr>
+			<tr class='light bb'>
+				<td rowspan="1" style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' href='#JuneauAll'>Juneau All</a></td>
+				<td class='code'><code>juneau-all</code></td>
+				<td>
+					Combination of the following:
+					<ul style='margin:0px 10px;'>
+						<li>juneau-marshall
+						<li>juneau-dto
+						<li>juneau-svl
+						<li>juneau-config
+						<li>juneau-rest-server
+						<li>juneau-rest-client
+					</ul>
+				</td>
+				<td>
+					<ul style='margin:0px 10px;'>
+						<li>Java 6
+						<li>Servlet 3.1
+						<li>Apache HttpClient 4.5
+					</ul>
+				</td>
+			</tr>
+		</table>
 
-		<h6 class='topic'>org.apache.juneau</h6>
+		<h6 class='topic'>juneau-marshall</h6>
 		<ul class='spaced-list'>
 			<li>
 				Serializers can now serialize to {@link java.util.StringBuilder StringBuilders}.
@@ -6862,9 +7040,6 @@
 				</p>
 				This is mostly an internal change and doesn't affect the existing APIs.
 			<li>
-				{@link org.apache.juneau.dto.html5.HtmlElementMixed#children(Object...)} can now take in collections
-				of objects.
-			<li>
 				{@link org.apache.juneau.transform.PojoSwap#swap(BeanSession,Object)} and {@link org.apache.juneau.transform.PojoSwap#unswap(BeanSession,Object,ClassMeta)} 
 				can now throw arbitrary exceptions instead of having to wrap them in <code>SerializeException</code>/<code>ParseException</code>.
 			<li>
@@ -6912,12 +7087,22 @@
 				the call to <code>getClass()</code> to retrieve the annotation value could not be called before calling
 				the <code><jk>super</jk>()</code> method.
 			<li>
+				New class: {@link org.apache.juneau.utils.PojoMerge}
+			<li>
 				New doc: <a class='doclink' href='#Core.PojoAnnotation'>2.6.2 - @Pojo annotation</a>
 			<li>
 				New doc: <a class='doclink' href='#Core.SerializingReadersAndInputStreams'>2.6.5 - Serializing Readers and InputStreams</a>
 		</ul>
 		
-		<h6 class='topic'>org.apache.juneau.rest</h6>
+		<h6 class='topic'>juneau-dto</h6>
+		<ul class='spaced-list'>
+			<li>
+				{@link org.apache.juneau.dto.html5.HtmlElementMixed#children(Object...)} can now take in collections
+				of objects.
+		</ul>
+
+
+		<h6 class='topic'>juneau-rest-server</h6>
 		<ul class='spaced-list'>
 			<li>
 				Revamped and simplified servlet and REST-call lifecycle handling through new
@@ -6977,9 +7162,14 @@
 				Stylesheet selection now stored in HTTP session when passed in via <code>?stylesheet</code> query parameter.
 			<li>
 				New doc: <a class='doclink' href='/org/apache/juneau/rest/package-summary.html#RestResources.RestHooks'>Lifecycle Hooks</a>
+			<li>
+				Eliminated the <code>RestServletJenaDefault</code> class to remove the Jena dependency class on 
+				the <code>juneau-rest-server</code> artifact. 
+				<br>It's simple enough to simply extend <code>RestServletDefault</code> and add the RDF serializers and
+				parsers.
 		</ul>
 
-		<h6 class='topic'>org.apache.juneau.rest.microservice</h6>
+		<h6 class='topic'>juneau-microservice</h6>
 		<ul class='spaced-list'>
 			<li>
 				New methods on {@link org.apache.juneau.microservice.RestMicroservice}:
@@ -8748,7 +8938,7 @@
 					<li><code><del>RestServlet.getConfigMgr()</del></code>
 				</ul>
 			<li>Removed {@link org.apache.juneau.jso.JsoParser}
-				from {@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault}.  
+				from {@link org.apache.juneau.rest.RestServletDefault} and <code><del>RestServletJenaDefault</del></code>.  
 				These may represent a security risk if not handled correctly, so removed
 				them as a precaution.
 			<li>Removed <code>RestServletProperties.REST_htDocsFolder</code>.  Replaced with {@link org.apache.juneau.rest.annotation.RestResource#staticFiles()}.
@@ -9073,13 +9263,13 @@
 					<li><code>$E{var}</code> - Environment variables.
 				</ul>
 			<li>Added methods <code><del>RestServlet.getDescription(RestRequest)</del></code> and <del><code>RestServlet.getLabel(RestRequest)</code></del>.
-			<li>{@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault} now provide default HTML titles
+			<li>{@link org.apache.juneau.rest.RestServletDefault} and <code><del>RestServletJenaDefault</del></code> now provide default HTML titles
 				and descriptions:
 				<p class='bcode'>
 	<ja>@Property</ja>(name=<jsf>HTMLDOC_title</jsf>, value=<js>"$R{servletTitle}"</js>),
 	<ja>@Property</ja>(name=<jsf>HTMLDOC_description</jsf>, value=<js>"$R{servletDescription}"</js>)
 				</p>
-			<li>Options pages on {@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault} now provide default descriptions and back links:
+			<li>Options pages on {@link org.apache.juneau.rest.RestServletDefault} and <code><del>RestServletJenaDefault</del></code> now provide default descriptions and back links:
 				and descriptions:
 				<p class='bcode'>
 	<ja>@Property</ja>(name=<jsf>HTMLDOC_links</jsf>, value=<js>"{back:'$R{servletURI}"</js>),
@@ -9248,7 +9438,7 @@
 
 		<h6 class='topic'>Server</h6>		
 		<ul class='spaced-list'>
-			<li>Added a default OPTIONS page to {@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault}.
+			<li>Added a default OPTIONS page to {@link org.apache.juneau.rest.RestServletDefault} and <code><del>RestServletJenaDefault</del></code>.
 			<li><code>RestServletProperties.REST_allowMethodParam</code> has been enhanced to allow you to
 				explicitely specify which HTTP methods can be used in the <code>&amp;method</code> parameter.
 			<li>New methods added to {@link org.apache.juneau.rest.RestRequest}:
@@ -9386,7 +9576,7 @@
 			<li><code>&amp;noTrace=true</code> now prevents any errors from being logged in log file.
 			<li>Workaround for Jetty issue where <code>ServletContext.getContextPath()</code> always ends with <js>"null"</js>.
 			<li><code>RestServletProperties.REST_allowMethodParam</code> is now <jk>true</jk> by default on all subclasses 
-				of {@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault}.
+				of {@link org.apache.juneau.rest.RestServletDefault} and <code><del>RestServletJenaDefault</del></code>.
 		</ul>
 				
 		<h6 class='topic'>Client</h6>		
@@ -9445,7 +9635,7 @@
 			<li>Removed properties parameters from <code><del>RestServlet.onPreCall(RestRequest)</del></code> and <code><del>RestServlet#onPostCall(RestRequest,RestResponse)</del></code> methods
 				since the properties are already accessible through <code>RestRequest.getProperties()</code>.
 			<li>Added {@link org.apache.juneau.uon.UonSerializer} and {@link org.apache.juneau.uon.UonParser} to serializer and parser lists on 
-				{@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault}.
+				{@link org.apache.juneau.rest.RestServletDefault} and <code><del>RestServletJenaDefault</del></code>.
 		</ul>
 		
 		<h6 class='topic'>Client</h6>		
@@ -10369,10 +10559,10 @@
 				</ul>
 			</li>
 			<li>
-				New {@link org.apache.juneau.rest.jena.RestServletJenaDefault} servlet that includes serialization/parsing support for all Jena-based serializers and parsers.
+				New <code><del>RestServletJenaDefault</del></code> servlet that includes serialization/parsing support for all Jena-based serializers and parsers.
 			</li>
 			<li>
-				New {@link org.apache.juneau.rest.jaxrs.rdf.DefaultJenaProvider} JAX-RS provider that includes serialization/parsing support for all Jena-based serializers and parsers.
+				New <code><del>DefaultJenaProvider</del></code> JAX-RS provider that includes serialization/parsing support for all Jena-based serializers and parsers.
 			</li>
 			<li>
 				Eliminated <code>RestServletChild</code> class.<br>