2012-02-18 24 views
11

Mam strukturę projektu maven, gdzie mam plik src/main/resources/json/test.xml, staram się przeczytać to przy użyciu następującego kodu, ale nie można go odczytać.I ma uzyskanie nie może znaleźć pliku specified.I trzeba przekazać obiekt pliku do funkcji unmarshal, w jaki sposób można to zrobić przy użyciu innych apporachCzytanie pliku z folderu zasobów

File file = new File("json\\test.xml"); 
      JAXBContext jaxbContext = JAXBContext.newInstance(ServiceApi.class); 

      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      ServiceApi customer = (ServiceApi) jaxbUnmarshaller.unmarshal(file); 
      System.out.println(customer.getService().size()); 

wyjątkiem jest

javax.xml.bind.UnmarshalException 
- with linked exception: 
[java.io.FileNotFoundException: C:\Users\jayesh_shah\Downloads\dbt-dataformstub\json\test.xml (The system cannot find the path specified)] 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:202) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169) 
    at com.ge.stub.api.jaxb.JAXBExample.main(JAXBExample.java:17) 
Caused by: java.io.FileNotFoundException: C:\Users\jayesh_shah\Downloads\dbt-dataformstub\json\test.xml (The system cannot find the path specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:120) 
    at java.io.FileInputStream.<init>(FileInputStream.java:79) 
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) 
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:653) 
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200) 
    ... 6 more 
+0

Czy możesz opublikować komunikat wyjątku? – Rachel

+0

@Rachel - dodałem wyjątek –

Odpowiedz

18

Folder zasobów jest scalane wygenerowany folder klas przez maven podczas budowania. Więc można dostać InputStream dla tego pliku poprzez:

InputStream is = YourClassName.class.getResourceAsStream("/json/test.xml"); 

JAXB może unmarshal od InputStream s, a plik znajduje się przy użyciu tych samych zasad, jak stosowane przez ClassLoader które określa klasę YourClassName. (Aby uzyskać więcej informacji, patrz: getResourceAsStream).