gpt4 book ai didi

java - Jaxb2Marshaller 使用空 namespace URI 创建 JAXBContext

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:06 27 4
gpt4 key购买 nike

使用 Spring 3,我创建了一个 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 正在创建一个包含两个不同命名空间 URI 的 JAXBContext。一个是我的架构,另一个是空白字符串。空白字符串会覆盖我分配默认命名空间的任何尝试。

有人知道为什么会出现这个空白字符串或者我如何摆脱它?

最佳答案

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

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

参见JAXB marshalling problem - probably namespace related 。您可以简单地在标准 @XmlSchema 注释上配置 namespace 前缀,而不是使用 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"/>

关于java - Jaxb2Marshaller 使用空 namespace URI 创建 JAXBContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3333600/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com