2012-02-18 14 views
11

tengo una estructura de proyecto maven donde tengo el archivo src/main/resources/json/test.xml presente. Estoy tratando de leer esto usando el siguiente código pero no puedo leerlo. consiguiendo no puede encontrar el archivo specified.I tiene que pasar un objeto de archivo en función de unmarshal, ¿cómo puedo hacer esto usando otra apporachLeyendo un archivo desde la carpeta de recursos

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()); 

la excepción es

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

¿Se puede publicar el mensaje de excepción? – Rachel

+0

@Rachel: he agregado la excepción –

Respuesta

18

la carpeta de recursos se combina en el carpeta generada de las clases por maven al construir. Para que pueda obtener un InputStream para ese archivo a través de:

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

JAXB puede deserializar de InputStream s, y el archivo se encuentra utilizando las mismas reglas usadas por el ClassLoader, que define la clase YourClassName. (Consulte getResourceAsStream para obtener más información.)

Cuestiones relacionadas