我想将输出流转换为String对象

时间:2010-03-18 17:45:28

标签: java jaxb

我想将OutputStream转换为String个对象。我在编组JAXB对象后返回了OutputStream对象。

4 个答案:

答案 0 :(得分:93)

对jaxb不太熟悉,从我能够找到的你可以使用

转换成字符串
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

但我不确定是否有搅拌物。还在寻找。

**编辑

  

编组非元素

     

另一个常见的用例是你   有一个没有的对象   @XmlRootElement就可以了。 JAXB允许你   像这样编组:

     

marshaller.marshal(新的JAXBElement(
  新   QName的( “”, “rootTag”),Point.class,新   点(...)));

     

这将元素作为   根元素,后跟内容   然后,对象。您   实际上可以将它与一个类一起使用   有@XmlRootElement,就这么简单   重命名根元素名称。

     乍一看第二眼   Point.class参数可能看起来   多余的,但实际上是必要的   确定编组人员是否会   生产(臭名昭着)@xsi:类型。在这   例如,班级和班级   实例是Point,所以你不会看到   @xsi:类型。但如果他们不同,   你会看到的。

     

这也可以用来编组a   简单的对象,如String或   整数。

     

marshaller.marshal(新的JAXBElement(
  新   QName的( “”, “rootTag”),String.class,“富   栏“));

     

但遗憾的是它不能用来   像列表或地图那样编组对象   他们不是一流的   JAXB世界的公民。

找到HERE

答案 1 :(得分: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();
}

答案 2 :(得分:1)

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

处理XML并将其转换为字符串的方法。

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

类中用于获取XML和Marshall的方法 编辑上述方法将输出编组的xml以及xml作为字符串。

答案 3 :(得分:0)

是的,有办法做到这一点:只需将String writer作为输入传递给它。因此创建的xml将写入它

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