2016-04-04 24 views
14

Sto cercando di unmarshalling mio file xml:Come ottenere file dalla cartella delle risorse. Spring Framework

public Object convertFromXMLToObject(String xmlfile) throws IOException { 
    FileInputStream is = null; 
    File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml"))); 
    try { 
     is = new FileInputStream(file); 
     return getUnmarshaller().unmarshal(new StreamSource(is)); 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 

Ma ottengo questo errore: java.io.FileNotFoundException: null (Nessun file o directory)

Ecco la mia struttura :

enter image description here

Perché non posso ottenere file dalla cartella di risorse? Grazie.

Aggiornamento .

Dopo refactoring,

URL url = this.getClass() getResource ("/ xmlToParse/companies.xml."); File file = nuovo file (url.getPath());

posso vedere un errore più chiaramente:

java.io.FileNotFoundException: /content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml (Nessun file o directory)

si cerca di trovare WEB-INF/classes/ ho aggiunto la cartella lì, ma ancora ottenere questo errore :(

enter image description here

+1

prova 'getResource ("classpath: xmlToParse/companies.xml")' – sidgate

+0

Wont è necessario un altro "/" prima xmlToParse – LearningPhase

+0

Il codice è stato aggiornato. Dai un'occhiata, per favore. –

risposta

0

si supponga di dare un percorso assoluto (in modo da aggiungere un carico '/' , dove la cartella delle risorse è il root-cartella):

public Object convertFromXMLToObject(String xmlfile) throws IOException { 
    FileInputStream is = null; 
    File file = new File(String.valueOf(this.getClass().getResource("/xmlToParse/companies.xml"))); 
    try { 
     is = new FileInputStream(file); 
     return getUnmarshaller().unmarshal(new StreamSource(is)); 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 
+0

Il codice era aggiornato. Dai un'occhiata, per favore. –

+0

Controlla se la cartella delle risorse è inclusa nell'assieme di implementazione –

+0

Penso che devo associare questa cartella ... Esiste un modo semplice per farlo? –

34

Ho avuto lo stesso problema cercando di caricare alcuni file XML nelle mie classi di test. Se usi Spring, come puoi suggerire dalla tua domanda, il modo più semplice è usare org.springframework.core.io.Resource - quello già citato in Raphael Rot h.

Il codice è davvero semplice. Basta dichiarare un campo di tipo org.springframework.core.io.Resource e annotare con org.springframework.beans.factory.annotation.Value - come quella:

@Value(value = "classpath:xmlToParse/companies.xml") 
private Resource companiesXml; 

Per ottenere l'InputStream necessario, basta chiamare

companiesXml.getInputStream() 

e si dovrebbe essere a posto :)

Ma perdonami, devo chiedere una cosa: perché vuoi implementare un parser XML con l'aiuto di Spring? Ci sono un sacco di build in :) E.g. per i servizi web ci sono ottime soluzioni che Marshall tuoi XMLs in Java Objects e indietro ...

+0

Non funziona nella classe non primavera. –

10
ClassLoader classLoader = getClass().getClassLoader(); 
File file = new File(classLoader.getResource("fileName").getFile());