2014-02-26 68 views
0

运行我的java应用程序时出现gettine错误。我的应用程序捆绑在一个.jar文件中。这意味着xsd文件位于.jar文件中。在jar文件中发现类路径文件时出错

错误:错误的

class path resource [classpath*:myschema.xsd] cannot be opened because it does not exist 

来源:

@Value("classpath*:myschema.xsd") 
private Resource xsdFile; 

public boolean validateXML()() throws IOException { 
    boolean isValidXMLFile = false; 

    Source xmlFile = new StreamSource(new File(xmlDataFile)); 
    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    Schema schema = null; 
    File outXsdFile = new File("autogenpath.xsd"); 
    InputStream is =xsdFile.getInputStream(); 
    OutputStream out=new FileOutputStream(outXsdFile); 
    IOUtils.copy(is, out); 

    try { 
     schema = schemaFactory.newSchema(outXsdFile); 
    } catch (SAXException e1) { 
     e1.printStackTrace(); 
     isValidXMLFile = false; 
     log.debug("Error reading schema " + e1.getMessage()); 
    } 
    try { 
     Validator validator = schema.newValidator(); 
     validator.validate(xmlFile); 
     log.debug(xmlFile.getSystemId() + " is valid"); 
     isValidXMLFile = true; 

    } catch (SAXParseException e) { 
     isValidXMLFile = false; 
     log.debug(xmlFile.getSystemId() + " is NOT valid"); 
     log.debug("Reason\t\t: " + e.getLocalizedMessage()); 
     log.debug("Line Number \t: " + e.getLineNumber()); 
     log.debug("Column Number\t: " + e.getColumnNumber()); 
     log.debug("Public Id\t: " + e.getPublicId()); 
    } catch (SAXException e) { 
     isValidXMLFile = false; 
     log.debug(xmlFile.getSystemId() + " is NOT valid"); 
     log.debug("Reason\t: " + e.getLocalizedMessage()); 
    } 
    finally{ 
     try{ 
     out.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 

     } 
    } 
    return isValidXMLFile; 
} 

回答

0

尝试改变调用

new File("...") 

getClass().getClassLoader().getResource("...") 

甚至

getClass().getClassLoader().getResourceStream("...") 

当你罐子您的应用程序,你需要问的类加载器来获取文件给你。

+0

我用的getResourceAsStream()他是为我工作。谢谢 – mahesh

0

它不应该是:

@Value("${classpath}/myschema.xsd") 
private Resource xsdFile; 
+0

感谢您的回复,我不知道为什么我的类路径资源显示不同的东西,但它有xsd文件。但仍然无法加载 – mahesh

相关问题