Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.time.ZoneOffset.UTC;
import static javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION;
import static org.exist.storage.serializers.EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION;
import static org.exist.storage.serializers.EXistOutputKeys.OUTPUT_DOCTYPE;
import static org.xmldb.api.base.ResourceType.XML_RESOURCE;

Expand Down Expand Up @@ -150,7 +149,6 @@ public class InteractiveClient {
DEFAULT_PROPERTIES.setProperty(EDITOR, EDIT_CMD);
DEFAULT_PROPERTIES.setProperty(INDENT, "true");
DEFAULT_PROPERTIES.setProperty(OMIT_XML_DECLARATION, "no");
DEFAULT_PROPERTIES.setProperty(OMIT_ORIGINAL_XML_DECLARATION, "no");
DEFAULT_PROPERTIES.setProperty(OUTPUT_DOCTYPE, "true");
DEFAULT_PROPERTIES.setProperty(ENCODING, ENCODING_DEFAULT.name());
DEFAULT_PROPERTIES.setProperty(COLORS, "false");
Expand Down
12 changes: 1 addition & 11 deletions exist-core/src/main/java/org/exist/http/RESTServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ public class RESTServer {
public final static Properties defaultOutputKeysProperties = new Properties();

static {
defaultOutputKeysProperties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "no");
defaultOutputKeysProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
defaultOutputKeysProperties.setProperty(OutputKeys.INDENT, "yes");
defaultOutputKeysProperties.setProperty(OutputKeys.MEDIA_TYPE,
Expand Down Expand Up @@ -368,14 +367,6 @@ public void doGet(final DBBroker broker, final Txn transaction, final HttpServle
final String omitXmlDeclaration = broker.getConfiguration().getProperty(Serializer.PROPERTY_OMIT_XML_DECLARATION, "yes");
outputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, omitXmlDeclaration);
}
if ((option = getParameter(request, Omit_Original_Xml_Declaration)) != null) {
// take user query-string specified omit-original-xml-declaration setting
outputProperties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, option);
} else {
// set omit-original-xml-declaration by configuration
final String omitOriginalXmlDeclaration = broker.getConfiguration().getProperty(Serializer.PROPERTY_OMIT_ORIGINAL_XML_DECLARATION, "no");
outputProperties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, omitOriginalXmlDeclaration);
}
if ((option = getParameter(request, Source)) != null && !safeMode) {
source = "yes".equals(option);
}
Expand Down Expand Up @@ -498,10 +489,9 @@ public void doGet(final DBBroker broker, final Txn transaction, final HttpServle
// found an XQuery or XProc resource, fixup request values
final String pathInfo = pathUri.trimFromBeginning(servletPath).toString();

// reset any output-doctype, omit-xml-declaration, or omit-original-xml-declaration properties, as these can conflict with others set via XQuery Serialization settings
// reset any output-doctype, or omit-xml-declaration properties, as these can conflict with others set via XQuery Serialization settings
outputProperties.setProperty(EXistOutputKeys.OUTPUT_DOCTYPE, "no");
outputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
outputProperties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "yes");

// Should we display the source of the XQuery or XProc or execute it
final Descriptor descriptor = Descriptor.getDescriptorSingleton();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -368,18 +368,7 @@ enum RESTServerParameter {
*
* The value of the parameter should be either "yes" or "no".
*/
Omit_Xml_Declaration,

/**
* Can be used in the Query String of a GET request
* to indicate that the original persisted XML Declaration of an XML document should not
* be serialized if present.
*
* Contexts: GET
*
* The value of the parameter should be either "yes" or "no".
*/
Omit_Original_Xml_Declaration;
Omit_Xml_Declaration;

/**
* Get the parameter key that is
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ public class EXistOutputKeys {
*/
public static final String ITEM_SEPARATOR = "item-separator";

public static final String OMIT_ORIGINAL_XML_DECLARATION = "omit-original-xml-declaration";

public static final String OUTPUT_DOCTYPE = "output-doctype";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.transform.OutputKeys;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
Expand Down Expand Up @@ -118,7 +119,7 @@
}

if (doc.getXmlDeclaration() != null){
if ("no".equals(getProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "no"))) {
if ("no".equals(getProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"))) {

Check notice on line 122 in exist-core/src/main/java/org/exist/storage/serializers/NativeSerializer.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

exist-core/src/main/java/org/exist/storage/serializers/NativeSerializer.java#L122

These nested if statements could be combined
Comment on lines 121 to +122
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Join this if statements as suggested by Codacy

final XMLDeclarationImpl xmlDecl = doc.getXmlDeclaration();
receiver.declaration(xmlDecl.getVersion(), xmlDecl.getEncoding(), xmlDecl.getStandalone());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,6 @@ public abstract class Serializer implements XMLReader {
public static final String CONFIGURATION_ELEMENT_NAME = "serializer";
public static final String OMIT_XML_DECLARATION_ATTRIBUTE = "omit-xml-declaration";
public static final String PROPERTY_OMIT_XML_DECLARATION = "serialization.omit-xml-declaration";
public static final String OMIT_ORIGINAL_XML_DECLARATION_ATTRIBUTE = "omit-original-xml-declaration";
public static final String PROPERTY_OMIT_ORIGINAL_XML_DECLARATION = "serialization.omit-original-xml-declaration";
public static final String OUTPUT_DOCTYPE_ATTRIBUTE = "output-doctype";
public static final String PROPERTY_OUTPUT_DOCTYPE = "serialization.output-doctype";
public static final String ENABLE_XINCLUDE_ATTRIBUTE = "enable-xinclude";
Expand Down Expand Up @@ -209,9 +207,16 @@ public Serializer(final DBBroker broker, final Configuration config, final List<
this.customMatchListeners = new CustomMatchListenerFactory(broker, config, chainOfReceivers);
this.receiver = xinclude;

defaultOutputProperties.setProperty(EXistOutputKeys.PROCESS_XSL_PI, config.getProperty(PROPERTY_ENABLE_XSL, "no"));

@Nullable String option = null;
if ((option = (String) config.getProperty(PROPERTY_ENABLE_XSL)) != null) {
defaultOutputProperties.setProperty(EXistOutputKeys.PROCESS_XSL_PI, option);
}

if ((option = (String) config.getProperty(PROPERTY_OMIT_XML_DECLARATION)) != null) {
defaultOutputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, option);
} else if ((option = (String) config.getProperty(OMIT_XML_DECLARATION_ATTRIBUTE)) != null) {
defaultOutputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, option);
}

if ((option = (String) config.getProperty(PROPERTY_ENABLE_XINCLUDE)) != null) {
defaultOutputProperties.setProperty(EXistOutputKeys.EXPAND_XINCLUDES, option);
Expand Down
3 changes: 0 additions & 3 deletions exist-core/src/main/java/org/exist/util/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,15 +172,13 @@
import static org.exist.storage.serializers.Serializer.ENABLE_XINCLUDE_ATTRIBUTE;
import static org.exist.storage.serializers.Serializer.ENABLE_XSL_ATTRIBUTE;
import static org.exist.storage.serializers.Serializer.INDENT_ATTRIBUTE;
import static org.exist.storage.serializers.Serializer.OMIT_ORIGINAL_XML_DECLARATION_ATTRIBUTE;
import static org.exist.storage.serializers.Serializer.OMIT_XML_DECLARATION_ATTRIBUTE;
import static org.exist.storage.serializers.Serializer.OUTPUT_DOCTYPE_ATTRIBUTE;
import static org.exist.storage.serializers.Serializer.PROPERTY_ADD_EXIST_ID;
import static org.exist.storage.serializers.Serializer.PROPERTY_COMPRESS_OUTPUT;
import static org.exist.storage.serializers.Serializer.PROPERTY_ENABLE_XINCLUDE;
import static org.exist.storage.serializers.Serializer.PROPERTY_ENABLE_XSL;
import static org.exist.storage.serializers.Serializer.PROPERTY_INDENT;
import static org.exist.storage.serializers.Serializer.PROPERTY_OMIT_ORIGINAL_XML_DECLARATION;
import static org.exist.storage.serializers.Serializer.PROPERTY_OMIT_XML_DECLARATION;
import static org.exist.storage.serializers.Serializer.PROPERTY_OUTPUT_DOCTYPE;
import static org.exist.storage.serializers.Serializer.PROPERTY_TAG_MATCHING_ATTRIBUTES;
Expand Down Expand Up @@ -757,7 +755,6 @@ private void configureHtmlToXmlParser(final Element parser) throws DatabaseConfi
*/
private void configureSerializer(final Element serializer) {
configureProperty(serializer, OMIT_XML_DECLARATION_ATTRIBUTE, PROPERTY_OMIT_XML_DECLARATION);
configureProperty(serializer, OMIT_ORIGINAL_XML_DECLARATION_ATTRIBUTE, PROPERTY_OMIT_ORIGINAL_XML_DECLARATION);
configureProperty(serializer, OUTPUT_DOCTYPE_ATTRIBUTE, PROPERTY_OUTPUT_DOCTYPE);
configureProperty(serializer, ENABLE_XINCLUDE_ATTRIBUTE, PROPERTY_ENABLE_XINCLUDE);
configureProperty(serializer, ENABLE_XSL_ATTRIBUTE, PROPERTY_ENABLE_XSL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ public abstract class AbstractSerializer {
protected static final Properties defaultProperties = new Properties();

static {
defaultProperties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "no");
defaultProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
defaultProperties.setProperty(EXistOutputKeys.XDM_SERIALIZATION, "no");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,6 @@ public void characters(final char[] ch, final int start, final int len) throws T

@Override
public void setOutputProperties(final Properties properties) {
properties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "yes");
properties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
super.setOutputProperties(properties);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ public class XMLWriter implements SerializerWriter {

protected final static Properties defaultProperties = new Properties();
static {
defaultProperties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "no");
defaultProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
defaultProperties.setProperty(EXistOutputKeys.XDM_SERIALIZATION, "no");
}
Expand Down Expand Up @@ -532,26 +531,18 @@ protected void writeDeclaration() throws TransformerException {
}
declarationWritten = true;

final String omitOriginalXmlDecl = outputProperties.getProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "yes");
if (originalXmlDecl != null && "no".equals(omitOriginalXmlDecl)) {
final String omitXmlDecl = outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
if ("yes".equals(omitXmlDecl)) {
return;
}

if (originalXmlDecl != null) {
// get the fields of the persisted xml declaration, but overridden with any properties from the serialization properties
final String version = outputProperties.getProperty(OutputKeys.VERSION, (originalXmlDecl.version != null ? originalXmlDecl.version : DEFAULT_XML_VERSION));
final String encoding = outputProperties.getProperty(OutputKeys.ENCODING, (originalXmlDecl.encoding != null ? originalXmlDecl.encoding : DEFAULT_XML_ENCODING));
@Nullable final String standalone = outputProperties.getProperty(OutputKeys.STANDALONE, originalXmlDecl.standalone);

writeDeclaration(version, encoding, standalone);

return;
}

final String omitXmlDecl = outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
if ("no".equals(omitXmlDecl)) {
// get the fields of the declaration from the serialization properties
final String version = outputProperties.getProperty(OutputKeys.VERSION, DEFAULT_XML_VERSION);
final String encoding = outputProperties.getProperty(OutputKeys.ENCODING, DEFAULT_XML_ENCODING);
@Nullable final String standalone = outputProperties.getProperty(OutputKeys.STANDALONE);

writeDeclaration(version, encoding, standalone);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ public class LocalCollection extends AbstractLocal implements EXistCollection {
defaultProperties.setProperty(EXistOutputKeys.PROCESS_XSL_PI, "no");
defaultProperties.setProperty(NORMALIZE_HTML, "no");
defaultProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
defaultProperties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, "no");
defaultProperties.setProperty(EXistOutputKeys.OUTPUT_DOCTYPE, "yes");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -657,11 +657,6 @@ private void serialize(final DBBroker broker, final Properties properties, final
properties.setProperty(OutputKeys.OMIT_XML_DECLARATION, omitXmlDeclaration);
}

if (!properties.containsKey(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION)) {
final String omitOriginalXmlDeclaration = broker.getConfiguration().getProperty(Serializer.OMIT_ORIGINAL_XML_DECLARATION_ATTRIBUTE, "no");
properties.setProperty(EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION, omitOriginalXmlDeclaration);
}

if (!properties.containsKey(EXistOutputKeys.OUTPUT_DOCTYPE)) {
final String outputDocType = broker.getConfiguration().getProperty(Serializer.PROPERTY_OUTPUT_DOCTYPE, "yes");
properties.setProperty(EXistOutputKeys.OUTPUT_DOCTYPE, outputDocType);
Expand Down
39 changes: 37 additions & 2 deletions exist-core/src/test/java/org/exist/backup/XMLDBBackupTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,8 @@ public void backupRestore() throws XMLDBException, SAXException, IOException, UR

// NOTE(AR) that org.exist.backup.Backup calls defaultOutputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
// NOTE(AR) that org.exist.backup.SystemExport also calls defaultOutputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
// TODO(AR) consider whether the backup/export should be injecting a XML Declaration that was not previously present, or should default to EXistOutputKeys.OMIT_ORIGINAL_XML_DECLARATION
final Source expected = Input.fromString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + doc1Content).build();
// TODO(JL) export must output a stored (original) XML declaration
final Source expected = Input.fromString(doc1Content).build();

final Source actual = Input.fromString(doc1.getContent().toString()).build();
final Diff diff = DiffBuilder.compare(expected)
Expand All @@ -139,6 +139,41 @@ public void backupRestore() throws XMLDBException, SAXException, IOException, UR
assertEquals(binDoc2Content, new String((byte[])binDoc2.getContent(), UTF_8));
}

@Test
public void backupRestoreWithXmlDecl() throws XMLDBException, SAXException, IOException, URISyntaxException, ParserConfigurationException {
final XmldbURI collectionUri = XmldbURI.create(getBaseUri()).append("/db").append(COLLECTION_NAME);
final String docWithDeclName = "docWithDecl.xml";
final String docWithDeclContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root/>";

final Collection testCollectionInitial = DatabaseManager.getCollection(collectionUri.toString(), TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD);
final Resource docWithDecl = testCollectionInitial.createResource(docWithDeclName, XMLResource.class);
docWithDecl.setContent(docWithDeclContent);
testCollectionInitial.storeResource(docWithDecl);

final String backupFilename = "test-xmldb-backup-decl-" + System.currentTimeMillis() + ".zip";

// backup the collection
final Path backupFile = backup(backupFilename, collectionUri);

// delete the collection
deleteCollection(collectionUri);

// restore the collection
restore(backupFile, XmldbURI.create(getBaseUri()).append("/db"));

// check restore has restored the collection
final Collection testCollection = DatabaseManager.getCollection(collectionUri.toString(), TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD);
assertNotNull(testCollection);

final Resource restoredDoc = testCollection.getResource(docWithDeclName);
assertNotNull(restoredDoc);

// The backup/restore process should preserve the XML declaration because Backup sets OMIT_XML_DECLARATION=no
final String content = restoredDoc.getContent().toString();
assertTrue("Content should contain XML declaration", content.startsWith("<?xml"));
assertEquals(docWithDeclContent, content);
}

private Path backup(final String filename, final XmldbURI collectionUri) throws IOException, XMLDBException, SAXException {
final Path backupFile = tempFolder.newFile(filename).toPath();
final Backup backup = new Backup(TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD,
Expand Down
11 changes: 5 additions & 6 deletions exist-core/src/test/java/org/exist/http/RESTServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1425,17 +1425,16 @@ public void getXmlDeclDefault() throws IOException {

final String response = readResponse(connect.getInputStream());

assertEquals("<?xml version=\"1.1\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>\r\n" +
"<bookmap id=\"bookmap-2\"/>\r\n", response);
assertEquals("<bookmap id=\"bookmap-2\"/>\r\n", response);

} finally {
connect.disconnect();
}
}

@Test
public void getXmlDeclNo() throws IOException {
final HttpURLConnection connect = getConnection(getResourceWithXmlDeclUri() + "?_omit-original-xml-declaration=no");
public void omitXmlDeclarationNo() throws IOException {
final HttpURLConnection connect = getConnection(getResourceWithXmlDeclUri() + "?_omit-xml-declaration=no");
try {
connect.setRequestMethod("GET");
connect.connect();
Expand All @@ -1460,8 +1459,8 @@ public void getXmlDeclNo() throws IOException {
}

@Test
public void getXmlDeclYes() throws IOException {
final HttpURLConnection connect = getConnection(getResourceWithXmlDeclUri() + "?_omit-original-xml-declaration=yes");
public void omitXmlDeclarationYes() throws IOException {
final HttpURLConnection connect = getConnection(getResourceWithXmlDeclUri() + "?_omit-xml-declaration=yes");
try {
connect.setRequestMethod("GET");
connect.connect();
Expand Down
Loading
Loading