-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
11, 13, 14
-
generic
-
generic
ADDITIONAL SYSTEM INFORMATION :
Java 9 and above with new XML Catalogs
Intelî Core⢠i5-4310U CPU @ 2.00GHz à4
Linux dkec-vulcan 5.0.0-29-generic #31~18.04.1-Ubuntu SMP Thu Sep 12 18:29:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
java version "13" 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
JEP 268 Promised replacement of the old internal catalog resolver, JEP proposes to remove the internal catalog resolver implementation after the public API is delivered. But new implementation doesn't support TR 9401 which makes it impossible to use it for example in the XJC
Related issue: https://github.com/eclipse-ee4j/jaxb-ri/issues/1171
REGRESSION : Last worked in version 8
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Use javax.xml.catalog.CatalogManager with OASIS TR9401 simple entity catalog format
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
1. No exception thrown(there shouldn't be one even when catalog resolver cant parse the syntax see spec https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html#s.res.fail )
2. Catalog entries are used for resolving
ACTUAL -
javax.xml.catalog.CatalogException: JAXP09030002: Failed to parse the catalog file.
at java.xml/javax.xml.catalog.CatalogMessages.reportRunTimeError(CatalogMessages.java:93)
at java.xml/javax.xml.catalog.CatalogImpl.parse(CatalogImpl.java:297)
at java.xml/javax.xml.catalog.CatalogImpl.load(CatalogImpl.java:171)
at java.xml/javax.xml.catalog.CatalogManager.catalog(CatalogManager.java:73)
at java.xml/javax.xml.catalog.CatalogManager.catalogResolver(CatalogManager.java:119)
at com.sun.tools.xjc.CatalogUtil.getCatalog(CatalogUtil.java:35)
at com.sun.tools.xjc.Options.addCatalog(Options.java:812)
at com.sun.tools.xjc.XJCBase.setCatalog(XJCBase.java:318)
...
Caused by: org.xml.sax.SAXParseException; systemId: file:/home/kec/idp/ora/eclipse-ee4j/jaxb-ri/jaxb-ri/samples/src/main/samples/catalog-resolver/catalog.cat; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1471)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:978)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:541)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:324)
at java.xml/javax.xml.parsers.SAXParser.parse(SAXParser.java:276)
at java.xml/javax.xml.catalog.CatalogImpl.parse(CatalogImpl.java:295)
---------- BEGIN SOURCE ----------
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogFeatures.Feature;
import javax.xml.catalog.CatalogManager;
import org.xml.sax.EntityResolver;
public class Main {
static String catContent = "--\nA simple entity catalog TR 9401 comment\n--\n\n" +
"SYSTEM \"http://www.w3.org/2001/xml.xsd\" \"xml.xsd\n\n" +
"PUBLIC \"-//W3C//DTD XMLSCHEMA 200102//EN\" \"s4s/XMLSchema.dtd\"\n";
public static void main( String[] args ) throws Exception {
URI uri = Main.class.getResource("catalog.cat").toURI();
Files.write(Paths.get("./catalog.cat"), catContent.getBytes());
System.out.println("Path: "+new File(uri).getAbsolutePath());
System.out.println("Exists: "+new File(uri).exists());
javax.xml.catalog.CatalogFeatures CATALOG_FEATURES = CatalogFeatures.builder().with(Feature.RESOLVE, "continue").build();
javax.xml.catalog.CatalogManager.catalogResolver(CATALOG_FEATURES, uri);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Using old internal com.sun.org.apache.xml.internal.resolver.Catalog
FREQUENCY : always
Java 9 and above with new XML Catalogs
Intelî Core⢠i5-4310U CPU @ 2.00GHz à4
Linux dkec-vulcan 5.0.0-29-generic #31~18.04.1-Ubuntu SMP Thu Sep 12 18:29:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
java version "13" 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
JEP 268 Promised replacement of the old internal catalog resolver, JEP proposes to remove the internal catalog resolver implementation after the public API is delivered. But new implementation doesn't support TR 9401 which makes it impossible to use it for example in the XJC
Related issue: https://github.com/eclipse-ee4j/jaxb-ri/issues/1171
REGRESSION : Last worked in version 8
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Use javax.xml.catalog.CatalogManager with OASIS TR9401 simple entity catalog format
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
1. No exception thrown(there shouldn't be one even when catalog resolver cant parse the syntax see spec https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html#s.res.fail )
2. Catalog entries are used for resolving
ACTUAL -
javax.xml.catalog.CatalogException: JAXP09030002: Failed to parse the catalog file.
at java.xml/javax.xml.catalog.CatalogMessages.reportRunTimeError(CatalogMessages.java:93)
at java.xml/javax.xml.catalog.CatalogImpl.parse(CatalogImpl.java:297)
at java.xml/javax.xml.catalog.CatalogImpl.load(CatalogImpl.java:171)
at java.xml/javax.xml.catalog.CatalogManager.catalog(CatalogManager.java:73)
at java.xml/javax.xml.catalog.CatalogManager.catalogResolver(CatalogManager.java:119)
at com.sun.tools.xjc.CatalogUtil.getCatalog(CatalogUtil.java:35)
at com.sun.tools.xjc.Options.addCatalog(Options.java:812)
at com.sun.tools.xjc.XJCBase.setCatalog(XJCBase.java:318)
...
Caused by: org.xml.sax.SAXParseException; systemId: file:/home/kec/idp/ora/eclipse-ee4j/jaxb-ri/jaxb-ri/samples/src/main/samples/catalog-resolver/catalog.cat; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1471)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:978)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:541)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:324)
at java.xml/javax.xml.parsers.SAXParser.parse(SAXParser.java:276)
at java.xml/javax.xml.catalog.CatalogImpl.parse(CatalogImpl.java:295)
---------- BEGIN SOURCE ----------
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogFeatures.Feature;
import javax.xml.catalog.CatalogManager;
import org.xml.sax.EntityResolver;
public class Main {
static String catContent = "--\nA simple entity catalog TR 9401 comment\n--\n\n" +
"SYSTEM \"http://www.w3.org/2001/xml.xsd\" \"xml.xsd\n\n" +
"PUBLIC \"-//W3C//DTD XMLSCHEMA 200102//EN\" \"s4s/XMLSchema.dtd\"\n";
public static void main( String[] args ) throws Exception {
URI uri = Main.class.getResource("catalog.cat").toURI();
Files.write(Paths.get("./catalog.cat"), catContent.getBytes());
System.out.println("Path: "+new File(uri).getAbsolutePath());
System.out.println("Exists: "+new File(uri).exists());
javax.xml.catalog.CatalogFeatures CATALOG_FEATURES = CatalogFeatures.builder().with(Feature.RESOLVE, "continue").build();
javax.xml.catalog.CatalogManager.catalogResolver(CATALOG_FEATURES, uri);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Using old internal com.sun.org.apache.xml.internal.resolver.Catalog
FREQUENCY : always