Я пытаюсь написать фрагмент XML, содержащий элемент CData, в Spring StaxtItemWriter и Jaxb marshaller. Но вывод либо:
- не обертывать
<![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
<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>
Есть ли у вас какие-либо идеи?