忽略Spring Batch CharacterEscapeHandler属性
与JAXB2Marshaller一起使用时,Spring批处理StatxevenitemWriter似乎无法识别所设置的Marshaller属性。有没有人有在SpringBatch中使用CharacterEscapeHandler的经验 我需要JAXB忽略转义特殊字符,如“<;”和“>;”请忽略空格,我确实重写了我的JAXB2Marshaller的“initJaxbMarshaller”,如下所示,但它似乎无法识别忽略Spring Batch CharacterEscapeHandler属性,spring,escaping,spring-batch,jaxb2,Spring,Escaping,Spring Batch,Jaxb2,与JAXB2Marshaller一起使用时,Spring批处理StatxevenitemWriter似乎无法识别所设置的Marshaller属性。有没有人有在SpringBatch中使用CharacterEscapeHandler的经验 我需要JAXB忽略转义特殊字符,如“<;”和“>;”请忽略空格,我确实重写了我的JAXB2Marshaller的“initJaxbMarshaller”,如下所示,但它似乎无法识别 @Override protected void initJax
@Override
protected void initJaxbMarshaller(Marshaller marshaller)throws JAXBException{
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty(CharacterEscapeHandler.class.getName(), new CharacterEscapeHandler() {
@Override
public void escape(char[] buf, int start, int length,
boolean isAttVal, Writer out)
throws IOException {
for (int i = start; i < start + length; i++) {
char ch = buf[i];
log.debug(ch);
out.write(ch);
}
//log.debug("Just flushing char --> "+ch.toString());
//writer.write(ch, start, length);
}
});
}
用于处理CDATA的CDATA适配器类
public class CdataAdapter extends XmlAdapter<String, String>{
@Override
public String marshal(String v) throws Exception {
return "<![CDATA[" + v + "]]>";
}
@Override
public String unmarshal(String v) throws Exception {
return v;
}
}
JAXB2Marshaller-Spring-config
<bean id="userXMLMarshaller" class="org.test.model.xml.marshallers.CustomJAXB2XMLMarshaller">
<property name="classesToBeBound">
<list>
<value>org.test.xml.User</value>
</list>
</property>
</bean>
实际XML输出
<?xml version="1.0" encoding="ISO-8859-1"?>
<LOAD FORMAT="XMLFormat" OVERRIDE="true">
<USER ID="someId">
<NAME>userName</NAME>
<COMPANY><![CDATA[companyName]]></COMPANY>
</USER>
.....
<LOAD>
另外,Spring批处理中似乎已经存在一个错误,它不打算正确地输出XML,并且有修复程序;链接-
你会认为《逃逸汉德勒》这个角色也是这样吗?非常感谢您的建议。您可以发布您的文件和jaxb映射对象的示例吗?Luca,根据要求对我的文章进行了编辑。。抱歉,尝试了几次后无法提供帮助。也许米内拉或其他人可以就这个问题提供建议/解决方案。我感谢你花时间尝试卢卡。哈里什,我也面临同样的问题。你解决了这个问题吗?
<bean id="userXMLMarshaller" class="org.test.model.xml.marshallers.CustomJAXB2XMLMarshaller">
<property name="classesToBeBound">
<list>
<value>org.test.xml.User</value>
</list>
</property>
</bean>
<?xml version="1.0" encoding="ISO-8859-1"?>
<LOAD FORMAT="XMLFormat" OVERRIDE="true">
<USER ID="someId">
<NAME>userName</NAME>
<COMPANY><![CDATA[companyName]]></COMPANY>
</USER>
.....
<LOAD>