我正在尝试在Spring StaxtItemWriter和Jaxb marshaller中编写包含CData元素的XML片段。但输出是:
<![CDATA[ ... ]]>
<
和>
替换为<
和>
首先,项目编写者:
<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>
然后JAXB marshaller
<bean id="userAuthorizationTypeMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.usecase1.xsd.model"/>
</bean>
java类(简化):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "UserAuthorizationType", propOrder = {"action"})
@XmlRootElement(name = "UserAuthorization")
public class UserAuthorizationType {
@XmlElement(name = "Action", required = true)
protected String action;
public String getAction() {
return action;
}
public void setAction(String value) {
this.action = value;
}
}
写入文件时,我希望将Action值封装到<![CDATA[ ... ]]>
块中。
我尝试使用返回的@XmlJavaTypeAdapter(Adapter1.class)
:
public String marshal(String value) {
return "<![CDATA[" + value + "]]>";
}
但是输出被转义:
<UserAuthorization><Action><![CDATA[first, second, third]]></Action></UserAuthorization>
你有什么想法吗?
答案 0 :(得分:0)
您必须创建自定义XML编组程序并注册应作为CDATA输出的元素。看看此示例是否有助于https://jaxb.java.net/faq/JaxbCDATASample.java