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;