Я хочу преобразовать OutputStream
в a String
объект. Я имею OutputStream
объект, возвращенный после маршалинга объекта JAXB.
не очень знаком с 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();
}
, но я не уверен о мешающем объекте. еще ищете.
** EDIT
Маршалинг неэлементного элемента
Другой распространенный вариант использования - это когда у вас есть объект, на котором нет @XmlRootElement. JAXB позволяет упорядочивать его следующим образом:
marshaller.marshal (new JAXBElement (
new QName ("", "rootTag"), Point. class, new Point (...)));Это помещает элемент в качестве корневого элемента , за которым следует содержимое объекта. Вы действительно можете использовать его с классом, который имеет @XmlRootElement, и который просто переименовывает имя корневого элемента.
На первый взгляд второй параметр Point.class может показаться избыточным, но на самом деле он необходим , чтобы определить, будет ли маршаллер производить (печально известный ) @xsi: тип. В этом примере и класс, и экземпляр являются Point, поэтому вы не увидите @xsi: type. Но если они разные, вы это увидите.
Это также можно использовать для маршалинга простого объекта , такого как String или целое число .
marshaller.marshal (новый JAXBElement (
новый QName ("", "rootTag"), String.class, "foo bar"));Но, к сожалению, его нельзя использовать для маршалинга таких объектов, как List или Map, поскольку с ними не обращаются как с первоклассными гражданами в мире JAXB.
найдено ЗДЕСЬ