簡體   English   中英

向 Jackson XML 序列化添加獨立指令

[英]Add standalone directive to Jackson XML serialization

我試圖讓 Jackson 像 JAXB 一樣生成 XML 標頭,但我不知道如何添加“standalone='yes'?”

例子:

public class XmlTest {

    @XmlRootElement
    public static class Book {

    }

    @Test
    public void testBookXml() throws JsonProcessingException {
        XmlMapper mapper = new XmlMapper();
        mapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);

        System.out.println("Jackson\n" + mapper.writeValueAsString(new Book()) + "\n");

        StringWriter sw = new StringWriter();
        JAXB.marshal(new Book(), sw);
        System.out.println("JAXB\n" + sw.toString());
    }
}

輸出是這樣的:

Jackson
<?xml version='1.0' encoding='UTF-8'?><Book/>

JAXB
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<book/>

我不在乎<Book/> vs <book/> 除了字符串操作之外,有沒有辦法讓 Jackson 標頭像 JAXB 一樣?

我遇到了同樣的問題,我通過重新加載類BufferingXmlWriter (從源代碼復制並修改方法)解決了這個問題,在使用 Jackson 生成 XML 之前必須重新加載

  1. 創建包 com.ctc.wstx.sw 並創建類BufferingXmlWriter
  2. 從真實的com.ctc.wstx.sw.BufferingXmlWriter復制源代碼
  3. 修改方法writeXmlDeclaration(String version, String encoding, String standalone)
public void writeXmlDeclaration(String version, String encoding, String standalone)
            throws IOException
 {
       // final char chQuote = (mUseDoubleQuotesInXmlDecl ? '"' : '\'');
        final char chQuote = '"';
    
        fastWriteRaw("<?xml version=");
        fastWriteRaw(chQuote);
        fastWriteRaw(version);
        fastWriteRaw(chQuote);
    
        if (encoding != null && encoding.length() > 0) {
            fastWriteRaw(" encoding=");
            fastWriteRaw(chQuote);
            fastWriteRaw(encoding);
            fastWriteRaw(chQuote);
        }
        if (standalone == null) {
            fastWriteRaw(" standalone=");
            fastWriteRaw(chQuote);
            fastWriteRaw("yes");
            fastWriteRaw(chQuote);
        }
        fastWriteRaw('?', '>');
 }    
  1. 重新加載

     Class.forName("com.ctc.wstx.sw.BufferingXmlWriter");
  2. 結果

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM