当前位置: 首页 > 知识库问答 >
问题:

如何用JAXB将多个名称空间封送到XML根元素

卫仲卿
2023-03-14

我想让JAXB列表到xml,其中命名空间只出现在根元素中,而不是在任何其他元素中:

<myroot xmlns="http://www.mysite.com" xmlns:a="http://www.mysite.com/a" xmlns:ab="http://www.mysite.com/ab" xmlns:y="http://www.mysite.com/y">
...
</myroot>

我已经尝试了package level @XmlSchema,但是我一定是做错了什么,因为没有显示任何东西。

这是我的根元素类:

@XmlRootElement(name="myroot")
@XmlAccessorType(XmlAccessType.FIELD)
public class RootElementClass
{
....
}

我还有以下包-info.java:

@XmlSchema
(
    namespace="http://www.mysite.com", 
    elementFormDefault=XmlNsForm.QUALIFIED,
    xmlns=
    {
            @XmlNs(namespaceURI = "http://www.mysite.com",    prefix = ""),
            @XmlNs(namespaceURI = "http://www.mysite.com/a",  prefix = "a"),
            @XmlNs(namespaceURI = "http://www.mysite.com/ab", prefix = "ab"),
            @XmlNs(namespaceURI = "http://www.mysite.com/y",  prefix = "y")
    }
)
package com.seastreetinc.rd.nso.jaxb;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

共有1个答案

祁俊拔
2023-03-14

JAXB(JSR-222)规范没有涵盖名称空间声明的位置或前缀的名称(请参见:http://blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html).

实现使用的一般策略是找出模型使用的最小命名空间量,并在根元素上声明它们。这可能是您在@XmlSchema注释中声明的内容的子集。

NamespacePrefix Mapper扩展可用于控制根元素上的命名空间。有关完整示例,请参阅下面链接的答案。

    < li>JAXB -将动态生成的名称空间移动到文档根目录
 类似资料:
  • 我正在开发一个客户端来使用 Web 服务,但由于某种原因,除非所有命名空间都正确且没有任何前缀,否则我的请求没有得到正确处理。 我所有的类都是由服务提供商使用提供的XSD和WSDL创建的。 NfeDadosMsg.class 包装信息.java TConsStatServ.class package br.inf.portalfiscal.nfe; 包装信息.java 输出xml: 由于某种原因,

  • 2)如果我按照下面的方式编辑package-info,那么它是很好的,但是问题是我创建的是一个JAXB整数元素如下所示,前缀删除没有应用于这些元素

  • 我花了一些时间来调查是什么问题,但我不能解决它。当我在XML下面反封送和回封送时,我看到的是不同的XML。 在上面的xml中,只有一个标记(第一个),其余所有(包括名称空间)都是意外元素。另一个应用程序发送上述XML。 null 我真的不明白QName的事

  • 我在名称空间方面有问题。我需要从一个公共api (Prestashop)解组。该api使用xml作为xlink类型,如下所示: 每种产品的 API 为: 我为每个XML生成了两个包含pojo类的包。我想从产品列表中获取给定id的任何产品的属性。 我有一个产品,其中包含@XMLSchema命名空间,但这个命名空间仅针对一个路径是静态的。我知道这不是这样做的方法。 下面,我的客户类。 这里有代码:ht

  • 是否有一种使用JAXB从非根元素以编程方式获取名称空间的方法? 我可以在根元素上使用以下内容(其中DetailedReport是根元素对象): 但是,如果我尝试使用来自同一个包的类型,但不是根元素,qname为null。 根据JAXBIntrospector的javadocs: 参数对象是以下情况的JAXB元素: 它是javax.xml.bind.JAXBElement的实例,object的类用@

  • 我有5个schemas.xsd,用于生成Java类,然后封送XML文件。 问题是只有一种情况--对于这个文件,JAXB生成额外的名称空间前缀NS2。这是非常奇怪的,因为所有模式都是相同的,并且编组机制对于所有模式都是通用的。 生成机制: 对于不能正常工作的包: 包信息: 对象-工厂 良好工作包: 包信息: 和对象工厂看起来完全一样(当然除了命名)。