Java Jaxb2Marshaller使用空命名空间URI创建JAXBContext
使用Spring 3,我创建了一个MarshallingView,其中包含以下marshaller:Java Jaxb2Marshaller使用空命名空间URI创建JAXBContext,java,spring,jaxb,Java,Spring,Jaxb,使用Spring 3,我创建了一个MarshallingView,其中包含以下marshaller: <bean name="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshalle r"> <property name="classesToBeBound"> <list> <value>com.mydomain.xml.sch
<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>
com.mydomain.xml.schema.Products
MyNamespacePrefixMapper应该将Products对象(生成的XJC)的模式映射到默认名称空间,但事实并非如此,因为Jaxb2Marshaller正在创建一个包含两个不同名称空间URI的JAXBContext。一个是我的模式,另一个是空白字符串。空白字符串覆盖了我试图分配默认命名空间的任何尝试。
有人知道为什么会有这个空白字符串吗?或者我怎么才能去掉它 您可以尝试使用。Spring配置保持不变,只需在模型类中添加一个jaxb.properties文件,并使用以下条目:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
看。您不必使用NamespacePrefixMapper,只需在标准@XmlSchema注释上配置Namesape前缀即可:
@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"/>
您可以尝试使用。Spring配置保持不变,只需在模型类中添加一个jaxb.properties文件,并使用以下条目:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
看。您不必使用NamespacePrefixMapper,只需在标准@XmlSchema注释上配置Namesape前缀即可:
@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"/>
不幸的是,我的对象是XJC生成的对象,因此无法手动编辑注释。我不确定是否可以将属性文件与它们一起放在包中,或者可以放在类路径上的任何位置?不幸的是,我的对象是XJC生成的对象,因此我无法手动编辑注释。我不确定是否可以将属性文件与它们一起放在包中,或者可以放在类路径上的任何位置?