Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jaxb2Marshaller使用空命名空间URI创建JAXBContext_Java_Spring_Jaxb - Fatal编程技术网

Java Jaxb2Marshaller使用空命名空间URI创建JAXBContext

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

使用Spring 3,我创建了一个MarshallingView,其中包含以下marshaller:

<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生成的对象,因此我无法手动编辑注释。我不确定是否可以将属性文件与它们一起放在包中,或者可以放在类路径上的任何位置?