Я хочу преобразовать поток вывода в объект String - PullRequest
46 голосов
/ 18 марта 2010

Я хочу преобразовать OutputStream в String объект. У меня OutputStream объект, возвращенный после сортировки объекта JAXB.

Ответы [ 4 ]

93 голосов
/ 18 марта 2010

не очень знаком с 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();
}

* 1004 ws.apache.org *

но я не уверен насчет объекта. все еще в поисках.

** РЕДАКТИРОВАТЬ

Выделение неэлемента

Другой распространенный случай использования - это когда вы есть объект, который не имеет @XmlRootElement на нем. JAXB позволяет вам чтобы упорядочить это так:

marshaller.marshal (новый JAXBElement (
новый QName ( "", "rootTag"), Point.class, новый Point (...)));

Это помещает элемент как корневой элемент, за которым следует содержимое объекта, то. Вы может на самом деле использовать его с классом, который имеет @XmlRootElement, и это просто переименовывает имя корневого элемента.

На первый взгляд второй Параметр Point.class может выглядеть избыточно, но на самом деле необходимо определить, будет ли маршаллер производить (печально) @xsi: тип. В этом Например, и класс, и например, Point, так что вы не увидите @xsi: тип. Но если они разные, вы увидите это.

Это также может быть использовано для простой объект, такой как String или целое число.

marshaller.marshal (новый JAXBElement (
новый QName ( "", "rootTag"), String.class, "Foo бар "));

Но, к сожалению, его нельзя использовать для Маршал объекты, такие как список или карта, как они не рассматриваются как первоклассные гражданин в мире JAXB.

найдено ЗДЕСЬ

7 голосов
/ 29 января 2015
    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 голос
/ 05 июля 2013
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 и Маршалл его Редактировать Приведенный выше метод выведет маршаллированный xml, а также xml в виде строки.

0 голосов
/ 12 февраля 2015

Да, есть способ сделать это: просто передайте 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();
           }
       }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...