(De)使用jackson xml序列化混合内容?

Shi*_*ser 7 java xml jackson deserialization jackson-dataformat-xml

通过我所做的所有搜索,我理解使用混合内容的jackson序列化/反序列化xml是有问题的.有没有人知道使用Java处理以下xml的方法?

<xmlsample>
    <title>Yada yada yada <a href=\"component:tcm:757-228001\" id=\"Link_1492103133595\" title=\"yada\" name=\"Link_1492103133595\" xmlns=\"xhtml\">yada</a> yada</title>
    <link>test</link>
</xmlsample>
Run Code Online (Sandbox Code Playgroud)

我使用以下POJO:

@JacksonXmlRootElement(localName="xmlsample")
public class XmlSample{

    private String title;
    private String link;

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果节点具有混合内容,如上例所示,我将收到以下错误:

java.io.IOException: Expected END_ELEMENT, got event of type 1
Run Code Online (Sandbox Code Playgroud)

如果节点具有纯文本,则反序列化有效.

我已经尝试使用JsonNode,TextNode,ObjectNode,Object而不是String作为数据类型.我尝试过自定义序列化程序和反序列化程序,但错误仍然存​​在.实际上,如果节点中有html,则处理不会到达自定义反序列化器.

这个xml来自第三方系统(SDL Tridion),我无法改变.

任何帮助将不胜感激!

编辑:我需要澄清该节点可能包含标记或可能包含纯文本,因此我不能创建一个代表标记的POJO,就像你在上面的xml中看到的那样.而且标记也可能比上面的例子复杂得多.这就是为什么我只是想把它强制成一个String.我不需要操作它,我只需要在POJO中保存它,这样它就可以不加改变地返回到数据库.

CKe*_*ina 0

你可以尝试使用CDATA:

<![CDATA[<]]>
<![CDATA[>]]>
Run Code Online (Sandbox Code Playgroud)

或另一种解决方法,例如转义括号,因此“<”变成“ &lt;”等等......