【发布时间】:2014-06-13 18:35:44
【问题描述】:
我有一个用于将 Java 对象编组为 XML 的 JAXB 配置。它完成了这项工作,但是,它省略了命名空间前缀并将<?xml version="1.0" encoding="UTF-8" standalone="yes"? 附加到编组字符串的前面。
<beans:bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller" p:contextPath="org.ncpdp.schema.script">
<beans:property name="schema" value="classpath:/schema/SCRIPT_XML_10_6_OPPR.xsd"/>
<beans:property name="marshallerProperties">
<beans:map>
<beans:entry key="jaxb.formatted.output"><beans:value type="boolean">true</beans:value></beans:entry>
<beans:entry key="com.sun.xml.internal.bind.namespacePrefixMapper" value-ref="namespaceMapper"></beans:entry>
</beans:map>
</beans:proper
ty>
</beans:bean>
</beans:bean>
public class NamespaceMapper extends NamespacePrefixMapper implements ListenerConstants{
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion,
boolean requirePrefix) {
if(NAME_SPACE_SCHEMA_URL.equals(namespaceUri)) {
return NS_PREFIX_SCR;
} else if(KPRX_NAME_SPACE_URL.equals(namespaceUri)) {
return NS_PREFIX_V5;
}
return suggestion;
}
}
public String marshal(final Object object) throws JAXBException {
final StringWriter writer = new StringWriter();
final JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class );
final Marshaller unmarshaller = jaxbContext.createMarshaller();
unmarshaller.marshal(object, new StreamResult(writer));
return writer.toString();
}
我想要一条带有类似前缀的消息
<NS2:TEST>
<NS2:ID>123</NS2:ID>
</NS2:TEST>
没有这个声明<?xml version="1.0" encoding="UTF-8" standalone="yes"?
【问题讨论】: