diff --git a/build-core.xml b/build-core.xml index 1db8f9d80..3342b2a95 100644 --- a/build-core.xml +++ b/build-core.xml @@ -41,7 +41,6 @@ - @@ -49,7 +48,6 @@ - @@ -193,13 +191,13 @@ + debug="true" encoding="UTF-8" source="1.8" target="1.8"> + debug="true" encoding="UTF-8" source="1.8" target="1.8"> diff --git a/lib/stax-api-1.0.1.jar b/lib/stax-api-1.0.1.jar deleted file mode 100644 index d9a166515..000000000 Binary files a/lib/stax-api-1.0.1.jar and /dev/null differ diff --git a/lib/xml-apis.jar b/lib/xml-apis.jar deleted file mode 100644 index d42c0ea6c..000000000 Binary files a/lib/xml-apis.jar and /dev/null differ diff --git a/src/org/daisy/pipeline/core/DirClassLoader.java b/src/org/daisy/pipeline/core/DirClassLoader.java index 354c89017..c6ce142bf 100644 --- a/src/org/daisy/pipeline/core/DirClassLoader.java +++ b/src/org/daisy/pipeline/core/DirClassLoader.java @@ -43,7 +43,7 @@ public class DirClassLoader extends URLClassLoader { * directory for resource files */ public DirClassLoader(File clsDir, File resDir) { - super(new URL[] { fileToURL(clsDir) }); + super(new URL[] { fileToURL(clsDir) }, DirClassLoader.class.getClassLoader()); classDir = clsDir; resourceDir = resDir; } diff --git a/src/org/daisy/pipeline/core/PipelineCore.java b/src/org/daisy/pipeline/core/PipelineCore.java index f1c48dc0b..5120adb1a 100644 --- a/src/org/daisy/pipeline/core/PipelineCore.java +++ b/src/org/daisy/pipeline/core/PipelineCore.java @@ -53,7 +53,7 @@ */ public class PipelineCore { - private Creator mCreator; + protected Creator mCreator; private Runner mRunner; private File mHomeDir; @@ -166,10 +166,9 @@ private void initialize(Properties userProps, Properties pipelineProps) setUserProperties(userProps); // Load messages - ResourceBundle bundle = XMLPropertyResourceBundle.getBundle((this - .getClass().getPackage().getName()).replace('.', '/') - + "/messages.properties", Locale.getDefault(), this.getClass() - .getClassLoader()); + ResourceBundle bundle = XMLPropertyResourceBundle.getBundle( + "org/daisy/pipeline/core/messages.properties", Locale.getDefault(), + this.getClass().getClassLoader()); // ResourceBundle bundle = // XMLPropertyResourceBundle.getBundle(this.getClass().getPackage().getName() // + ".pipeline.messages", Locale.getDefault(), diff --git a/src/org/daisy/pipeline/core/script/Creator.java b/src/org/daisy/pipeline/core/script/Creator.java index 997720a25..50a2d9b7b 100644 --- a/src/org/daisy/pipeline/core/script/Creator.java +++ b/src/org/daisy/pipeline/core/script/Creator.java @@ -102,8 +102,7 @@ private void setTransformerHandlers(Script script) throws ScriptValidationException { for (Task task : script.getTasks()) { try { - TransformerHandler handler = TransformerHandlerLoader.INSTANCE - .getTransformerHandler(task.getName()); + TransformerHandler handler = getTransformerHandler(task.getName()); if (handler != null) { task.setTransformerHandler(handler); } else { @@ -118,4 +117,9 @@ private void setTransformerHandlers(Script script) } } } + + protected TransformerHandler getTransformerHandler(String name) + throws TransformerDisabledException { + return TransformerHandlerLoader.INSTANCE.getTransformerHandler(name); + } } diff --git a/src/org/daisy/pipeline/core/script/Runner.java b/src/org/daisy/pipeline/core/script/Runner.java index aee20ee08..a97f855b0 100644 --- a/src/org/daisy/pipeline/core/script/Runner.java +++ b/src/org/daisy/pipeline/core/script/Runner.java @@ -95,7 +95,7 @@ public void execute(Job job) throws JobFailedException { // Add hard-coded transformer parameters this.addTransformerParameters(parameters, handler); - boolean success = handler.run(parameters, task.isInteractive(), task, null); + boolean success = handler.run(parameters, task.isInteractive(), task, job); if (!success) { throw new JobFailedException(i18n("TASK_FAILED", handler.getName())); } diff --git a/src/org/daisy/pipeline/core/script/Script.java b/src/org/daisy/pipeline/core/script/Script.java index 938da2195..845b15a69 100644 --- a/src/org/daisy/pipeline/core/script/Script.java +++ b/src/org/daisy/pipeline/core/script/Script.java @@ -18,6 +18,7 @@ package org.daisy.pipeline.core.script; import java.io.File; +import java.io.IOException; import java.io.PrintWriter; import java.net.URI; import java.net.URL; @@ -173,8 +174,9 @@ void setDescription(String description) { * @param uri */ void setDocumentation(URI uri) { - File test = new File(uri); - if(!test.exists()||!test.canRead()) { + try { + uri.toURL().openStream(); + } catch (IllegalArgumentException|IOException e) { System.out.println("Warning [in Script#setDocumentation]: Script documentation URI " + uri.toString() + " seems not to resolve"); } this.mDocumentation = uri; diff --git a/src/org/daisy/pipeline/core/script/ScriptUtils.java b/src/org/daisy/pipeline/core/script/ScriptUtils.java index 871a97560..d95245e9f 100644 --- a/src/org/daisy/pipeline/core/script/ScriptUtils.java +++ b/src/org/daisy/pipeline/core/script/ScriptUtils.java @@ -220,7 +220,8 @@ public static File upgrade(URL url) throws ScriptValidationException { throw new ScriptValidationException(e.getMessage(), e); } finally { try { - PeekerPool.getInstance().release(peeker); + if (peeker != null) + PeekerPool.getInstance().release(peeker); } catch (PoolException e) {} } diff --git a/src/org/daisy/pipeline/util/PropertiesValidator.java b/src/org/daisy/pipeline/util/PropertiesValidator.java index a0028ec80..147eab514 100644 --- a/src/org/daisy/pipeline/util/PropertiesValidator.java +++ b/src/org/daisy/pipeline/util/PropertiesValidator.java @@ -59,7 +59,8 @@ public PropertiesValidator(String path) throws IOException, CatalogExceptionNotR for (File inputFile : files) { try { - XMLInputFactory2 ifact = (XMLInputFactory2)XMLInputFactory.newInstance(); + XMLInputFactory2 ifact = (XMLInputFactory2)XMLInputFactory.newFactory( + "javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); ifact.setXMLResolver(new StaxEntityResolver(CatalogEntityResolver.getInstance())); XMLStreamReader2 sr = ifact.createXMLStreamReader(inputFile); try { diff --git a/src/org/daisy/util/fileset/validation/ValidatorImplAbstract.java b/src/org/daisy/util/fileset/validation/ValidatorImplAbstract.java index 05e5b2170..d8b3ee539 100644 --- a/src/org/daisy/util/fileset/validation/ValidatorImplAbstract.java +++ b/src/org/daisy/util/fileset/validation/ValidatorImplAbstract.java @@ -155,7 +155,10 @@ private void executeSchemas() throws ValidatorNotSupportedException, ValidatorEx if(SchemaLanguageConstants.hasEntry(uri)) { ++nsURIsFound; try{ - SchemaFactory factory = SchemaFactory.newInstance(uri); + // SchemaFactoryFinder is not public in Java 8 + SchemaFactory factory = /*new SchemaFactoryFinder(getClass().getClassLoader()).newFactory(uri); + if (factory == null) + throw new IllegalStateException("No SchemaFactory could be loaded for " + uri);*/SchemaFactory.newInstance(uri); factory.setErrorHandler(this); factory.setResourceResolver(CatalogEntityResolver.getInstance()); //go via StreamSource and explicitly set the system id to be safe diff --git a/src/org/daisy/util/fileset/validation/delegate/impl/AbstractXMLDeclarationDelegate.java b/src/org/daisy/util/fileset/validation/delegate/impl/AbstractXMLDeclarationDelegate.java index af886e732..6a5912f06 100644 --- a/src/org/daisy/util/fileset/validation/delegate/impl/AbstractXMLDeclarationDelegate.java +++ b/src/org/daisy/util/fileset/validation/delegate/impl/AbstractXMLDeclarationDelegate.java @@ -148,7 +148,8 @@ public void execute(Fileset fileset) throws ValidatorNotSupportedException, Vali * @throws CatalogExceptionNotRecoverable */ private void checkXMLDeclaration(URL url) throws URISyntaxException, XMLStreamException, IOException, CatalogExceptionNotRecoverable { - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + XMLInputFactory inputFactory = XMLInputFactory.newFactory( + "javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE); inputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.TRUE); diff --git a/src/org/daisy/util/fileset/validation/delegate/impl/CorrectXMLEncodingDeclarationDelegate.java b/src/org/daisy/util/fileset/validation/delegate/impl/CorrectXMLEncodingDeclarationDelegate.java index 0258cea8f..6ac433312 100644 --- a/src/org/daisy/util/fileset/validation/delegate/impl/CorrectXMLEncodingDeclarationDelegate.java +++ b/src/org/daisy/util/fileset/validation/delegate/impl/CorrectXMLEncodingDeclarationDelegate.java @@ -119,7 +119,8 @@ private void checkEncoding(URL url) throws IOException, URISyntaxException, Cata String charset = detector.detect(url); String[] probableCharsets = detector.getProbableCharsets(); - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + XMLInputFactory inputFactory = XMLInputFactory.newFactory( + "javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE); inputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.TRUE); diff --git a/src/org/daisy/util/fileset/validation/delegate/impl/NoDocTypeDeclarationDelegate.java b/src/org/daisy/util/fileset/validation/delegate/impl/NoDocTypeDeclarationDelegate.java index 063f61af1..7330f991e 100644 --- a/src/org/daisy/util/fileset/validation/delegate/impl/NoDocTypeDeclarationDelegate.java +++ b/src/org/daisy/util/fileset/validation/delegate/impl/NoDocTypeDeclarationDelegate.java @@ -101,7 +101,8 @@ public void execute(Fileset fileset) throws ValidatorNotSupportedException, Vali private void checkForDocTypeDeclaration(URL url) throws XMLStreamException, IOException, URISyntaxException { boolean foundDocTypeDecl = false; - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + XMLInputFactory inputFactory = XMLInputFactory.newFactory( + "javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); InputStream is = null; XMLEventReader eventReader = null; diff --git a/src/org/daisy/util/fileset/validation/delegate/impl/NoProcessingInstructionDelegate.java b/src/org/daisy/util/fileset/validation/delegate/impl/NoProcessingInstructionDelegate.java index d01c25566..6e456a723 100644 --- a/src/org/daisy/util/fileset/validation/delegate/impl/NoProcessingInstructionDelegate.java +++ b/src/org/daisy/util/fileset/validation/delegate/impl/NoProcessingInstructionDelegate.java @@ -102,7 +102,8 @@ public void execute(Fileset fileset) throws ValidatorNotSupportedException, Vali * @throws URISyntaxException */ public void checkForProcessingInstruction(URL url) throws CatalogExceptionNotRecoverable, XMLStreamException, IOException, URISyntaxException { - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + XMLInputFactory inputFactory = XMLInputFactory.newFactory( + "javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE); inputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.TRUE); diff --git a/src/org/daisy/util/text/URIUtils.java b/src/org/daisy/util/text/URIUtils.java index c283f4c82..9495dae9f 100644 --- a/src/org/daisy/util/text/URIUtils.java +++ b/src/org/daisy/util/text/URIUtils.java @@ -754,7 +754,16 @@ public static URI resolve(URI reference, URI uri) { throw new IllegalStateException("shouldn't happen: " + e.getMessage(), e); } - + } else if (reference.toString().startsWith("jar:") && !uri.isAbsolute()) { + try { + reference = new URI(reference.toASCIIString().substring(4)); + uri = reference.resolve(uri); + uri = new URI("jar:" + uri.toASCIIString()); + return uri; + } catch (URISyntaxException e) { + throw new IllegalStateException("shouldn't happen: " + + e.getMessage(), e); + } } else { return reference.resolve(uri); } diff --git a/src/org/daisy/util/xml/NamespaceReporter.java b/src/org/daisy/util/xml/NamespaceReporter.java index 0b37d2ea9..d3360a93f 100644 --- a/src/org/daisy/util/xml/NamespaceReporter.java +++ b/src/org/daisy/util/xml/NamespaceReporter.java @@ -94,7 +94,8 @@ public NamespaceReporter(URL document) throws IOException, XMLStreamException { } } } finally { - reader.close(); + if (reader != null) + reader.close(); pool.release(xif, mProperties, null); } diff --git a/src/org/daisy/util/xml/PeekerImpl.java b/src/org/daisy/util/xml/PeekerImpl.java index 8dc093738..6b5bee455 100644 --- a/src/org/daisy/util/xml/PeekerImpl.java +++ b/src/org/daisy/util/xml/PeekerImpl.java @@ -255,7 +255,8 @@ private void readStream() throws XMLStreamException { try { if (xif == null) { - xif = XMLInputFactory.newInstance(); + xif = XMLInputFactory.newFactory( + "javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); xif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE); xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE); diff --git a/src/org/daisy/util/xml/pool/StAXInputFactoryPool.java b/src/org/daisy/util/xml/pool/StAXInputFactoryPool.java index 1e2438529..8b4df8945 100644 --- a/src/org/daisy/util/xml/pool/StAXInputFactoryPool.java +++ b/src/org/daisy/util/xml/pool/StAXInputFactoryPool.java @@ -79,7 +79,8 @@ public void release(XMLInputFactory xif, Map properties) throws P * @throws PoolException */ private XMLInputFactory create(Map properties) throws PoolException { - XMLInputFactory xif = XMLInputFactory.newInstance(); + XMLInputFactory xif = XMLInputFactory.newFactory( + "javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); return setProperties(xif,properties); } diff --git a/src/org/daisy/util/xml/validation/SimpleValidator.java b/src/org/daisy/util/xml/validation/SimpleValidator.java index f9ce9f43e..f5daddc8c 100644 --- a/src/org/daisy/util/xml/validation/SimpleValidator.java +++ b/src/org/daisy/util/xml/validation/SimpleValidator.java @@ -223,7 +223,10 @@ private boolean doJAXPSchemaValidation(URL url) throws SAXException { try{ String schemaNsURI = mSchemaSources.get(source); if(!factoryMap.containsKey(schemaNsURI)) { - factoryMap.put(schemaNsURI,SchemaFactory.newInstance(schemaNsURI)); + SchemaFactory f = /*new SchemaFactoryFinder(getClass().getClassLoader()).newFactory(schemaNsURI); + if (f == null) + throw new IllegalStateException("No SchemaFactory could be loaded for " + schemaNsURI);*/SchemaFactory.newInstance(schemaNsURI); + factoryMap.put(schemaNsURI, f); } anySchemaFactory = factoryMap.get(schemaNsURI); anySchemaFactory.setErrorHandler(mErrorHandler);