web-dev-qa-db-fra.com

Comment obtenir une sortie XML formatée de jaxb au printemps?

J'utilise Jaxb2Marshaller en tant que propriété d'affichage pour ContentNegotiatedViewResolver. Je suis capable d'obtenir le repsonse XML. Comment le formater (joli imprimé)?

<bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="xml" value="application/xml" />
        </map>
    </property>
    <property name="defaultViews">
        <list>

            <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                <constructor-arg>
                    <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
                        <property name="classesToBeBound">
                            <list>

                            </list>
                        </property>
                    </bean>
                </constructor-arg>
            </bean>
        </list>
    </property>

</bean>
28
outvir
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list> .... </list>
    </property>
    <property name="marshallerProperties">
        <map>
            <entry>
                <key>
                    <util:constant static-field="javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT" />
               </key>
              <value type="Java.lang.Boolean">true</value>
            </entry>
        </map>
    </property>
</bean>
38
Ritesh

Essayez de définir cette propriété sur votre objet marshaller:

 marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE )

Voici le Javadoc complet pour l'interface Marshaller . Consultez la section Résumé du champ.

22
jmort253

La réponse de Ritesh n'a pas fonctionné pour moi. Je devais faire ce qui suit:

<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list> ... </list>
    </property>
    <property name="marshallerProperties">
        <map>
            <entry key="jaxb.formatted.output">
                <value type="boolean">true</value>
            </entry>
        </map>
    </property>
</bean>
8
Doppelganger

Je cherchais cela et pensais partager le code équivalent

@Bean
public Marshaller jaxbMarshaller() {
    Map<String, Object> props = new HashMap<String, Object>();
    props.put(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

    Jaxb2Marshaller m = new Jaxb2Marshaller();
    m.setMarshallerProperties(props);
    m.setPackagesToScan("com.example.xml");
    return m;
}
4
DeezCashews

Utilisez jaxb.formatted.output au lieu de javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT en tant que

Map<String,Object> map = new HashMap<String,Object>();
map.put("jaxb.formatted.output", true);
jaxb2Marshaller.setMarshallerProperties(map);
0
jnrprog