You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by gi...@apache.org on 2023/01/11 09:11:09 UTC

[sling-site] branch asf-site updated: Automatic website deployment from https://ci-builds.apache.org/job/Sling/job/modules/job/sling-site/job/master/611/

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

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/sling-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 5b1f8b05c Automatic website deployment from https://ci-builds.apache.org/job/Sling/job/modules/job/sling-site/job/master/611/
5b1f8b05c is described below

commit 5b1f8b05cff99346f824ab132277ef32ee895c40
Author: jenkins <bu...@apache.org>
AuthorDate: Wed Jan 11 09:11:04 2023 +0000

    Automatic website deployment from https://ci-builds.apache.org/job/Sling/job/modules/job/sling-site/job/master/611/
---
 documentation/bundles/models.html | 539 +++++++++++++++++---------------------
 sitemap.xml                       | 350 ++++++++++++-------------
 2 files changed, 417 insertions(+), 472 deletions(-)

diff --git a/documentation/bundles/models.html b/documentation/bundles/models.html
index ccf39c82f..6df8aebee 100644
--- a/documentation/bundles/models.html
+++ b/documentation/bundles/models.html
@@ -132,54 +132,47 @@
                         </nav><script src='/res/jquery-3.2.1.min.js' type='text/javascript'></script><script src='/res/tocjs-1-1-2.js' type='text/javascript'></script><script type='text/javascript'>$(document).ready(function() { $('#generatedToC').toc({'selector':'h1[class!=title],h2,h3','ulClass':'menu-list'}); } );</script><div class="content is-marginless">
 <div class="row"><div><section><p><!-- TODO reactivate TOC once JBake moves to flexmark-java -->
 </p>
-<p>Many Sling projects want to be able to create model objects - POJOs which are automatically mapped from Sling objects, typically resources, but also request objects. Sometimes these POJOs need OSGi services as well.</p>
-<h1><a href="#design-goals" id="design-goals">Design Goals</a></h1>
-<ul>
-<li>Entirely annotation driven. &quot;Pure&quot; POJOs.</li>
-<li>Use standard annotations where possible.</li>
-<li>Pluggable</li>
-<li>OOTB, support resource properties (via ValueMap), SlingBindings, OSGi services, request attributes</li>
-<li>Adapt multiple objects - minimal required Resource and SlingHttpServletRequest</li>
-<li>Client doesn't know/care that these objects are different than any other adapter factory</li>
-<li>Support both classes and interfaces.</li>
-<li>Work with existing Sling infrastructure (i.e. not require changes to other bundles).</li>
-</ul>
+<p>Many Sling projects want to be able to create model objects - POJOs which are automatically mapped from Sling objects, typically resources, but also request objects. Sometimes these POJOs need OSGi services as well. Sling Models provide an easy way to achieve this, integrating into the already existing pattern and infrastructure provided by Sling.</p>
 <h1><a href="#basic-usage" id="basic-usage">Basic Usage</a></h1>
 <h2><a href="#model-classes" id="model-classes">Model Classes</a></h2>
-<p>In the simplest case, the class is annotated with <code>@Model</code> and the adaptable class. Fields which need to be injected are annotated with <code>@Inject</code>:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
+<p>In the simplest case, the model class is annotated with <code>@Model</code> and the adaptable class. Fields which need to be injected are annotated with <code>@ValueMapValue</code>:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->import org.apache.sling.api.resource.Resource;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
+
+@Model(adaptables=Resource.class)
 public class MyModel {
 
-    @Inject
+    @ValueMapValue
     private String propertyName;
 }
 </code></pre>
-<p>In this case, a property named &quot;propertyName&quot; will be looked up from the Resource (after first adapting it to a <code>ValueMap</code>) and it is injected. Fields can use any visibility modifier:</p>
+<p>In this case, a property named <code>propertyName</code> will be looked up from the Resource (after first adapting it to a <code>ValueMap</code>) and it is injected. Fields can use any visibility modifier:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public class PublicFieldModel {
 
-    @Inject
+    @ValueMapValue
     public String publicField;
 }
 
 @Model(adaptables=Resource.class)
 public class ProtectedFieldModel {
 
-    @Inject
+    @ValueMapValue
     protected String protectedField;
 }
 
 @Model(adaptables=Resource.class)
 public class PrivateFieldModel {
 
-    @Inject
+    @ValueMapValue
     private String privateField;
 }
 
 @Model(adaptables=Resource.class)
 public class PackagePrivateFieldModel {
 
-    @Inject
+    @ValueMapValue
     String packagePrivateField;
 }
 </code></pre>
@@ -187,7 +180,7 @@ public class PackagePrivateFieldModel {
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public interface MyModel {
  
-    @Inject
+    @ValueMapValue
     String getPropertyName();
 }
 </code></pre>
@@ -202,39 +195,10 @@ public class MyModel {
 }
 </code></pre>
 <p>Because the name of a constructor argument parameter cannot be detected via the Java Reflection API a <code>@Named</code> annotation is mandatory for injectors that require a name for resolving the injection.</p>
-<p>Constructors may use any visibility modifier (as of <a href="https://issues.apache.org/jira/browse/SLING-8069">Sling Models 1.5.0</a>):</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
-public class PublicConstructorModel {    
-    @Inject
-    public PublicConstructorModel() {
-      // constructor code
-    }
-}
-
-@Model(adaptables=Resource.class)
-public class ProtectedConstructorModel {    
-    @Inject
-    protected ProtectedConstructorModel() {
-      // constructor code
-    }
-}
-
-@Model(adaptables=Resource.class)
-public class PrivateConstructorModel {    
-    @Inject
-    private PrivateConstructorModel() {
-      // constructor code
-    }
-}
-
-@Model(adaptables=Resource.class)
-public class PackagePrivateConstructorModel {    
-    @Inject
-    PackagePrivateConstructorModel() {
-      // constructor code
-    }
-}
-</code></pre>
+<p>Constructors may use any visibility modifier (as of <a href="https://issues.apache.org/jira/browse/SLING-8069">Sling Models 1.5.0</a>).</p>
+<h2><a href="#model-and-adaptable-types" id="model-and-adaptable-types">@Model and adaptable types</a></h2>
+<p>When defining a Sling Model class, the <code>adaptables</code> parameter to the <code>@Model</code> annotation is mostly determined by the injectors being used. The provided class must satisfy the needs of all injectors (for the details see <a href="#available-injectors-1">the table below</a>). For example if the model class only uses the <code>ValueMap</code> injector, the adaptables parameter can be a <code>Resource</code>, a <code>SlingHttpServletRequest</code> or both. But if the  [...]
+<p>In order to increase the reuse it's advised to stick to <code>Resource</code> as adaptables if possible, as such a model can be used in the context of request and outside of it.</p>
 <h2><a href="#bundle-manifest-configuration" id="bundle-manifest-configuration">Bundle Manifest Configuration</a></h2>
 <p>In order for these classes to be picked up, there is a header which must be added to the bundle's manifest:</p>
 <pre><code>&lt;Sling-Model-Packages&gt;
@@ -248,8 +212,9 @@ public class PackagePrivateConstructorModel {
 &lt;/Sling-Model-Packages&gt;
 </code></pre>
 <p>Alternatively it is possible to list all classes individually that are Sling Models classes via the <code>Sling-Model-Classes</code> header. Again, wildcard characters like <code>*</code> are not supported.</p>
-<p>If you use the Sling Models bnd plugin all required bundle headers are generated automatically at build time (see chapter 'Registration of Sling Models classes via bnd plugin' below).</p>
+<p>If you use the Sling Models bnd plugin all required bundle headers are generated automatically at build time, see chapter <a href="#registration-of-sling-models-classes-via-bnd-plugin-1">Registration of Sling Models classes via bnd plugin</a> below.</p>
 <h1><a href="#client-code" id="client-code">Client Code</a></h1>
+<p>There are multiple ways to instantiate Sling Models.</p>
 <h2><a href="#adaptto" id="adaptto">adaptTo()</a></h2>
 <p>Client code doesn't need to be aware that Sling Models is being used. It just uses the Sling Adapter framework:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->MyModel model = resource.adaptTo(MyModel.class)
@@ -261,9 +226,9 @@ public class PackagePrivateConstructorModel {
 <pre><code><!-- TODO syntax marker (::jsp) disabled -->${sling:adaptTo(resource, 'org.apache.sling.models.it.models.MyModel')}
 </code></pre>
 <p>As with other AdapterFactories, if the adaptation can't be made for any reason, <code>adaptTo()</code> returns null.</p>
-<h2><a href="#modelfactory-since-120" id="modelfactory-since-120">ModelFactory (since 1.2.0)</a></h2>
+<h2><a href="#modelfactory" id="modelfactory">ModelFactory</a></h2>
 <p><em>See also  <a href="https://issues.apache.org/jira/browse/SLING-3709">SLING-3709</a></em></p>
-<p>Since Sling Models 1.2.0 there is another way of instantiating models. The OSGi service <code>ModelFactory</code> provides a method for instantiating a model that throws exceptions. This is not allowed by the Javadoc contract of the adaptTo method. That way <code>null</code> checks are not necessary and it is easier to see why instantiation of the model failed.</p>
+<p>Since Sling Models 1.2.0 there is another way of instantiating models. The OSGi service <code>ModelFactory</code> provides a method for instantiating a model that throws exceptions. This is not allowed by the Javadoc contract of the <code>adaptTo()</code> method. That way <code>null</code> checks are not necessary and it is easier to see why instantiation of the model failed.</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->try {
     MyModel model = modelFactory.createModel(object, MyModel.class);
 } catch (Exception e) {
@@ -274,68 +239,96 @@ public class PackagePrivateConstructorModel {
 </code></pre>
 <p>In addition <code>ModelFactory</code> provides methods for checking whether a given class is a model at all (having the model annotation) or whether a class can be adapted from a given adaptable.</p>
 <h2><a href="#usage-in-htl" id="usage-in-htl">Usage in HTL</a></h2>
-<p><a href="/documentation/bundles/scripting/scripting-htl.html#java-use-provider-1">Sling Models Use Provider</a> (internally uses the <code>ModelFactory</code> from above).</p>
-<h1><a href="#other-options" id="other-options">Other Options</a></h1>
-<h2><a href="#names" id="names">Names</a></h2>
-<p>If the field or method name doesn't exactly match the property name, <code>@Named</code> can be used:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
-public class MyModel {
- 
-    @Inject @Named(&quot;secondPropertyName&quot;)
-    private String otherName;
-} 
-</code></pre>
+<p>Please see <a href="/documentation/bundles/scripting/scripting-htl.html#java-use-provider-1">Sling Models Use Provider</a>; internally it uses the <code>ModelFactory</code> from above.</p>
+<h1><a href="#available-injectors" id="available-injectors">Available injectors</a></h1>
+<p>In the above cases just the <code>@ValueMapValue</code> annotation was used, but there other available injectors. For each injector there is a specialized annotation available. For the optional parameters see the next section.</p>
+<table>
+<thead>
+<tr><th>Title </th><th> Injector Name  </th><th> Annotation          </th><th> Supported Optional Elements    </th><th> Description   </th><th> Applicable to (including  using <code>@Via</code>) </th><th> Array Support   </th><th> Parametrized Type Support</th></tr>
+</thead>
+<tbody>
+<tr><td>Scripting Bindings</td><td><code>script-bindings</code> </td><td> <code>@ScriptVariable</code>   </td><td> <code>injectionStrategy</code> and <code>name</code>          </td><td> Injects the script variable defined via <a href="https://cwiki.apache.org/confluence/display/SLING/Scripting+variables">Sling Bindings</a>. If <code>name</code> is not set the name is derived from the method/field name.  </td><td> A ServletRequest object which has the <code>Sling Bindings</code> attribut [...]
+<tr><td>ValueMap </td><td> <code>valuemap</code> </td><td> <code>@ValueMapValue</code>    </td><td> <code>injectionStrategy</code>, <code>name</code>   </td><td> Injects a <code>ValueMap</code> value taken from the adapted resource (either taking from the adapted resource or the resource of the adapted SlingHttpServletRequest). If <code>name</code> is not set the name is derived from the method/field name. </td><td>Any object which is or can be adapted to a <code>ValueMap</code> </td><td [...]
+<tr><td>Child Resource </td><td> <code>child-resources</code> </td><td> <code>@ChildResource</code>    </td><td> <code>injectionStrategy</code>, <code>name</code>   </td><td> Injects a child resource by name (taken from the adapted resource (either taking from the adapted resource or the resource of the adapted SlingHttpServletRequest). If <code>name</code> is not set the name is derived from the method/field name. </td><td> <code>Resource</code> objects  </td><td>  none  </td><td> if a  [...]
+<tr><td>Request Attribute </td><td> <code>request-attributes</code> </td><td> <code>@RequestAttribute</code> </td><td> <code>injectionStrategy</code>, <code>name</code>    </td><td> Injects a request attribute by name, it requires the the adaptable is a <code>SlingHttpServletRequest</code> . If <code>name</code> is not set the name is derived from the method/field name. </td><td> <code>ServletRequest</code> objects </td><td> no conversion is done </td><td> If a parameterized type is pass [...]
+<tr><td>Resource path </td><td> <code>resource-path</code> </td><td> <code>@ResourcePath</code>     </td><td> <code>injectionStrategy</code>, <code>path</code>, and <code>name</code> </td><td>Injects a resource either by path or by reading a property with the given name. </td><td> <code>Resource</code> or <code>SlingHttpServletRequest</code> objects </td><td> yes </td><td> none</td></tr>
+<tr><td>OSGi service </td><td> <code>osgi-services</code> </td><td> <code>@OSGiService</code>      </td><td> <code>injectionStrategy</code>, <code>filter</code>           </td><td> Injects an OSGi service by type (and the optional filter) </td><td> Any object </td><td> yes </td><td> Parameterized <code>List</code> and <code>Collection</code> injection points are injected by getting an array of the services and creating an unmodifiable <code>List</code> from the array.</td></tr>
+<tr><td>Context-Aware Configuration </td><td> <code>ca-config</code> </td><td> <code>@ContextAwareConfiguration</code> </td><td> <code>injectionStrategy</code>, <code>name</code>    </td><td>  Lookup context-aware configuration. See <a href="#context-aware-configuration">Context-Aware Configuration</a> below. </td><td> Any object </td><td> yes </td><td> If a parameterized type <code>List</code> or <code>Collection</code> is used, a configuration collection is looked up.</td></tr>
+<tr><td>Self </td><td> <code>self</code> </td><td> <code>@Self</code>             </td><td> <code>injectionStrategy</code>                     </td><td>  Injects the adaptable itself. If the field type does not match with the adaptable it is tried to adapt the adaptable to the requested type. </td><td> any object </td><td> none </td><td> none</td></tr>
+<tr><td>Sling Object </td><td> <code>sling-object</code> </td><td> <code>@SlingObject</code>      </td><td> <code>injectionStrategy</code>                     </td><td> Injects commonly used sling objects if the field matches with the class: request, response, resource resolver, current resource, SlingScriptHelper </td><td> <code>Resource</code>, <code>ResourceResolver</code> or <code>SlingHttpServletRequest</code> objects (not all objects can be resolved by all adaptables).  </td><td> n [...]
+</tbody>
+</table>
+<h1><a href="#parameters-to-the-injectors" id="parameters-to-the-injectors">Parameters to the Injectors</a></h1>
+<p>Injectors can support optional parameters as listed in the above table</p>
 <h2><a href="#optional-and-required" id="optional-and-required">Optional and Required</a></h2>
-<p><code>@Inject</code>ed fields/methods are assumed to be required. To mark them as optional, use <code>@Optional</code>:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
+<p>Injected fields/methods are assumed to be required. To mark them as optional, there are 2 options:</p>
+<ul>
+<li>add the parameter <code>injectionStrategy=InjectionStrategy.OPTIONAL</code> to the annotation</li>
+<li>or wrap the type into an <code>Optional</code></li>
+</ul>
+<p>It is recommended to use the approach using the <code>Optional</code> type, because then this &quot;optionality&quot; is also expressed in the type system.</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->import java.util.Optional;
+
+@Model(adaptables=Resource.class)
 public class MyModel {
- 
-    @Inject @Optional
-    private String otherName;
+
+    @ValueMapValue(injectionStrategy=InjectionStrategy.OPTIONAL)
+    private String optionalProperty;
+
+    @ValueMapValue
+    private Optional&lt;String&gt; anotherOptionalProperty;
 }
 </code></pre>
-<p>If a majority of <code>@Inject</code>ed fields/methods are optional, it is possible (since Sling Models API 1.0.2/Impl 1.0.6) to change the default injection strategy by using adding <code>defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL</code> to the <code>@Model</code> annotation:</p>
+<p>Please note, that even injections marked as optional are always tried. It is just that any failure to inject a value does not lead to the termination of the creation of the SlingModel, but instead it continues, leaving the field value/return value at the default value (as provided by the <code>@Default</code> annotation) or at the default value of the used type.</p>
+<p>If a majority of injected fields/methods are optional, it is possible (since Sling Models API 1.0.2/Impl 1.0.6) to change the default injection strategy by using adding <code>defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL</code> to the <code>@Model</code> annotation:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class, defaultInjectionStrategy=DefaultInjectionStrategy.OPTIONAL)
 public class MyModel {
 
-    @Inject
-    private String otherName;
+    @ValueMapValue
+    private String optionalProperty;
 }
 </code></pre>
-<p>To still mark some fields/methods as being mandatory while relying on <code>defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL</code> for all other fields, the annotation <code>@Required</code> can be used.</p>
-<p><code>@Optional</code> annotations are only evaluated when using the <code>defaultInjectionStrategy = DefaultInjectionStrategy.REQUIRED</code> (which is the default), <code>@Required</code> annotations only if using <code>defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL</code>.</p>
-<h2><a href="#defaults" id="defaults">Defaults</a></h2>
-<p>A default value can be provided (for Strings &amp; primitives):</p>
+<p>To still mark some fields/methods as being mandatory while relying on <code>defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL</code> for all other fields, the parameter <code>injectionStrategy=InjectionStrategy.REQUIRED</code> can be used.</p>
+<p><code>defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL</code> parameters are only evaluated when using the <code>defaultInjectionStrategy = DefaultInjectionStrategy.REQUIRED</code> (which is the default), <code>injectionStrategy=InjectionStrategy.REQUIRED</code> parameters only if using <code>defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL</code>.</p>
+<h2><a href="#names" id="names">Names</a></h2>
+<p>If the field or method name doesn't exactly match the property name, the parameter <code>name</code> can be used:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public class MyModel {
  
-    @Inject @Default(values=&quot;defaultValue&quot;)
-    private String name;
-}
+    @ValueMapValue(name=&quot;secondPropertyName&quot;)
+    private String otherName;
+} 
 </code></pre>
-<p>Defaults can also be arrays:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
-public class MyModel {
- 
-    @Inject @Default(intValues={1,2,3,4})
-    private int[] integers;
+<p>In this case the value of the property named <code>secondPropertyName</code> would be taken from the ValueMap.</p>
+<h2><a href="#path" id="path">Path</a></h2>
+<p>The <code>@ResourcePath</code> injector supports the parameter <code>path</code> to inject a resource with the given parameter:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class) {
+
+    @ResourcePath(path=&quot;/libs&quot;)
+    Resource libs;
 }
 </code></pre>
-<p>OSGi services can be injected:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
+<h2><a href="#osgi-service-filters" id="osgi-service-filters">OSGi Service Filters</a></h2>
+<p>OSGi injection can be filtered:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=SlingHttpServletRequest.class)
 public class MyModel {
  
-    @Inject
-    private ResourceResolverFactory resourceResolverFactory;
-} 
+    @OSGiService
+    private PrintWriter out;
+ 
+    @OSGiInjector(name=&quot;log&quot;)
+    private Logger logger;
+ 
+    @OsgiInjector(filter=&quot;paths=/bin/something&quot;)
+    private List&lt;Servlet&gt; servlets;
+}
 </code></pre>
-<p>In this case, the name is not used -- only the class name.</p>
-<h2><a href="#collections" id="collections">Collections</a></h2>
-<p>Lists and arrays are supported by some injectors. For the details look at the table given in <a href="#available-injectors">Available Injectors</a>:</p>
+<h2><a href="#collection-support" id="collection-support">Collection support</a></h2>
+<p>Lists and arrays are supported by some injectors. For the details look at the table given in <a href="#available-injectors-1">Available Injectors</a>:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public class MyModel {
  
-    @Inject
+    @OsgiService
     private List&lt;Servlet&gt; servlets;
 }
 </code></pre>
@@ -343,7 +336,7 @@ public class MyModel {
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public class MyModel {
 
-    @Inject
+    @ChildResource
     private List&lt;Resource&gt; addresses;
 }
 </code></pre>
@@ -357,50 +350,34 @@ public class MyModel {
     +- address2
 </code></pre>
 <p>In this case, the <code>addresses</code> <code>List</code> will contain <code>address1</code> and <code>address2</code>.</p>
-<h2><a href="#osgi-service-filters" id="osgi-service-filters">OSGi Service Filters</a></h2>
-<p>OSGi injection can be filtered:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=SlingHttpServletRequest.class)
+<h1><a href="#defaults" id="defaults">Defaults</a></h1>
+<p>A default value can provided (for String and primitives)</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public class MyModel {
- 
-    @Inject
-    private PrintWriter out;
- 
-    @Inject
-    @Named(&quot;log&quot;)
-    private Logger logger;
- 
-    @Inject
-    @Filter(&quot;(paths=/bin/something)&quot;)
-    private List&lt;Servlet&gt; servlets;
+
+    @ValueMapValue
+    @Default(values=&quot;defaultValue&quot;)
+    private String name;
 }
 </code></pre>
-<h2><a href="#postconstruct-methods" id="postconstruct-methods">PostConstruct Methods</a></h2>
-<p>The <code>@PostConstruct</code> annotation can be used to add methods which are invoked upon completion of all injections:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=SlingHttpServletRequest.class)
+<p>Defaults can also be arrays:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public class MyModel {
- 
-    @Inject
-    private PrintWriter out;
- 
-    @Inject
-    @Named(&quot;log&quot;)
-    private Logger logger;
- 
-    @PostConstruct
-    protected void sayHello() {
-         logger.info(&quot;hello&quot;);
-    }
+
+    @ValueMapValue
+    @Default(intValues={1,2,3,4})
+    private int[] integers;
 }
 </code></pre>
-<p><code>@PostConstruct</code> methods in a super class will be invoked first. If a <code>@PostConstruct</code> method exists in a subclass with the same name as in the parent class, only the subclass method will be invoked. This is the case regardless of the scope of either method.</p>
-<p>Since Sling Models Implementation 1.4.6, <code>@PostConstruct</code> methods may return a <code>false</code> boolean value in which case the model creation will fail without logging any exception (a message will be logged at the <code>DEBUG</code> level).</p>
-<h2><a href="#via" id="via">Via</a></h2>
-<p>In some cases, a different object should be used as the adaptable instead of the original adaptable. This can be done using the <code>@Via</code> annotation. By default, this can be done using a JavaBean property of the adaptable:</p>
+<h1><a href="#via" id="via">Via</a></h1>
+<p>In some cases, a different object should be used as the adaptable instead of the original adaptable. This can be done using the <code>via</code> parameter.</p>
+<p>While this feature does also work with the injector-specfic annotations above, it's use is discouraged because it's barely used and just increases the complexity of the models.</p>
+<p>By default, this can be done using a JavaBean property of the adaptable:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=SlingHttpServletRequest.class)
 public interface MyModel {
  
     // will return request.getResource().getValueMap().get(&quot;propertyName&quot;, String.class)
-    @Inject @Via(&quot;resource&quot;)
+    @Inject(via=&quot;resource&quot;)
     String getPropertyName();
 } 
 </code></pre>
@@ -414,30 +391,59 @@ public interface MyModel {
 
 }
 </code></pre>
-<p>See the <a href="#via-types-since-api-134implementation-140">Via Types</a> section below for details on the included types for <code>@Via</code>.</p>
-<h2><a href="#source" id="source">Source</a></h2>
-<p>If there is ambiguity where a given injection could be handled by more than one injector, the <code>@Source</code> annotation can be used to define which injector is responsible:</p>
+<h2><a href="#via-types" id="via-types">Via Types</a></h2>
+<p>The following standard types are provided (all types are in the package <code>org.apache.sling.models.annotations.via</code>, available since API 1.3.4, Implementation 1.4.0)</p>
+<table>
+<thead>
+<tr><th><code>@Via</code> type value             </th><th> Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>BeanProperty</code>  (default)     </td><td> Uses a JavaBean property from the adaptable.</td></tr>
+<tr><td><code>ChildResource</code>               </td><td> Uses a child resource from the adaptable, assuming the adaptable is a <code>Resource</code>. In case the adaptable is a <code>SlingHttpServletRequest</code> uses a wrapper overwriting the <code>getResource()</code> to point to the given child resource (<a href="https://issues.apache.org/jira/browse/SLING-7321">SLING-7321</a>).</td></tr>
+<tr><td><code>ForcedResourceType</code>          </td><td> Creates a wrapped resource with the provided resource type. If the adaptable is a <code>SlingHttpServletRequest</code>, a wrapped request is created as well to contain the wrapped resource.</td></tr>
+<tr><td><code>ResourceSuperType</code>           </td><td> Creates a wrapped resource with the resource type set to the adaptable's resource super type. If the adaptable is a <code>SlingHttpServletRequest</code>, a wrapped request is created as well to contain the wrapped resource.</td></tr>
+</tbody>
+</table>
+<p>Defining your own type for the <code>@Via</code> annotation is a two step process. The first step is to create a marker class implementing the <code>@ViaProviderType</code> annotation. This class can be entirely empty, e.g.</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->public class MyCustomProviderType implements ViaProviderType {}
+</code></pre>
+<p>The second step is to create an OSGi service implementing the <code>ViaProvider</code> interface. This interface defines two methods:</p>
+<ul>
+<li><code>getType()</code> should return the marker class.</li>
+<li><code>getAdaptable()</code> should return the new adaptable or <code>ViaProvider.ORIGINAL</code> to indicate that the original adaptable should be used.</li>
+</ul>
+<h1><a href="#postconstruct-methods" id="postconstruct-methods">PostConstruct Methods</a></h1>
+<p>The <code>@PostConstruct</code> annotation can be used to add methods which are invoked upon completion of all injections:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=SlingHttpServletRequest.class)
-public interface MyModel {
+public class MyModel {
  
-    // Ensure that &quot;resource&quot; is retrived from the bindings, not a request attribute 
-    @Inject @Source(&quot;script-bindings&quot;)
-    Resource getResource();
-} 
+    @SlingObject
+    private PrintWriter out;
+ 
+    @OsgiInjector(name=&quot;log&quot;)
+    private Logger logger;
+ 
+    @PostConstruct
+    protected void sayHello() {
+         logger.info(&quot;hello&quot;);
+    }
+}
 </code></pre>
-<h2><a href="#adaptations" id="adaptations">Adaptations</a></h2>
+<p><code>@PostConstruct</code> methods in a super class will be invoked first. If a <code>@PostConstruct</code> method exists in a subclass with the same name as in the parent class, only the subclass method will be invoked. This is the case regardless of the scope of either method.</p>
+<p>Since Sling Models Implementation 1.4.6, <code>@PostConstruct</code> methods may return a <code>false</code> boolean value in which case the model creation will fail without logging any exception (a message will be logged at the <code>DEBUG</code> level).</p>
+<h1><a href="#adaptations-and-nesting-sling-models" id="adaptations-and-nesting-sling-models">Adaptations and nesting Sling Models</a></h1>
 <p>If the injected object does not match the desired type and the object implements the <code>Adaptable</code> interface, Sling Models will try to adapt it. This provides the ability to create rich object graphs. For example:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public interface MyModel {
  
-    @Inject
+    @ChildResource
     ImageModel getImage();
 }
 
-@Model(adaptables=Resource.class)
+<!-- TODO syntax marker (::java) disabled -->@Model(adaptables=Resource.class)
 public interface ImageModel {
  
-    @Inject
+    @ValueMapvalue
     String getPath();
 }
 </code></pre>
@@ -452,17 +458,17 @@ public class MyModel {
 
     private final Resource resource;
 
-    @Inject
+    @ValueMapValue
     private String propertyName;
 }
 </code></pre>
 <p>Note: storing the original adaptable (request/resource) in a field is discouraged. Please see the note about <a href="#caching-self-reference-note">caching and self references</a> below.</p>
-<h2><a href="#sling-validation-since-120" id="sling-validation-since-120">Sling Validation (since 1.2.0)</a></h2>
+<h1><a href="#sling-validation" id="sling-validation">Sling Validation</a></h1>
 <p><a name="validation" /> <em>See also <a href="https://issues.apache.org/jira/browse/SLING-4161">SLING-4161</a></em></p>
-<p>You can use the attribute <code>validation</code> on the Model annotation to call a validation service on the resource being used by the Sling model. That attribute supports three different values:</p>
+<p>Since API version 1.2.0 you can use the attribute <code>validation</code> on the Model annotation to call a validation service on the resource being used by the Sling model. That attribute supports three different values:</p>
 <table>
 <thead>
-<tr><th>Value </th><th>  Description </th><th>  Invalid validation model </th><th>  No validation model found </th><th>  Resource invalid according to model</th></tr>
+<tr><th>Value </th><th>  Description </th><th>  Invalid validation model </th><th>  No validation model found </th><th>  Resource invalid according to validation model</th></tr>
 </thead>
 <tbody>
 <tr><td><code>DISABLED</code> (default) </td><td> don't validate the resource bound to the Model </td><td> Model instantiated </td><td> Model instantiated  </td><td> Model instantiated</td></tr>
@@ -470,69 +476,76 @@ public class MyModel {
 <tr><td><code>OPTIONAL</code> </td><td> validate the resource bound to the Model (if a validation model is found) </td><td> Model not instantiated </td><td> Model instantiated </td><td> Model not instantiated</td></tr>
 </tbody>
 </table>
-<p>In case the model is not instantiated an appropriate error message is logged (if <code>adaptTo()</code> is used) or an appropriate exception is thrown (if <code>ModelFactory.createModel()</code> is used).</p>
+<p>In case the model is not instantiated an appropriate error message is logged (if <code>adaptTo()</code> is used) or an appropriate exception is thrown if <code>ModelFactory.createModel()</code> is used.</p>
 <p>The only implementation for this Sling Models validation service is leveraging <a href="/documentation/bundles/validation.html">Sling Validation</a> and is located in the bundle <a href="https://github.com/apache/sling-org-apache-sling-models-validation-impl">org.apache.sling.models.validation-impl</a>. Validation is only working on models which are adapted from either <code>Resource</code> or <code>SlingHttpServletRequest</code> and if the Sling Validation Bundle is deployed.</p>
-<h1><a href="#custom-injectors" id="custom-injectors">Custom Injectors</a></h1>
-<p>To create a custom injector, simply implement the <code>org.apache.sling.models.spi.Injector</code> interface and register your implementation with the OSGi service registry. Please refer to the <a href="https://github.com/apache/sling-org-apache-sling-models-impl/tree/master/src/main/java/org/apache/sling/models/impl/injectors">standard injectors in Git</a> for examples.</p>
-<p>Injectors are invoked in order of their service ranking, from lowest to highest. See the table below for the rankings of the standard injectors.</p>
-<h1><a href="#annotation-reference" id="annotation-reference">Annotation Reference</a></h1>
-<p><code>@Model</code> :   declares a model class or interface</p>
-<p><code>@Inject</code> :   marks a field or method as injectable</p>
-<p><code>@Named</code> :   declare a name for the injection (otherwise, defaults based on field or method name).</p>
-<p><code>@Optional</code> :   marks a field or method injection as optional</p>
-<p><code>@Source</code> :   explictly tie an injected field or method to a particular injector (by name). Can also be on other annotations.</p>
-<p><code>@Filter</code> :   an OSGi service filter</p>
-<p><code>@PostConstruct</code> :   methods to call upon model option creation (only for model classes)</p>
-<p><code>@Via</code> :   change the adaptable as the source of the injection</p>
-<p><code>@Default</code> :   set default values for a field or method</p>
-<p><code>@Path</code> :   only used together with the resource-path injector to specify the path of a resource</p>
-<p><code>@Exporters</code>/<code>@Exporter</code>/<code>@ExporterOptions</code>/<code>@ExporterOption</code> :   See Exporter Framework section below</p>
-<p>In addition all <a href="#injector-specific-annotations">injector-specific annotations</a>.</p>
-<h1><a href="#available-injectors" id="available-injectors">Available Injectors</a></h1>
-<table>
-<thead>
-<tr><th>Title              </th><th>  Name (for <code>@Source</code>)   </th><th> Service Ranking     </th><th> Available Since (Implementation Version) </th><th> Description  </th><th> Applicable To (including using <code>@Via</code>) </th><th> Accepts Null Name? </th><th> Array Support </th><th> Parameterized Type Support</th></tr>
-</thead>
-<tbody>
-<tr><td>Script Bindings    </td><td> <code>script-bindings</code>       </td><td> 1000                </td><td> 1.0.0                                    </td><td> Lookup objects in the script bindings object by name. </td><td> A ServletRequest object which has the <code>Sling Bindings</code> attribute defined </td><td> no </td><td> no conversion is done </td><td> If a parameterized type is passed, the bindings value must be of a compatible type of the parameterized type.</td></tr>
-<tr><td>Value Map          </td><td> <code>valuemap</code>              </td><td> 2000                </td><td> 1.0.0                                    </td><td> Gets a property from a <code>ValueMap</code> by name. </td><td> Any object which is or can be adapted to a <code>ValueMap</code></td><td> no </td><td> Primitive arrays wrapped/unwrapped as necessary. Wrapper object arrays are unwrapped/wrapped as necessary. </td><td> Parameterized <code>List</code> and <code>Collection</code> i [...]
-<tr><td>Child Resources    </td><td> <code>child-resources</code>       </td><td> 3000                </td><td> 1.0.0                                    </td><td> Gets a child resource by name. </td><td> <code>Resource</code> objects </td><td> no </td><td> none </td><td> if a parameterized type <code>List</code> or <code>Collection</code> is passed, a <code>List&lt;Resource&gt;</code> is returned (the contents of which may be adapted to the target type) filled with all child resources of [...]
-<tr><td>Request Attributes </td><td> <code>request-attributes</code>    </td><td> 4000                </td><td> 1.0.0                                    </td><td> Get a request attribute by name. </td><td> <code>ServletRequest</code> objects </td><td> no </td><td> no conversion is done </td><td> If a parameterized type is passed, the request attribute must be of a compatible type of the parameterized type.</td></tr>
-<tr><td>OSGi Services      </td><td> <code>osgi-services</code>         </td><td> 5000                </td><td> 1.0.0                                    </td><td> Lookup services based on class name. Since Sling Models Impl 1.2.8 (<a href="https://issues.apache.org/jira/browse/SLING-5664">SLING-5664</a>) the service with the highest service ranking is returned. In case multiple services are returned, they are ordered descending by their service ranking (i.e. the one with the highest rank [...]
-<tr><td>Context-Aware Configuration </td><td> <code>caconfig</code>     </td><td> 6000                </td><td>                                          </td><td> Lookup context-aware configuration. See <a href="#context-aware-configuration">Context-Aware Configuration</a>. </td><td> Any object </td><td> yes </td><td> yes </td><td> If a parameterized type <code>List</code> or <code>Collection</code> is used, a configuration collection is looked up.</td></tr>
-<tr><td>Resource Path      </td><td> <code>resource-path</code>         </td><td> 2500                </td><td> 1.1.0                                    </td><td> Injects one or multiple resources. The resource paths are either given by <code>@Path</code> annotations, the element <code>path</code> or <code>paths</code> of the annotation <code>@ResourcePath</code> or by paths given through a resource property being referenced by either <code>@Named</code> or element <code>name</code> of t [...]
-<tr><td>Self               </td><td> <code>self</code>                  </td><td> <code>Integer.MAX_VALUE</code> </td><td> 1.1.0                                    </td><td> Injects the adaptable object itself (if the class of the field matches or is a supertype). If the @Self annotation is present it is tried to adapt the adaptable to the field type.  </td><td> Any object </td><td> yes </td><td> none </td><td> none</td></tr>
-<tr><td>Sling Object       </td><td> <code>sling-object</code>          </td><td> <code>Integer.MAX_VALUE</code> </td><td> 1.1.0                                    </td><td> Injects commonly used sling objects if the field matches with the class: request, response, resource resolver, current resource, SlingScriptHelper. This works only if the adaptable can get the according information, i.e. all objects are available via <code>SlingHttpServletRequest</code> while <code>ResourceResolver</ [...]
-</tbody>
-</table>
-<h1><a href="#injector-specific-annotations" id="injector-specific-annotations">Injector-specific Annotations</a></h1>
-<p><em>Introduced with <a href="https://issues.apache.org/jira/browse/SLING-3499">SLING-3499</a> in Sling Models Impl 1.0.6</em></p>
-<p>Sometimes it is desirable to use customized annotations which aggregate the standard annotations described above. This will generally have the following advantages over using the standard annotations:</p>
+<h1><a href="#performance" id="performance">Performance</a></h1>
+<h2><a href="#caching-adaptions" id="caching-adaptions">Caching adaptions</a></h2>
+<p>By default, Sling Models do not do any caching of the adaptation result and every request for a model class will result in a new instance of the model class. However, there are two notable cases when the adaptation result can be cached. The first case is when the adaptable extends the <code>SlingAdaptable</code> base class. Most significantly, this is the case for many <code>Resource</code> adaptables as <code>AbstractResource</code> extends <code>SlingAdaptable</code>.  <code>SlingAd [...]
+<pre><code><!-- TODO syntax marker (::java) disabled -->// assume that resource is an instance of some subclass of AbstractResource
+ModelClass object1 = resource.adaptTo(ModelClass.class); // creates new instance of ModelClass
+ModelClass object2 = resource.adaptTo(ModelClass.class); // SlingAdaptable returns the cached instance
+assert object1 == object2;
+</code></pre>
+<p>While this is true for <code>AbstractResource</code> subclasses, it is notably <strong>not</strong> the case for <code>SlingHttpServletRequest</code> as this class does not extend <code>SlingAdaptable</code>. So:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->// assume that request is some SlingHttpServletRequest object
+ModelClass object1 = request.adaptTo(ModelClass.class); // creates new instance of ModelClass
+ModelClass object2 = request.adaptTo(ModelClass.class); // creates another new instance of ModelClass
+assert object1 != object2;
+</code></pre>
+<p>Since API version 1.3.4, Sling Models <em>can</em> cache an adaptation result, regardless of the adaptable by specifying <code>cache = true</code> on the <code>@Model</code> annotation.</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
+public class ModelClass {}
+
+...
+
+// assume that request is some SlingHttpServletRequest object
+ModelClass object1 = request.adaptTo(ModelClass.class); // creates new instance of ModelClass
+ModelClass object2 = request.adaptTo(ModelClass.class); // Sling Models returns the cached instance
+assert object1 == object2;
+</code></pre>
+<p>When <code>cache = true</code> is specified, the adaptation result is cached regardless of how the adaptation is done:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
+public class ModelClass {}
+
+...
+
+// assume that request is some SlingHttpServletRequest object
+ModelClass object1 = request.adaptTo(ModelClass.class); // creates new instance of ModelClass
+ModelClass object2 = modelFactory.createModel(request, ModelClass.class); // Sling Models returns the cached instance
+assert object1 == object2;
+</code></pre>
+<p><a name="caching-self-reference-note"></a></p>
+<h2><a href="#a-note-about-cache-true-and-using-the-self-injector" id="a-note-about-cache-true-and-using-the-self-injector">A note about cache = true and using the self injector</a></h2>
+<p>In general, it is <strong>strongly</strong> discouraged to store a reference to the original adaptable using the <code>self</code> injector. Using implementation version 1.4.8 or below, storing the original adaptable in a Sling Model, can cause heap space exhaustion, crashing the JVM. Starting in version 1.4.10, storing the original adaptable will not crash the JVM, but it can cause unexpected behavior (e.g. a model being created twice, when it should be cached). The issue was first r [...]
+<p>The problem can be avoided by discarding the original adaptable when it is no longer needed. This can be done by setting affected field(s) to <code>null</code> at the end of the <code>@PostConstruct</code> annotated method:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
+public class CachableModelClass {
+    @Self
+    private SlingHttpServletRequest request;
+    
+    @PostConstruct
+    private void init() {
+      ... do something with request ...
+      
+      this.request = null;
+    }
+}
+</code></pre>
+<p>Alternatively, the same effect can be achieved using constructor injection, by not storing the reference to the adaptable:</p>
+<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
+public class CachableModelClass {
+    public CachableModelClass(SlingHttpServletRequest request) {
+      ... do something with request ...
+    }
+}
+</code></pre>
+<h2><a href="#other-performance-aspects" id="other-performance-aspects">Other performance aspects</a></h2>
+<p>Given the ease of creating Sling Models and their features, performance can get a problem; the following aspects should be considered:</p>
 <ul>
-<li>Less code to write (only one annotation is necessary in most of the cases)</li>
-<li>More robust (in case of name collisions among the different injectors, you make sure that the right injector is used)</li>
-<li>Better IDE support (because the annotations provide elements for each configuration which is available for that specific injector, i.e. <code>filter</code> only for OSGi services)</li>
+<li>When a Sling Model is created, all injections are at least tried, and depending on the injector the performance impact might vary. So model classes with many injections are always slower than smaller models with less injections. In such situations it can make sense to have specialized Sling Models which just cover a single aspect needed in a special situation.</li>
+<li>The support of adaptions can lead to situations, that the instantiation of a single Sling Model can lead to the creation of a whole graph of Sling Models (<a href="#adaptations-and-nesting-sling-models-1">see above</a>); this is not always required and can lead to severe performance problems. Also in this situations the use of more specialized Sling Models can help which do not always trigger the instantation of this graph.</li>
 </ul>
-<p>The follow annotations are provided which are tied to specific injectors:</p>
-<table>
-<thead>
-<tr><th>Annotation          </th><th> Supported Optional Elements    </th><th> Injector </th><th> Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>@ScriptVariable</code>   </td><td> <code>injectionStrategy</code> and <code>name</code>          </td><td> <code>script-bindings</code> </td><td> Injects the script variable defined via <a href="https://cwiki.apache.org/confluence/display/SLING/Scripting+variables">Sling Bindings</a>. If <code>name</code> is not set the name is derived from the method/field name.</td></tr>
-<tr><td><code>@ValueMapValue</code>    </td><td> <code>injectionStrategy</code>, <code>name</code> and <code>via</code>   </td><td> <code>valuemap</code> </td><td> Injects a <code>ValueMap</code> value. If <code>via</code> is not set, it will automatically take <code>resource</code> if the adaptable is the <code>SlingHttpServletRequest</code>. If <code>name</code> is not set the name is derived from the method/field name.</td></tr>
-<tr><td><code>@ChildResource</code>    </td><td> <code>injectionStrategy</code>, <code>name</code> and <code>via</code>   </td><td> <code>child-resources</code> </td><td> Injects a child resource by name. If <code>via</code> is not set, it will automatically take <code>resource</code> if the adaptable is the <code>SlingHttpServletRequest</code>. If <code>name</code> is not set the name is derived from the method/field name.</td></tr>
-<tr><td><code>@RequestAttribute</code> </td><td> <code>injectionStrategy</code>, <code>name</code> and <code>via</code>   </td><td> <code>request-attributes</code> </td><td> Injects a request attribute by name. If <code>name</code> is not set the name is derived from the method/field name.</td></tr>
-<tr><td><code>@ResourcePath</code>     </td><td> <code>injectionStrategy</code>, <code>path</code>, and <code>name</code> </td><td> <code>resource-path</code> </td><td> Injects a resource either by path or by reading a property with the given name.</td></tr>
-<tr><td><code>@OSGiService</code>      </td><td> <code>injectionStrategy</code>, <code>filter</code>           </td><td> <code>osgi-services</code> </td><td> Injects an OSGi service by type. The <code>filter</code> can be used give an OSGi service filter.</td></tr>
-<tr><td><code>@ContextAwareConfiguration</code> </td><td> <code>injectionStrategy</code>, <code>name</code>    </td><td> <code>caconfig</code> </td><td> Lookup context-aware configuration. See <a href="#context-aware-configuration">Context-Aware Configuration</a>.</td></tr>
-<tr><td><code>@Self</code>             </td><td> <code>injectionStrategy</code>                     </td><td> <code>self</code> </td><td> Injects the adaptable itself. If the field type does not match with the adaptable it is tried to adapt the adaptable to the requested type.</td></tr>
-<tr><td><code>@SlingObject</code>      </td><td> <code>injectionStrategy</code>                     </td><td> <code>sling-object</code> </td><td>Injects commonly used sling objects if the field matches with the class: request, response, resource resolver, current resource, SlingScriptHelper</td></tr>
-</tbody>
-</table>
-<h2><a href="#hints" id="hints">Hints</a></h2>
-<p>Those annotations replace <code>@Via</code>, <code>@Filter</code>, <code>@Named</code>, <code>@Optional</code>, <code>@Required</code>, <code>@Source</code> and <code>@Inject</code>. Instead of using the deprecated annotation element <code>optional</code> you should rather use <code>injectionStrategy</code> with the values <code>DEFAULT</code>, <code>OPTIONAL</code> or <code>REQUIRED</code> (see also <a href="https://issues.apache.org/jira/browse/SLING-4155">SLING-4155</a>). <code>@De [...]
-<h2><a href="#context-aware-configuration" id="context-aware-configuration">Context-Aware Configuration</a></h2>
+<h1><a href="#context-aware-configuration" id="context-aware-configuration">Context-Aware Configuration</a></h1>
 <p>Since <a href="https://issues.apache.org/jira/browse/SLING-7256">SLING-7256</a> it is possible to inject <a href="https://sling.apache.org/documentation/bundles/context-aware-configuration/context-aware-configuration.html">Context-Aware Configuration</a> directly in Sling Models.</p>
 <p>To use it, the following additional bundles are required (with given minimal version):</p>
 <ul>
@@ -559,11 +572,13 @@ public class ListConfigModel {
 }
 </code></pre>
 <p>For more examples, see <a href="https://github.com/apache/sling-org-apache-sling-models-caconfig/tree/master/src/test/java/org/apache/sling/models/caconfig/example/model">example models from unit tests</a>.</p>
-<h2><a href="#custom-annotations" id="custom-annotations">Custom Annotations</a></h2>
+<h1><a href="#custom-injectors" id="custom-injectors">Custom Injectors</a></h1>
+<p>To create a custom injector, simply implement the <code>org.apache.sling.models.spi.Injector</code> interface and register your implementation with the OSGi service registry. Please refer to the <a href="https://github.com/apache/sling-org-apache-sling-models-impl/tree/master/src/main/java/org/apache/sling/models/impl/injectors">standard injectors in Git</a> for examples.</p>
+<h1><a href="#custom-annotations" id="custom-annotations">Custom Annotations</a></h1>
 <p>To create a custom annotation, implement the <code>org.apache.sling.models.spi.injectorspecific.StaticInjectAnnotationProcessorFactory</code> interface. This interface may be implemented by the same class as implements an injector, but this is not strictly necessary. Please refer to the <a href="https://github.com/apache/sling-org-apache-sling-models-impl/tree/master/src/main/java/org/apache/sling/models/impl/injectors">injectors in Git</a> for examples.</p>
-<h1><a href="#specifying-an-alternate-adapter-class-since-110" id="specifying-an-alternate-adapter-class-since-110">Specifying an Alternate Adapter Class (since 1.1.0)</a></h1>
+<h1><a href="#specifying-an-alternate-adapter-class" id="specifying-an-alternate-adapter-class">Specifying an alternate Adapter Class</a></h1>
 <p>By default, each model class is registered using its own implementation class as adapter. If the class has additional interfaces this is not relevant.</p>
-<p>The <code>@Model</code> annotations provides an optional <code>adapters</code> attribute which allows specifying under which type(s) the model implementation should be registered in the Models Adapter Factory. Prior to <em>Sling Models Impl 1.3.10</em> only the given class names are used as adapter classes, since 1.3.10 the implementation class is always being registered implicitly as adapter as well (see <a href="https://issues.apache.org/jira/browse/SLING-6658">SLING-6658</a>). With [...]
+<p>Since Sling Models API version 1.1.0 the <code>@Model</code> annotation provides an optional <code>adapters</code> attribute which allows specifying under which type(s) the model implementation should be registered in the Models Adapter Factory. Prior to <em>Sling Models Impl 1.3.10</em> only the given class names are used as adapter classes, since 1.3.10 the implementation class is always being registered implicitly as adapter as well (see <a href="https://issues.apache.org/jira/brow [...]
 <p>Example:</p>
 <pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptables = Resource.class, adapters = MyService.class)
 public class MyModel implements MyService {
@@ -572,13 +587,13 @@ public class MyModel implements MyService {
 </code></pre>
 <p>In this example a <code>Resource</code> can be adapted to a <code>MyService</code> interface, and the Sling Models implementation instantiates a <code>MyModel</code> class for this.</p>
 <p>It is possible to have multiple models implementing the same interface. By default Sling Models will just take the first one ordered alphabetically by the class name. Applications can provide an OSGi service implementing the <code>ImplementationPicker</code> SPI interface which could use context to determine which implementation can be chosen, e.g. depending an a tenant or content path context. If multiple implementations of the <code>ImplementationPicker</code> interface are present, [...]
-<h1><a href="#associating-a-model-class-with-a-resource-type-since-130" id="associating-a-model-class-with-a-resource-type-since-130">Associating a Model Class with a Resource Type (since 1.3.0)</a></h1>
-<p>The <code>@Model</code> annotation provides an optional <code>resourceType</code> attribute which allows for model classes to be associated with one or more resource types. This is used in three different ways.</p>
+<h1><a href="#associating-a-model-class-with-a-resource-type" id="associating-a-model-class-with-a-resource-type">Associating a Model Class with a Resource Type</a></h1>
+<p>Since API version 1.3.0 The <code>@Model</code> annotation provides an optional <code>resourceType</code> attribute which allows for model classes to be associated with one or more resource types. This is used in three different ways.</p>
 <p>In the case of multiple model classes implementing the same interface, the class with the &quot;closest&quot; resource type will be used when adapting to the interface.</p>
 <p>The <code>ModelFactory</code> service interface has methods <code>Object getModelFromResource(Resource)</code> and <code>Object getModelFromRequest(SlingHttpServletRequest)</code> which will dynamically determine the adapter class based on the <code>Resource</code> using its type. In the case of the <code>SlingHttpServletRequest</code> method, it uses the request's <code>Resource</code> object (i.e. by calling <code>request.getResource()</code>)</p>
 <p>The resource type is also used as part of the Exporter framework (see next section).</p>
-<h1><a href="#exporter-framework-since-130" id="exporter-framework-since-130">Exporter Framework (since 1.3.0)</a></h1>
-<p>Sling Models objects can be exported to arbitrary Java objects through the Sling Models Exporter framework. Model objects can be programatically exported by calling the <code>ModelFactory</code> method <code>exportModel()</code>. This method takes as its arguments:</p>
+<h1><a href="#exporter-framework" id="exporter-framework">Exporter Framework</a></h1>
+<p>Since API version 1.3.0 Sling Models objects can be exported to arbitrary Java objects through the Sling Models Exporter framework. Model objects can be programatically exported by calling the <code>ModelFactory</code> method <code>exportModel()</code>. This method takes as its arguments:</p>
 <ul>
 <li>the model object</li>
 <li>an exporter name</li>
@@ -622,88 +637,18 @@ public class MyModel implements MyService {
     &lt;/instructions&gt;
 &lt;/configuration&gt;
 </code></pre>
-<h1><a href="#caching" id="caching">Caching</a></h1>
-<p>By default, Sling Models do not do any caching of the adaptation result and every request for a model class will result in a new instance of the model class. However, there are two notable cases when the adaptation result can be cached. The first case is when the adaptable extends the <code>SlingAdaptable</code> base class. Most significantly, this is the case for many <code>Resource</code> adaptables as <code>AbstractResource</code> extends <code>SlingAdaptable</code>.  <code>SlingAd [...]
-<pre><code><!-- TODO syntax marker (::java) disabled -->// assume that resource is an instance of some subclass of AbstractResource
-ModelClass object1 = resource.adaptTo(ModelClass.class); // creates new instance of ModelClass
-ModelClass object2 = resource.adaptTo(ModelClass.class); // SlingAdaptable returns the cached instance
-assert object1 == object2;
-</code></pre>
-<p>While this is true for <code>AbstractResource</code> subclasses, it is notably <strong>not</strong> the case for <code>SlingHttpServletRequest</code> as this class does not extend <code>SlingAdaptable</code>. So:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->// assume that request is some SlingHttpServletRequest object
-ModelClass object1 = request.adaptTo(ModelClass.class); // creates new instance of ModelClass
-ModelClass object2 = request.adaptTo(ModelClass.class); // creates another new instance of ModelClass
-assert object1 != object2;
-</code></pre>
-<p>Since API version 1.3.4, Sling Models <em>can</em> cache an adaptation result, regardless of the adaptable by specifying <code>cache = true</code> on the <code>@Model</code> annotation.</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
-public class ModelClass {}
-
-...
-
-// assume that request is some SlingHttpServletRequest object
-ModelClass object1 = request.adaptTo(ModelClass.class); // creates new instance of ModelClass
-ModelClass object2 = request.adaptTo(ModelClass.class); // Sling Models returns the cached instance
-assert object1 == object2;
-</code></pre>
-<p>When <code>cache = true</code> is specified, the adaptation result is cached regardless of how the adaptation is done:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
-public class ModelClass {}
-
-...
-
-// assume that request is some SlingHttpServletRequest object
-ModelClass object1 = request.adaptTo(ModelClass.class); // creates new instance of ModelClass
-ModelClass object2 = modelFactory.createModel(request, ModelClass.class); // Sling Models returns the cached instance
-assert object1 == object2;
-</code></pre>
-<p><a name="caching-self-reference-note"></a></p>
-<h3><a href="#a-note-about-cache-true-and-using-the-self-injector" id="a-note-about-cache-true-and-using-the-self-injector">A note about cache = true and using the self injector</a></h3>
-<p>In general, it is <strong>strongly</strong> discouraged to store a reference to the original adaptable using the <code>self</code> injector. Using implementation version 1.4.8 or below, storing the original adaptable in a Sling Model, can cause heap space exhaustion, crashing the JVM. Starting in version 1.4.10, storing the original adaptable will not crash the JVM, but it can cause unexpected behavior (e.g. a model being created twice, when it should be cached). The issue was first r [...]
-<p>The problem can be avoided by discarding the original adaptable when it is no longer needed. This can be done by setting affected field(s) to <code>null</code> at the end of the <code>@PostConstruct</code> annotated method:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
-public class CachableModelClass {
-    @Self
-    private SlingHttpServletRequest request;
-    
-    @PostConstruct
-    private void init() {
-      ... do something with request ...
-      
-      this.request = null;
-    }
-}
-</code></pre>
-<p>Alternatively, the same effect can be achieved using constructor injection, by not storing the reference to the adaptable:</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->@Model(adaptable = SlingHttpServletRequest.class, cache = true)
-public class CachableModelClass {
-    public CachableModelClass(SlingHttpServletRequest request) {
-      ... do something with request ...
-    }
-}
-</code></pre>
-<h1><a href="#via-types-since-api-134implementation-140" id="via-types-since-api-134implementation-140">Via Types (Since API 1.3.4/Implementation 1.4.0)</a></h1>
-<p>As discussed in the <a href="#via">Via</a> section above, it is possible to select a different adaptable than the original value using the <code>@Via</code> annotation. The following standard types are provided (all types are in the package <code>org.apache.sling.models.annotations.via</code>)</p>
-<table>
-<thead>
-<tr><th><code>@Via</code> type value             </th><th> Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>BeanProperty</code>  (default)     </td><td> Uses a JavaBean property from the adaptable.</td></tr>
-<tr><td><code>ChildResource</code>               </td><td> Uses a child resource from the adaptable, assuming the adaptable is a <code>Resource</code>. In case the adaptable is a <code>SlingHttpServletRequest</code> uses a wrapper overwriting the <code>getResource()</code> to point to the given child resource (<a href="https://issues.apache.org/jira/browse/SLING-7321">SLING-7321</a>).</td></tr>
-<tr><td><code>ForcedResourceType</code>          </td><td> Creates a wrapped resource with the provided resource type. If the adaptable is a <code>SlingHttpServletRequest</code>, a wrapped request is created as well to contain the wrapped resource.</td></tr>
-<tr><td><code>ResourceSuperType</code>           </td><td> Creates a wrapped resource with the resource type set to the adaptable's resource super type. If the adaptable is a <code>SlingHttpServletRequest</code>, a wrapped request is created as well to contain the wrapped resource.</td></tr>
-</tbody>
-</table>
-<h2><a href="#custom-via-type" id="custom-via-type">Custom Via Type</a></h2>
-<p>Defining your own type for the <code>@Via</code> annotation is a two step process. The first step is to create a marker class implementing the <code>@ViaProviderType</code> annotation. This class can be entirely empty, e.g.</p>
-<pre><code><!-- TODO syntax marker (::java) disabled -->public class MyCustomProviderType implements ViaProviderType {}
-</code></pre>
-<p>The second step is to create an OSGi service implementing the <code>ViaProvider</code> interface. This interface defines two methods:</p>
+<h1><a href="#discouraged-annotations" id="discouraged-annotations">Discouraged annotations</a></h1>
+<p>In earlier versions of Sling Models the use of the annotation <code>@Inject</code> was suggested and documented; but over time it turned out that it had 2 major issues:</p>
 <ul>
-<li><code>getType()</code> should return the marker class.</li>
-<li><code>getAdaptable()</code> should return the new adaptable or <code>ViaProvider.ORIGINAL</code> to indicate that the original adaptable should be used.</li>
+<li>This injection iterated through all available injectors and injected the first non-null value provided by an injector. This lead to unpredictable behavior, although the order is well-defined. Also @Source would have helped but it was rarely used.</li>
+<li>Also this turned out to be a performance bottleneck, especially if (optional) injections were not succesful, and then all other injectors have to be tried.</li>
 </ul>
+<p>For these reasons the injector-specific annotations have been created, and this documentation strongly recommends to use them. For the sake of completeness these discouraged annotations are still covered here briefly, but they should no longer be used.</p>
+<p><code>@Inject</code> :   marks a field or method as injectable</p>
+<p><code>@Named</code> :   declare a name for the injection (otherwise, defaults based on field or method name).</p>
+<p><code>@Optional</code> :   marks a field or method injection as optional</p>
+<p><code>@Filter</code> :   an OSGi service filter</p>
+<p><code>@Path</code> :   only used together with the resource-path injector to specify the path of a resource</p>
 </section></div></div>                            
                         </div>
                     </div>
@@ -715,7 +660,7 @@ public class CachableModelClass {
                             content/documentation/bundles/models.md
                         </a>
                     </div>                    <div class="revisionInfo">
-                        Last modified by <span class="author">Konrad Windszus</span> on <span class="comment">2022-12-13</span>
+                        Last modified by <span class="author">Stefan Seifert</span> on <span class="comment">2023-01-11</span>
                     </div><p>
                         Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project
     logo are trademarks of The Apache Software Foundation. All other marks mentioned 
diff --git a/sitemap.xml b/sitemap.xml
index be0f04ba1..ec1bbb7c8 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -5,373 +5,373 @@
     </url><url>
         <loc>https://sling.apache.org/news.html</loc><lastmod>2023-01-07</lastmod>
     </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/models.html</loc><lastmod>2022-12-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/osgi-installer.html</loc><lastmod>2022-12-05</lastmod>
+        <loc>https://sling.apache.org/documentation/bundles/models.html</loc><lastmod>2023-01-11</lastmod>
     </url><url>
         <loc>https://sling.apache.org/links.html</loc><lastmod>2022-12-06</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/osgi-installer.html</loc><lastmod>2022-12-05</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/repository-initialization.html</loc><lastmod>2022-12-05</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/service-authentication.html</loc><lastmod>2022-12-02</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/ide-tooling.html</loc><lastmod>2022-11-28</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/managing-permissions-jackrabbit-accessmanager.html</loc><lastmod>2022-11-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/project-information/project-team.html</loc><lastmod>2022-10-31</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/old-stuff/sling-api.html</loc><lastmod>2018-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/old-stuff/scriptengineintegration/groovy-support.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/old-stuff/assembly.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/news/sling-ide-tooling-12-released.html</loc><lastmod>2018-01-21</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/news/sling-10-released.html</loc><lastmod>2018-02-06</lastmod>
     </url><url>
         <loc>https://sling.apache.org/guides.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation.html</loc><lastmod>2022-03-17</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/tutorials-how-tos/installing-and-upgrading-bundles.html</loc><lastmod>2018-06-01</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/sling-properties.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/resources.html</loc><lastmod>2022-07-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/filters.html</loc><lastmod>2021-03-02</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/default-mapping-and-rendering.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-authenticationhandler.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/architecture.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/karaf.html</loc><lastmod>2022-03-06</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/feature-model/howtos/kickstart.html</loc><lastmod>2020-06-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development.html</loc><lastmod>2022-05-11</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/sling.html</loc><lastmod>2019-01-14</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/repository-based-development.html</loc><lastmod>2017-10-07</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/monitoring-requests.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/maven-archetypes.html</loc><lastmod>2018-03-31</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/jcr-mock.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/htl-maven-plugin.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/embedding-sling.html</loc><lastmod>2018-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/client-request-logging.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/web-console-extensions.html</loc><lastmod>2022-05-31</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-query.html</loc><lastmod>2020-06-16</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-query/modifiers.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-query/basic-ideas.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/readers.html</loc><lastmod>2021-10-01</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-oak-restrictions.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/servlet-helpers.html</loc><lastmod>2020-06-16</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/scripting/scripting-htl.html</loc><lastmod>2022-10-26</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/resource-editor.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/rendering-content-default-get-servlets.html</loc><lastmod>2022-01-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/nosql-resource-providers.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/manipulating-content-the-slingpostservlet-servlets-post.html</loc><lastmod>2021-07-21</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/jcr-installer-provider.html</loc><lastmod>2020-09-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/graphql-core.html</loc><lastmod>2021-07-26</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/discovery-api-and-impl.html</loc><lastmod>2018-07-17</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/context-aware-configuration/context-aware-configuration-override.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/content-distribution.html</loc><lastmod>2020-05-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/commons-crypto.html</loc><lastmod>2019-12-14</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/apache-sling-commons-thread-pool.html</loc><lastmod>2022-01-10</lastmod>
     </url><url>
         <loc>https://sling.apache.org/project-information/project-license.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/old-stuff/servlet-resolution.html</loc><lastmod>2018-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/old-stuff/run-modes-org-apache-sling-runmode.html</loc><lastmod>2018-07-17</lastmod>
     </url><url>
         <loc>https://sling.apache.org/news/sling-ide-tooling-11-released.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/media.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/errors/404.html</loc><lastmod>2018-12-19</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/tutorials-how-tos.html</loc><lastmod>2020-08-06</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html</loc><lastmod>2018-07-17</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/wrap-or-decorate-resources.html</loc><lastmod>2021-05-19</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/sling-api-crud-support.html</loc><lastmod>2021-11-23</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/request-parameters.html</loc><lastmod>2018-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/featureflags.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/authentication.html</loc><lastmod>2018-05-14</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-authenticationhandler/openid-authenticationhandler.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/adapters.html</loc><lastmod>2022-08-08</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/getting-started.html</loc><lastmod>2022-03-21</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/feature-model/howtos/create-sling-fm.html</loc><lastmod>2020-06-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/version-policy.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/sling-testing-tools.html</loc><lastmod>2017-12-09</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/release-management.html</loc><lastmod>2022-09-21</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/maventipsandtricks.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/logging.html</loc><lastmod>2022-06-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/issue-tracker.html</loc><lastmod>2018-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/hamcrest.html</loc><lastmod>2021-11-23</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/deprecating-sling-modules.html</loc><lastmod>2020-03-31</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/configuration.html</loc><lastmod>2019-07-26</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/validation.html</loc><lastmod>2017-11-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-query/vs-jcr.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-query/methods.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-pipes.html</loc><lastmod>2022-03-04</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/logical.html</loc><lastmod>2021-01-28</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-health-checks.html</loc><lastmod>2020-10-27</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/scripting.html</loc><lastmod>2021-08-23</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/scheduler-service-commons-scheduler.html</loc><lastmod>2022-01-04</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/resource-access-security.html</loc><lastmod>2021-11-04</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/output-rewriting-pipelines-org-apache-sling-rewriter.html</loc><lastmod>2018-07-10</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/managing-users-and-groups-jackrabbit-usermanager.html</loc><lastmod>2022-02-04</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/internationalization-support-i18n.html</loc><lastmod>2021-03-11</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/file-installer-provider.html</loc><lastmod>2021-12-01</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/datasource-providers.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/context-aware-configuration/context-aware-configuration-default-implementation.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/connection-timeout-agent.html</loc><lastmod>2019-06-27</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/caching-services.html</loc><lastmod>2017-11-22</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/accessing-filesystem-resources-extensions-fsresource.html</loc><lastmod>2019-01-14</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/project-information.html</loc><lastmod>2021-07-07</lastmod>
     </url><url>
         <loc>https://sling.apache.org/project-information/apache-sling-community-roles-and-processes.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/old-stuff/scriptengineintegration.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/old-stuff/request-processing.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/news/sling-launchpad-9-released.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/news/sling-12-released.html</loc><lastmod>2022-03-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/errors/403.html</loc><lastmod>2017-10-07</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/tutorials-how-tos/testing-sling-based-applications.html</loc><lastmod>2017-12-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/tutorials-how-tos/getting-resources-and-properties-in-sling.html</loc><lastmod>2018-01-05</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/url-decomposition.html</loc><lastmod>2021-05-19</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/servlets.html</loc><lastmod>2022-05-11</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/request-listeners.html</loc><lastmod>2018-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/errorhandling.html</loc><lastmod>2017-11-22</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-tasks.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-authenticationhandler/form-based-authenticationhandler.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/pax-exam-utils.html</loc><lastmod>2017-12-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/getting-started/discover-sling-in-15-minutes.html</loc><lastmod>2019-07-09</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/feature-model/howtos/create-sling-composite.html</loc><lastmod>2020-06-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/testing-paxexam.html</loc><lastmod>2021-06-16</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/sling-mock.html</loc><lastmod>2022-08-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/osgi-mock.html</loc><lastmod>2019-03-17</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/maven-usage.html</loc><lastmod>2017-11-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/jsr-305.html</loc><lastmod>2018-08-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/getting-and-building-sling.html</loc><lastmod>2018-02-03</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles.html</loc><lastmod>2021-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-query/selectors.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/writers.html</loc><lastmod>2022-07-22</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-health-check-tool.html</loc><lastmod>2020-08-04</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/resource-merger.html</loc><lastmod>2022-08-06</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/dynamic-includes.html</loc><lastmod>2018-09-12</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/content-package-installer-factory.html</loc><lastmod>2021-05-10</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/bundle-resources-extensions-bundleresource.html</loc><lastmod>2018-02-04</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/security/log4shell.html</loc><lastmod>2021-12-17</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/old-stuff.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/old-stuff/launch-sling.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/news/sling-11-released.html</loc><lastmod>2018-10-23</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/tutorials-how-tos/46-line-blog.html</loc><lastmod>2017-11-22</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/dispatching-requests.html</loc><lastmod>2018-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-actors.html</loc><lastmod>2017-11-22</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/feature-model/howtos/sling-with-custom-project.html</loc><lastmod>2020-06-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/slingstart.html</loc><lastmod>2022-03-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/null-analysis.html</loc><lastmod>2018-08-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/jspc.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/feature-model.html</loc><lastmod>2020-06-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/xml-support.html</loc><lastmod>2017-11-22</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-query/operators.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/samples.html</loc><lastmod>2021-01-28</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-health-check-tool-deprecated.html</loc><lastmod>2019-04-03</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/resource-filter.html</loc><lastmod>2021-01-02</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/org-apache-sling-junit-bundles.html</loc><lastmod>2020-10-22</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/log-tracers.html</loc><lastmod>2018-07-17</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/distribution.html</loc><lastmod>2017-12-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/content-loading-jcr-contentloader.html</loc><lastmod>2021-12-08</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html</loc><lastmod>2022-06-15</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/old-stuff/sling-api.html</loc><lastmod>2018-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/old-stuff/assembly.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/news/sling-10-released.html</loc><lastmod>2018-02-06</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation.html</loc><lastmod>2022-03-17</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/resources.html</loc><lastmod>2022-07-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/default-mapping-and-rendering.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/architecture.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/feature-model/howtos/kickstart.html</loc><lastmod>2020-06-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/sling.html</loc><lastmod>2019-01-14</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/monitoring-requests.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/jcr-mock.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/embedding-sling.html</loc><lastmod>2018-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/web-console-extensions.html</loc><lastmod>2022-05-31</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-query/modifiers.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/readers.html</loc><lastmod>2021-10-01</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/servlet-helpers.html</loc><lastmod>2020-06-16</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/resource-editor.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/nosql-resource-providers.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/jcr-installer-provider.html</loc><lastmod>2020-09-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/discovery-api-and-impl.html</loc><lastmod>2018-07-17</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/content-distribution.html</loc><lastmod>2020-05-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/apache-sling-commons-thread-pool.html</loc><lastmod>2022-01-10</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/old-stuff/servlet-resolution.html</loc><lastmod>2018-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/media.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/tutorials-how-tos.html</loc><lastmod>2020-08-06</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/wrap-or-decorate-resources.html</loc><lastmod>2021-05-19</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/request-parameters.html</loc><lastmod>2018-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/authentication.html</loc><lastmod>2018-05-14</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/adapters.html</loc><lastmod>2022-08-08</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/feature-model/howtos/create-sling-fm.html</loc><lastmod>2020-06-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/sling-testing-tools.html</loc><lastmod>2017-12-09</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/maventipsandtricks.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/issue-tracker.html</loc><lastmod>2018-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/deprecating-sling-modules.html</loc><lastmod>2020-03-31</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/validation.html</loc><lastmod>2017-11-22</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-query/methods.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/logical.html</loc><lastmod>2021-01-28</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/scripting.html</loc><lastmod>2021-08-23</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/resource-access-security.html</loc><lastmod>2021-11-04</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/internationalization-support-i18n.html</loc><lastmod>2021-03-11</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/datasource-providers.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/connection-timeout-agent.html</loc><lastmod>2019-06-27</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/bundles/accessing-filesystem-resources-extensions-fsresource.html</loc><lastmod>2019-01-14</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/project-information.html</loc><lastmod>2021-07-07</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/old-stuff/scriptengineintegration.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/news/sling-launchpad-9-released.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/tutorials-how-tos/testing-sling-based-applications.html</loc><lastmod>2017-12-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/url-decomposition.html</loc><lastmod>2021-05-19</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/request-listeners.html</loc><lastmod>2018-07-13</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-tasks.html</loc><lastmod>2017-09-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/pax-exam-utils.html</loc><lastmod>2017-12-29</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/feature-model/howtos/create-sling-composite.html</loc><lastmod>2020-06-18</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/sling-mock.html</loc><lastmod>2022-08-22</lastmod>
-    </url><url>
-        <loc>https://sling.apache.org/documentation/development/maven-usage.html</loc><lastmod>2017-11-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/dependency-management.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles.html</loc><lastmod>2021-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/subsystem-installer-factory.html</loc><lastmod>2020-03-30</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-query/selectors.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-query/hierarchy-operators.html</loc><lastmod>2018-01-04</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/writers.html</loc><lastmod>2022-07-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-pipes/execution-monitoring.html</loc><lastmod>2021-01-28</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-health-check-tool.html</loc><lastmod>2020-08-04</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/scripting/scripting-thymeleaf.html</loc><lastmod>2017-11-22</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/resource-merger.html</loc><lastmod>2022-08-06</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/request-analysis.html</loc><lastmod>2017-11-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/mime-type-support-commons-mime.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/managing-permissions-jackrabbit-accessmanager.html</loc><lastmod>2022-11-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/installer-provider-installhook.html</loc><lastmod>2021-07-24</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/dynamic-includes.html</loc><lastmod>2018-09-12</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/context-aware-configuration/context-aware-configuration.html</loc><lastmod>2019-11-15</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/content-package-installer-factory.html</loc><lastmod>2021-05-10</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/configuration-installer-factory.html</loc><lastmod>2021-08-16</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/bundle-resources-extensions-bundleresource.html</loc><lastmod>2018-02-04</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/apidocs.html</loc><lastmod>2022-03-21</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/security/log4shell.html</loc><lastmod>2021-12-17</lastmod>
     </url><url>
         <loc>https://sling.apache.org/project-information/security.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/old-stuff.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/old-stuff/scriptengineintegration/xslt-processing-pipeline.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/old-stuff/launch-sling.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/news/sling-launchpad-8-released.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/news/sling-11-released.html</loc><lastmod>2018-10-23</lastmod>
     </url><url>
         <loc>https://sling.apache.org/index.html</loc><lastmod>2021-07-30</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/tutorials-how-tos/jackrabbit-persistence.html</loc><lastmod>2018-07-17</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/tutorials-how-tos/46-line-blog.html</loc><lastmod>2017-11-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/the-sling-launchpad.html</loc><lastmod>2022-03-21</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/mappings-for-resource-resolution.html</loc><lastmod>2022-02-07</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/dispatching-requests.html</loc><lastmod>2018-07-13</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-framework.html</loc><lastmod>2021-04-21</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/the-sling-engine/authentication/authentication-actors.html</loc><lastmod>2017-11-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/legacy/logging.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/feature-model/howtos/sling-with-custom-project.html</loc><lastmod>2020-06-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/feature-model/feature-model-howto.html</loc><lastmod>2020-06-18</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/slingstart.html</loc><lastmod>2022-03-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/resourceresolver-mock.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/null-analysis.html</loc><lastmod>2018-08-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/maven-launchpad-plugin.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/jspc.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/ide-tooling/ide-tooling-incremental-build.html</loc><lastmod>2018-12-17</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/development/feature-model.html</loc><lastmod>2020-06-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/development/content-packages.html</loc><lastmod>2022-03-08</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/xml-support.html</loc><lastmod>2017-11-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-settings-org-apache-sling-settings.html</loc><lastmod>2020-09-18</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-query/operators.html</loc><lastmod>2017-09-29</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-query/examples.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-pipes/samples.html</loc><lastmod>2021-01-28</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/sling-pipes/bindings.html</loc><lastmod>2021-03-31</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/sling-health-check-tool-deprecated.html</loc><lastmod>2019-04-03</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/scripting/scripting-jsp.html</loc><lastmod>2018-07-13</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/resource-filter.html</loc><lastmod>2021-01-02</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/org-apache-sling-junit-bundles.html</loc><lastmod>2020-10-22</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/metrics.html</loc><lastmod>2018-07-17</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/log-tracers.html</loc><lastmod>2018-07-17</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/hapi.html</loc><lastmod>2017-12-18</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/distribution.html</loc><lastmod>2017-12-18</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/context-aware-configuration/context-aware-configuration-spi.html</loc><lastmod>2017-09-29</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/content-loading-jcr-contentloader.html</loc><lastmod>2021-12-08</lastmod>
     </url><url>
         <loc>https://sling.apache.org/documentation/bundles/commons-html-utilities.html</loc><lastmod>2019-07-18</lastmod>
+    </url><url>
+        <loc>https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html</loc><lastmod>2022-06-15</lastmod>
     </url><url>
         <loc>https://sling.apache.org/contributing.html</loc><lastmod>2022-07-01</lastmod>
     </url><url>