Jaxb-сущность распечатывается как XML - PullRequest
4 голосов
/ 17 марта 2010

У меня есть класс, назовем его Пользователь , помеченный @XmlRootElement, с некоторыми свойствами (имя, фамилия и т. Д.).

Я использую этот класс для операций REST, так как application/xml.

Клиент отправит класс пользователя POST, поэтому я хочу сохранить значения в журнале.

Есть ли в jaxb метод для распечатки этого объекта как xml ?

Например:

log.info("Customers sent: "+user.whichMethod());

должен выдать этот вывод:

Customer sent: 
<user> <name>cristi</name> <surname>kevin</surname> </user>

Спасибо.

Ответы [ 4 ]

19 голосов
/ 10 мая 2012

Вы можете сделать это как общий метод доступным для ваших конечных точек.

public String toXml(JAXBElement element) {
    try {
        JAXBContext jc = JAXBContext.newInstance(element.getValue().getClass());  
        Marshaller marshaller = jc.createMarshaller();  
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);  

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        marshaller.marshal(element, baos);
        return baos.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }      
    return "";
}
9 голосов
/ 17 марта 2010

Найдено:)

public void toXml() {
    try {
        JAXBContext ctx = JAXBContext.newInstance(User.class);
        Marshaller marshaller = ctx.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(this, System.out);
    }
    catch (Exception
            e) {

              //catch exception 
    }
}

Назовите это как:

log.info("Customers sent: "+user.toXml());
2 голосов
/ 08 января 2013

Настройка Marshaller.JAXB_FORMATTED_OUTPUT может не подходить для регистрации.

Вместо подавления XML Prolog (or Declaration) с Marshaller.JAXB_FRAGMENT.

public static <J> String printXml(final J instance) throws JAXBException {
    return printXml(instance, instance.getClass());
}


public static <J> String printXml(final J instance,
                                  final Class<?>... classesToBeBound)
    throws JAXBException {

    final JAXBContext context = JAXBContext.newInstance(classesToBeBound);

    final ByteArrayOutputStream output = new ByteArrayOutputStream();

    final Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
    marshaller.marshal(instance, output);
    // output.flush(); // Nasty IOException
    final String jaxbEncoding = (String) marshaller.getProperty(
        Marshaller.JAXB_ENCODING);

    try {
        return new String(output.toByteArray(), jaxbEncoding);
    } catch (UnsupportedEncodingException uee) {
        throw new RuntimeException(uee);
    }
}

напечатает одну строку, как эта.

<user><name>cristi</name><surname>kevin</surname></user>
0 голосов
/ 06 августа 2015
public String toXml(Event event) {

    ByteArrayOutputStream baos =  null;

    try {

         JAXBContext jc = JAXBContext.newInstance(event.getClass());  
        Marshaller marshaller = jc.createMarshaller();  
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);  

        baos = new ByteArrayOutputStream();
        marshaller.marshal(event, baos);
        return baos.toString();
    } catch (JAXBException e) {
        LOGGER.log(Level.SEVERE, " problem in  Logging raw XML  :"+e.getMessage());
    }      
    return baos.toString();

Это хорошо работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...