2010-03-18 15 views

Respuesta

85
no

muy familiarizado con jaxb, de lo que era capaz de encontrar se puede convertir en una cadena utilizando

public String asString(JAXBContext pContext, 
         Object pObject) 
          throws 
           JAXBException { 

    java.io.StringWriter sw = new StringWriter(); 

    Marshaller marshaller = pContext.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); 
    marshaller.marshal(pObject, sw); 

    return sw.toString(); 
} 

ws.apache.org

pero no estoy seguro acerca de un objeto stirng. sigue buscando.

** EDITAR

Marshalling un elemento no

Otro caso de uso común es donde tiene un objeto que no tiene @XmlRootElement en él. JAXB le a Mariscal de esta manera:

marshaller.marshal (nueva JAXBElement (
nueva QName ("", "distintivo de directorio raíz"), Point.class, nuevo Point (...)));

Esto coloca el elemento como el elemento raíz , seguido del contenido del objeto, luego. Usted realmente puede usarlo con una clase que tiene @XmlRootElement, y que simplemente cambia el nombre del nombre del elemento raíz.

A primera vista, el segundo parámetro Point.class puede parecer redundante , pero en realidad es necesario para determinar si el contador de referencias se productos (infame) @xsi: tipo. En este ejemplo , tanto la clase como la instancia son Point, por lo que no verá @xsi: type. Pero si son diferentes, lo verá.

Esto también se puede usar para ordenar un objeto simple , como String o un número entero .

marshaller.marshal (nuevo JAXBElement (
nuevo QName ("", "distintivo de directorio raíz"), String.class, "foo bar"));

Pero por desgracia, no se puede utilizar para objetos como mariscal de lista o mapa, como no se manejan como la primera clase los ciudadanos del mundo JAXB.

encontró HERE

+1

Simplemente haciendo una nota aquí que el enfoque StringWriter funciona. ¡Gracias! – eis

0
public String readFile(String pathname) throws IOException { 
    File file = new File(pathname); 
    StringBuilder fileContents = new StringBuilder((int) file.length()); 
    Scanner scanner = new Scanner(file); 
    String lineSeparator = System.getProperty("line.separator"); 

    try { 
     while (scanner.hasNextLine()) { 
      fileContents.append(scanner.nextLine() + lineSeparator); 
     } 
     return fileContents.toString(); 
    } 
    finally { 
     scanner.close(); 
    } 
}  

Método para manejar el XML y convertirlo en una cadena.

JAXBContext jc = JAXBContext.newInstance(ClassMatchingStartofXMLTags.class); 
    Unmarshaller unmarshaller = jc.createUnmarshaller(); 
    //store filepath to be used 
    String filePath = "YourXMLFile.xml"; 
    File xmlFile = new File(filePath); 
    //Set up xml Marshaller 
    ClassMatchingStartofXMLTags xmlMarshaller = (ClassMatchingStartofXMLTags) unmarshaller.unmarshal(xmlFileEdit); 
    Marshaller marshaller = jc.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    // Use marshall to output the contents of the xml file 
    System.out.println("Marshalled XML\n"); 
    marshaller.marshal(xmlMarshaller, System.out); 
    //Use Readfile method to convert the XML to a string and output the results 
    System.out.println("\nXML to String"); 
    String strFile = ReadFile(xmlFile) 
    System.out.println(strFile);  

método dentro de la clase para obtener el código XML y Marshall se Edición El método anterior ambas se mostrarán el xml movilizados y también el XML como una cadena.

+0

Esto es extremadamente intrincado, y no es claro o adecuado Java. El autor original no necesariamente tiene un archivo XML en la mano; la pregunta se refiere a un OutputStream. –

7
StringWriter sw = new StringWriter(); 
    com.integra.xml.Integracao integracao = new Integracao(); 
    integracao.add(...); 
try { 
    JAXBContext context = JAXBContext.newInstance("com.integra.xml"); 
    Marshaller marshaller = context.createMarshaller(); 
    marshaller.marshal(integracao, sw); 
    System.out.println(sw.toString()); 
} catch (JAXBException e) { 
    e.printStackTrace(); 
} 
+1

enfoque más limpio hasta el momento – xyz

-1

Sí, hay una manera de hacerlo: simplemente pase el escritor de cadenas como entrada. Para que se escriba el xml creado

public void saveSettings() throws IOException { 
     FileOutputStream os = null; 
     //Declare a StringWriter to which the output has to go 
     StringWriter sw = new StringWriter(); 
     try { 
      Answer ans1=new Answer(101,"java is a programming language","ravi"); 
      Answer ans2=new Answer(102,"java is a platform","john"); 

      ArrayList<Answer> list=new ArrayList<Answer>(); 
      list.add(ans1); 
      list.add(ans2); 

      settings=new Question(1,"What is java?",list); 
      os = new FileOutputStream(FILE_NAME); 
      this.marshaller.marshal(settings, new StreamResult(sw)); 
      System.out.println(sw.toString()); 
      new File(FILE_NAME).delete(); 
     } finally { 
      if (os != null) { 
       os.close(); 
      } 
     } 
    } 
Cuestiones relacionadas