Java 在Stax和jaxb中处理CData

Java 在Stax和jaxb中处理CData,java,xml,spring,jaxb,Java,Xml,Spring,Jaxb,我试图在Spring StatxtItemWriter和Jaxb marshaller中编写一个包含CData元素的XML片段。但结果是: 不使用 或转义:替换为和 首先,项目作者: <bean id="userAuthorizationErrorItemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter"> <property name="rootTagName" va

我试图在Spring StatxtItemWriter和Jaxb marshaller中编写一个包含CData元素的XML片段。但结果是:

  • 不使用
  • 或转义:
    替换为
首先,项目作者:

<bean id="userAuthorizationErrorItemWriter"
    class="org.springframework.batch.item.xml.StaxEventItemWriter">
    <property name="rootTagName" value="UserAuthorizationEvent" />
    <property name="rootElementAttributes">
        <map>
            <entry key="xmlns:xsi" value="http://www.w3.org/2001/XMLSchema-instance" />
        </map>
    </property>
    <property name="marshaller" ref="userAuthorizationTypeMarshaller" />
    <property name="overwriteOutput" value="true" />
    <property name="resource" value="file://C:/TEMP/fichierOUT.xml" />
    <property name="transactional" value="false" />
</bean>
写入文件时,我希望将动作值封装到
块中

我尝试使用
@XmlJavaTypeAdapter(Adapter1.class)
返回:

public String marshal(String value) {
    return "<![CDATA[" + value + "]]>";
}
公共字符串封送处理(字符串值){
返回“”;
}
但是输出被转义了:

<UserAuthorization><Action>&lt;![CDATA[first, second, third]]&gt;</Action></UserAuthorization>
![CDATA[第一、第二、第三]]

您有什么想法吗?

您必须创建一个自定义XML封送拆收器,并注册应作为CDATA输出的元素。看看这个例子是否有用

public String marshal(String value) {
    return "<![CDATA[" + value + "]]>";
}
<UserAuthorization><Action>&lt;![CDATA[first, second, third]]&gt;</Action></UserAuthorization>