我正在尝试配置JaxB2Marshaller以便转义诸如“ <”或“>”之类的特殊字符,因为marshaller会将其解析为&gt&lt,并且我想保留<>字符。
我读了一篇帖子(here),内容如下:
为marshaller设置以下属性:marshaller.setProperty(“ jaxb.encoding”,“ Unicode”); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); marshaller.setProperty(CharacterEscapeHandler.class.getName(),new CustomCharacterEscapeHandler());
因此,我创建了一个bean,并设法设置了前2个第一个属性(Encoding和Formatted Output),但是在设置CharacterEscapeHandler时出现了异常。我收到此异常:
方法抛出“ org.springframework.oxm.UncategorizedMappingException”异常。 javax.xml.bind.PropertyException:名称:com.sun.xml.bind.marshaller.CharacterEscapeHandler值:com.sun.xml.internal.bind.marshaller.NoEscapeHandler@6bc5dd2a
我认为这是因为我没有正确配置bean属性
<bean id="noEscapeHandler" class="com.sun.xml.internal.bind.marshaller.NoEscapeHandler" />
<bean id="customJaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="${custom.jaxb2.contextpath}"/>
<property name="marshallerProperties">
<map>
<entry>
<key>
<util:constant static-field="javax.xml.bind.Marshaller.JAXB_FRAGMENT"/>
</key>
<value type="java.lang.Boolean">true</value>
</entry>
<entry>
<key>
<util:constant static-field="javax.xml.bind.Marshaller.JAXB_ENCODING"/>
</key>
<value type="java.lang.String">Unicode</value>
</entry>
<entry>
<key>
<util:constant static-field="javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT"/>
</key>
<value type="java.lang.Boolean">true</value>
</entry>
<entry value-ref="noEscapeHandler" key="com.sun.xml.bind.marshaller.CharacterEscapeHandler"/>
</map>
</property>
</bean>
有任何提示吗?我以为我的问题就在这里。如何将这个Java代码转换为像上面显示的那样的bean xml声明的属性?
marshaller.setProperty(CharacterEscapeHandler.class.getName(), new CustomCharacterEscapeHandler());