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>&method</code> parameter.
<li>New methods added to {@link org.apache.juneau.rest.RestRequest}:
@@ -9386,7 +9576,7 @@
<li><code>&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>