首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用空命名空间URI创建JAXBContext的Jaxb2Marshaller

使用空命名空间URI创建JAXBContext的Jaxb2Marshaller
EN

Stack Overflow用户
提问于 2010-07-26 17:25:56
回答 1查看 5.6K关注 0票数 1

使用Spring3,我使用下面的编组程序创建了一个MarshallingView:

代码语言:javascript
运行
复制
<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。一个是我的模式,另一个是空字符串。空白字符串覆盖了我分配默认名称空间的任何尝试。

谁知道为什么会有这个空字符串,或者我怎么才能去掉它?

EN

回答 1

Stack Overflow用户

发布于 2010-08-03 22:03:45

您可以尝试使用MOXy JAXB。Spring配置保持不变,您只需使用以下条目在模型类中添加一个jaxb.properties文件:

代码语言:javascript
运行
复制
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

参见JAXB marshalling problem - probably namespace related。您可以简单地在标准@XmlSchema注释上配置名称空间前缀,而不是使用NamespacePrefixMapper:

代码语言:javascript
运行
复制
@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:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://www.example.org" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3333600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档