SLING-10751 update to latest Sling Content Parser with split up dependencies
diff --git a/bnd.bnd b/bnd.bnd
index 5cb1719..b75cf0a 100644
--- a/bnd.bnd
+++ b/bnd.bnd
@@ -1,2 +1,3 @@
-Export-Packages: !org.apache.sling.jcr.contentparser,*
--includeresource: @org.apache.sling.jcr.contentparser-[0-9.]*.jar
+-includeresource: @org.apache.sling.contentparser.(api|json|xml|xml-jcr)-[0-9.]*.jar
+-exportcontents: !org.apache.sling.contentparser.*
+-noimportjava: true
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3aa7dea..012b128 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,6 +80,12 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.framework</artifactId>
+            <version>1.8.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
             <version>2.16.4</version>
@@ -100,13 +106,13 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <version>3.6</version>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-collections4</artifactId>
             <version>4.1</version>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
@@ -124,13 +130,43 @@
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.osgi</artifactId>
             <version>2.4.0</version>
-            <scope>compile</scope>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.jcr.contentparser</artifactId>
-            <version>1.2.6</version>
-            <scope>compile</scope>
+            <artifactId>org.apache.sling.contentparser.api</artifactId>
+            <version>2.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.contentparser.json</artifactId>
+            <version>2.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.contentparser.xml</artifactId>
+            <version>2.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.contentparser.xml-jcr</artifactId>
+            <version>2.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>oak-jcr</artifactId>
+            <version>1.8.2</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit.vault</groupId>
+            <artifactId>org.apache.jackrabbit.vault</artifactId>
+            <version>3.1.18</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.jetbrains</groupId>
@@ -149,13 +185,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-api</artifactId>
-            <!-- Overwrite old version from org.apache.sling.jcr.contentparser -->
-            <version>2.16.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.logging-mock</artifactId>
             <version>2.0.0</version>
@@ -173,5 +202,11 @@
             <version>1.1.1</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.contentparser.testutils</artifactId>
+            <version>2.0.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java b/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
index e5f898c..5542d22 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
@@ -37,7 +37,7 @@
 import org.apache.sling.fsprovider.internal.mapper.FileVaultResourceMapper;
 import org.apache.sling.fsprovider.internal.parser.ContentFileCache;
 import org.apache.sling.fsprovider.internal.parser.ContentFileTypes;
-import org.apache.sling.jcr.contentparser.ContentType;
+import org.apache.sling.fsprovider.internal.parser.ContentType;
 import org.apache.sling.spi.resource.provider.ObservationReporter;
 import org.apache.sling.spi.resource.provider.ProviderContext;
 import org.apache.sling.spi.resource.provider.ResolveContext;
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFile.java b/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFile.java
index 4c75a4d..1867c90 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFile.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFile.java
@@ -26,7 +26,7 @@
 import org.apache.sling.fsprovider.internal.mapper.valuemap.ValueMapUtil;
 import org.apache.sling.fsprovider.internal.parser.ContentElement;
 import org.apache.sling.fsprovider.internal.parser.ContentFileCache;
-import org.apache.sling.jcr.contentparser.ContentType;
+import org.apache.sling.fsprovider.internal.parser.ContentType;
 
 /**
  * Reference to a file that contains a content fragment (e.g. JSON, JCR XML).
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java b/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java
index 95b6d37..75c98d2 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java
@@ -41,13 +41,13 @@
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.DeepReadValueMapDecorator;
+import org.apache.sling.contentparser.api.ParserOptions;
 import org.apache.sling.fsprovider.internal.ContentFileExtensions;
 import org.apache.sling.fsprovider.internal.FileStatCache;
 import org.apache.sling.fsprovider.internal.FsResourceProvider;
 import org.apache.sling.fsprovider.internal.mapper.jcr.FsNode;
 import org.apache.sling.fsprovider.internal.mapper.valuemap.ValueMapDecorator;
 import org.apache.sling.fsprovider.internal.parser.ContentFileCache;
-import org.apache.sling.jcr.contentparser.ParserOptions;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java b/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java
index 9aac1fd..3d29c31 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java
@@ -43,7 +43,7 @@
 import org.apache.sling.fsprovider.internal.FsResourceMapper;
 import org.apache.sling.fsprovider.internal.parser.ContentElement;
 import org.apache.sling.fsprovider.internal.parser.ContentFileCache;
-import org.apache.sling.jcr.contentparser.ContentType;
+import org.apache.sling.fsprovider.internal.parser.ContentType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentElementHandler.java b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentElementHandler.java
index 760aac4..1303b7f 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentElementHandler.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentElementHandler.java
@@ -23,7 +23,7 @@
 import java.util.regex.Pattern;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.jcr.contentparser.ContentHandler;
+import org.apache.sling.contentparser.api.ContentHandler;
 
 /**
  * {@link ContentHandler} implementation that produces a tree of {@link ContentElement} items.
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileCache.java b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileCache.java
index 904d6c7..3762bd3 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileCache.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileCache.java
@@ -23,7 +23,6 @@
 import java.util.Map;
 
 import org.apache.commons.collections4.map.LRUMap;
-import org.apache.sling.jcr.contentparser.ContentType;
 
 /**
  * Cache for parsed content from content files (e.g. JSON, JCR XML).
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java
index 1bdfdf1..0ec28b7 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java
@@ -27,14 +27,15 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.EnumSet;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.jcr.contentparser.ContentParser;
-import org.apache.sling.jcr.contentparser.ContentParserFactory;
-import org.apache.sling.jcr.contentparser.ContentType;
-import org.apache.sling.jcr.contentparser.JsonParserFeature;
-import org.apache.sling.jcr.contentparser.ParserOptions;
+import org.apache.sling.contentparser.api.ContentParser;
+import org.apache.sling.contentparser.api.ParserOptions;
+import org.apache.sling.contentparser.json.JSONParserFeature;
+import org.apache.sling.contentparser.json.JSONParserOptions;
+import org.apache.sling.contentparser.json.internal.JSONContentParser;
+import org.apache.sling.contentparser.xml.internal.XMLContentParser;
+import org.apache.sling.contentparser.xml.jcr.internal.JCRXMLContentParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,22 +46,12 @@
 
     private static final Logger log = LoggerFactory.getLogger(ContentFileParserUtil.class);
 
-    private static final ContentParser JSON_PARSER;
-    static {
-        // workaround for JsonProvider classloader issue until https://issues.apache.org/jira/browse/GERONIMO-6560 is fixed
-        ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
-        try {
-            Thread.currentThread().setContextClassLoader(ContentFileParserUtil.class.getClassLoader());
-            // support comments and tick quotes for JSON parsing - same as in JCR content loader
-            JSON_PARSER = ContentParserFactory.create(ContentType.JSON, new ParserOptions()
-                    .jsonParserFeatures(EnumSet.of(JsonParserFeature.COMMENTS, JsonParserFeature.QUOTE_TICK)));
-        }
-        finally {
-            Thread.currentThread().setContextClassLoader(oldClassLoader);
-        }
-    }
-    private static final ContentParser JCR_XML_PARSER = ContentParserFactory.create(ContentType.JCR_XML);
-    private static final ContentParser XML_PARSER = ContentParserFactory.create(ContentType.XML);
+    private static final ParserOptions DEFAULT_PARSER_OPTIONS = new ParserOptions();
+    private static final ParserOptions JSON_PARSER_OPTIONS = new JSONParserOptions()
+            .withFeatures(JSONParserFeature.COMMENTS, JSONParserFeature.QUOTE_TICK);
+    private static final ContentParser JSON_PARSER = new JSONContentParser();
+    private static final ContentParser JCR_XML_PARSER = new JCRXMLContentParser();
+    private static final ContentParser XML_PARSER = new XMLContentParser();
 
     private ContentFileParserUtil() {
         // static methods only
@@ -100,11 +91,11 @@
         try {
             switch (contentType) {
             case JSON:
-                return parse(JSON_PARSER, file);
+                return parse(JSON_PARSER, file, JSON_PARSER_OPTIONS);
             case XML:
-                return parse(XML_PARSER, file);
+                return parse(XML_PARSER, file, DEFAULT_PARSER_OPTIONS);
             case JCR_XML:
-                return parse(JCR_XML_PARSER, file);
+                return parse(JCR_XML_PARSER, file, DEFAULT_PARSER_OPTIONS);
                default:
                     throw new IllegalArgumentException("Unexpected content type: " + contentType);
             }
@@ -115,11 +106,11 @@
         return null;
     }
 
-    private static ContentElement parse(ContentParser contentParser, File file) throws IOException {
+    private static ContentElement parse(ContentParser contentParser, File file, ParserOptions parserOptions) throws IOException {
         try (FileInputStream fis = new FileInputStream(file);
                 BufferedInputStream bis = new BufferedInputStream(fis)) {
             ContentElementHandler handler = new ContentElementHandler();
-            contentParser.parse(handler, bis);
+            contentParser.parse(handler, bis, parserOptions);
             return handler.getRoot();
         }
     }
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java
index 6912c46..87cabac 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.fsprovider.internal.parser;
 
-import org.apache.sling.jcr.contentparser.ContentType;
-
 /**
  * Content file types.
  */
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentType.java b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentType.java
new file mode 100644
index 0000000..d21888e
--- /dev/null
+++ b/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentType.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.fsprovider.internal.parser;
+
+/**
+ * Content types.
+ */
+public enum ContentType {
+
+    /**
+     * JSON content descriptor file.
+     */
+    JSON("json"),
+
+    /**
+     * XML content descriptor file.
+     */
+    XML("xml"),
+
+    /**
+     * JCR XML content (FileVault XML). Also known as extended document view XML.
+     * Extends the regular document view as specified by JCR 2.0 by specifics like
+     * multivalue and typing information. Is used by Jackrabbit FileVault.
+     */
+    JCR_XML("jcr.xml");
+
+
+    private final String extension;
+
+    private ContentType(String extension) {
+        this.extension = extension;
+    }
+
+    /**
+     * @return Extension
+     */
+    public String getExtension() {
+        return extension;
+    }
+
+}
diff --git a/src/test/java/org/apache/sling/fsprovider/internal/FileMonitorTest.java b/src/test/java/org/apache/sling/fsprovider/internal/FileMonitorTest.java
index d7c4e90..71dc901 100644
--- a/src/test/java/org/apache/sling/fsprovider/internal/FileMonitorTest.java
+++ b/src/test/java/org/apache/sling/fsprovider/internal/FileMonitorTest.java
@@ -23,6 +23,7 @@
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.List;
 
@@ -107,7 +108,7 @@
         assertTrue(changes.isEmpty());
 
         File file1c = new File(tempDir, "folder1/file1c.txt");
-        FileUtils.write(file1c, "newcontent");
+        FileUtils.write(file1c, "newcontent", StandardCharsets.UTF_8);
 
         Thread.sleep(WAIT_INTERVAL);
 
@@ -182,7 +183,7 @@
         assertTrue(changes.isEmpty());
 
         File file1c = new File(tempDir, "folder1/file1c.json");
-        FileUtils.write(file1c, "{\"prop1\":\"value1\",\"child1\":{\"prop2\":\"value1\"}}");
+        FileUtils.write(file1c, "{\"prop1\":\"value1\",\"child1\":{\"prop2\":\"value1\"}}", StandardCharsets.UTF_8);
 
         Thread.sleep(WAIT_INTERVAL);
 
diff --git a/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java b/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java
index b143c93..1e06283 100644
--- a/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java
+++ b/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java
@@ -23,6 +23,7 @@
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.List;
 
@@ -113,7 +114,7 @@
         assertTrue(changes.isEmpty());
 
         File file = new File(tempDir, "jcr_root/content/dam/talk.png/_jcr_content/renditions/text.txt");
-        FileUtils.write(file, "newcontent");
+        FileUtils.write(file, "newcontent", StandardCharsets.UTF_8);
 
         Thread.sleep(WAIT_INTERVAL);
 
@@ -193,7 +194,7 @@
                 + "<jcr:root xmlns:jcr=\"http://www.jcp.org/jcr/1.0\" xmlns:app=\"http://sample.com/jcr/app/1.0\" "
                 + "xmlns:sling=\"http://sling.apache.org/jcr/sling/1.0\" jcr:primaryType=\"app:Page\">\n"
                 + "<jcr:content jcr:primaryType=\"app:PageContent\"/>\n"
-                + "</jcr:root>");
+                + "</jcr:root>", StandardCharsets.UTF_8);
 
         Thread.sleep(WAIT_INTERVAL);
 
diff --git a/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java b/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
index b5b38c3..002a542 100644
--- a/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
+++ b/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
@@ -46,9 +46,9 @@
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.contentparser.api.ParserOptions;
 import org.apache.sling.fsprovider.internal.TestUtils.RegisterFsResourcePlugin;
 import org.apache.sling.hamcrest.ResourceMatchers;
-import org.apache.sling.jcr.contentparser.ParserOptions;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.apache.sling.testing.mock.sling.junit.SlingContextBuilder;