How to get formatted xml output from jaxb in spring?

后端 未结 6 2255
陌清茗
陌清茗 2020-12-29 20:38

I am using Jaxb2Marshaller as a view property for ContentNegotiatingViewResolver. I am able to get the xml repsonse. How do I format (pretty print) it?



        
相关标签:
6条回答
  • 2020-12-29 21:01

    Was looking for this and thought I'd share the code equivalent

    @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;
    }
    
    0 讨论(0)
  • 2020-12-29 21:07
    <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>
    
    0 讨论(0)
  • 2020-12-29 21:07

    Try setting this property on your marshaller object:

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

    Here is the full Javadoc for the Marshaller interface. Check out the Field Summary section.

    0 讨论(0)
  • 2020-12-29 21:08

    Another way to achieve the purpose use stringwriter class.

    public class geoClientSpringWS extends WebServiceGatewaySupport
    {
    
        public GetGeoIPResponse getGeoIPResponse(String inputval) throws JAXBException
        {
            String endpointuri="http://Kondle-PC:8088/mockGeoIPServiceSoap";
            GetGeoIP requestobj= new GetGeoIP();
            requestobj.setIPAddress(inputval);
    
            Jaxb2Marshaller marshaller= new Jaxb2Marshaller();
    
            StringWriter textwriter= new StringWriter();    
            JAXBContext jaxbContext = JAXBContext.newInstance(GetGeoIP.class);
            jaxbContext.createMarshaller().marshal(requestobj, textwriter);
    
            String textwriteroutput=textwriter.toString();
    
            System.out.println("response : " + textwriteroutput);   
    
            GetGeoIPResponse responseobj=(GetGeoIPResponse) getWebServiceTemplate().marshalSendAndReceive(endpointuri, requestobj);
    
            return responseobj;
        }
    }
    
    0 讨论(0)
  • 2020-12-29 21:08

    Use jaxb.formatted.output instead of javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT as

    Map<String,Object> map = new HashMap<String,Object>();
    map.put("jaxb.formatted.output", true);
    jaxb2Marshaller.setMarshallerProperties(map);
    
    0 讨论(0)
  • 2020-12-29 21:12

    Ritesh's answer didn't work for me. I had to do the following:

    <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>
    
    0 讨论(0)
提交回复
热议问题