使用Spring3,我使用下面的编组程序创建了一个MarshallingView:
<bean name="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshalle r">
<property name="classesToBeBound">
<list>
<value>com.mydomain.xml.schema.Products</value>
</list>
</property>
<property name="marshallerProperties">
<map>
<entry key="com.sun.xml.bind.namespacePrefixMapper">
<bean class="com.mydomain.xml.MyNamespacePrefixMapper"/>
</entry>
</map>
</property>
</bean>MyNamespacePrefixMapper应该将Products对象(由XJC生成)的模式映射到默认名称空间,但这并不是因为Jaxb2Marshaller创建的JAXBContext包含两个不同的名称空间URI。一个是我的模式,另一个是空字符串。空白字符串覆盖了我分配默认名称空间的任何尝试。
谁知道为什么会有这个空字符串,或者我怎么才能去掉它?
发布于 2010-08-03 22:03:45
您可以尝试使用MOXy JAXB。Spring配置保持不变,您只需使用以下条目在模型类中添加一个jaxb.properties文件:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory参见JAXB marshalling problem - probably namespace related。您可以简单地在标准@XmlSchema注释上配置名称空间前缀,而不是使用NamespacePrefixMapper:
@javax.xml.bind.annotation.XmlSchema(
namespace = "http://www.example.org",
xmlns = {
@javax.xml.bind.annotation.XmlNs(prefix = "xsd", namespaceURI = "http://www.w3.org/2001/XMLSchema"),
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package example; 这会产生如下的XML:
<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://www.example.org" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>https://stackoverflow.com/questions/3333600
复制相似问题