web-dev-qa-db-fra.com

Je veux convertir un flux de sortie en objet String

Je veux convertir une OutputStream en un objet String. Un objet OutputStream est renvoyé après le regroupement de l'objet JAXB.

44
TopCoder

pas très familier avec jaxb, à partir de ce que j'ai pu trouver, vous pouvez convertir en chaîne en utilisant

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

mais je ne suis pas sûr d'un objet émouvant. toujours à la recherche.

** MODIFIER

Marshalling un non-élément

Un autre cas d'utilisation courant est celui où vous avoir un objet qui n'a pas @XmlRootElement dessus. JAXB vous permet pour le marshal comme ceci:

marshaller.marshal (nouveau JAXBElement (
Nouveau QName ("", "rootTag"), Point.class, new Point(...)));

Cela met l'élément en tant que élément racine, suivi du contenu de l'objet, alors. Vous peut réellement l'utiliser avec une classe qui a @XmlRootElement, et cela simplement renomme le nom de l'élément racine.

Au premier regard le second Le paramètre Point.class peut ressembler redondant, mais c'est en fait nécessaire pour déterminer si le commissaire sera produire (infâme) @xsi: type. Dans ce Par exemple, la classe et le exemple sont Point, vous ne verrez donc pas @xsi: type. Mais si elles sont différentes, vous le verrez.

Ceci peut également être utilisé pour rassembler un objet simple, comme String ou un entier.

marshaller.marshal (nouveau JAXBElement (
Nouveau QName ("", "rootTag"), String.class, "foo Bar"));

Mais malheureusement, il ne peut pas être utilisé pour Marquer des objets comme Liste ou Carte, en tant que ils ne sont pas traités comme de première classe citoyen du monde JAXB.

trouvé ICI

91
Justin Gregoire
    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();
}
7
Rodrigo Valentim
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éthode permettant de gérer le XML et de le convertir en chaîne.

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éthode au sein de votre classe pour obtenir le XML et le Marshall Edition La méthode ci-dessus générera à la fois le XML marshalled et le XML comme chaîne.

0
Stevie754