2012-12-21 2 views
0

Java - spring - transformation xsl avec dtd en tant que résolveur d'entité.Java - transformation xsl - DTD en tant que résolveur d'entité Fin prématurée du fichier

J'ai une méthode suivante

private Source resolveDTDEntity(Reader input, final String dtdName) throws ParserConfigurationException, SAXException, IOException { 

     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
     docBuilderFactory.setValidating(false); 
     docBuilderFactory.setNamespaceAware(true); 

     DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 

     //Satisfying dtd dependency 
     docBuilder.setEntityResolver(new EntityResolver() { 
      public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { 
       if (systemId.contains(dtdName)) { 
        InputStream dtdStream = XslRdcSourceDocTransformer.class 
          .getResourceAsStream("/dtds/" + dtdName); 
        return new InputSource(dtdStream); 
       } else { 
        return null; 
       } 
      } 
     }); 

     //Exception on following line 
     return new DOMSource(docBuilder.parse(new ReaderInputStream(input))); 
    } 

I obtient la suite d'exception

StackTrace: org.xml.sax.SAXParseException: Premature end of file. 
     at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239) 
     at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283) 
     at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124) 
     at com.service.XslSourceDocTransformer.resolveDTDEntity(XslSourceDocTransformer.java:137) 
     at com.service.XslSourceDocTransformer.transform(XslSourceDocTransformer.java:56) 
     at com.service.ContentProcessor.process(ContentProcessor.java:127) 
     at com.lexisnexis.job.LexisNexisJob.execute(LexisNexisJob.java:67) 
     at com.core.job.JobController$JobExecutor.run(JobController.java:367) 
     at com.core.job.JobController$JobThread.run(JobController.java:245) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:619) 

Exception: Premature end of file 
+0

ce qui est un ReaderInputStream? – jtahlborn

+0

il est apache commun io http://commons.apache.org/io/apidocs/org/apache/commons/io/input/ReaderInputStream.html –

+0

ou Comment puis-je passer java.io.Reader à docBuilder.parse (? –

Répondre

0

Cette erreur est survenue "tackTrace: org.xml.sax.SAXParseException: Fin prématurée du fichier." Parce que je lisais plusieurs fichiers XML à partir du disque et l'un d'eux était vide qui cause de cette erreur.

i utilisé la déclaration suivante

docBuilder.parse(new InputSource(reader)) 
Questions connexes