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

已忽略JAXB@XMLSchema位置

车峻熙
2023-03-14

我正在尝试使用JAXB生成一个sitemap.xml,并且忽略了location属性(我想在根元素上生成xsi:schemaLocation属性)。

我想生成一个xml,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<ns3:urlset 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns3="http://www.sitemaps.org/schemas/sitemap/0.9"
    xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
        http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    <urls>
        <loc>http://domain.com</loc>
    </urls>
    <urls>
        <loc>http://domain.com/test</loc>
    </urls>
</ns3:urlset>
@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://www.sitemaps.org/schemas/sitemap/0.9",
    xmlns = @javax.xml.bind.annotation.XmlNs( prefix = "xsi", namespaceURI="http://www.w3.org/2001/XMLSchema-instance" ),
    location = "http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED
)
package com.domain.site.sitemap
@Test public void createXmlObject(){
    List urls = [ "test1", "test2", "test3" ]
    Sitemap map = new Sitemap( urls )
    JAXBContext jaxbContext = JAXBContext.newInstance( Sitemap )
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller()
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true)
    jaxbMarshaller.marshal(map, System.out)
}

生成根元素,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://www.sitemaps.org/schemas/sitemap/0.9">

如果我更新测试以使用jaxbmarshaller.setproperty(marshaller.jaxb_schema_location,“location..”)显式设置位置,那么它将被填充--但我想了解为什么它不能与注释一起工作。

共有1个答案

仇征
2023-03-14

根据规格:

实施者注意事项[...]

但是,允许模式生成器在schemaLocation属性中使用不同的值(包括不生成这样的属性),例如,以便用户可以通过命令行界面指定资源的本地副本。

因此,是否生成位置取决于实现提供者。

 类似资料:
  • 对象使用JAXBContext创建的封送器进行封送。生成的xml将变成: 类Hi是从不能更改的xsd生成的。我的问题是,如果“hello”为null,有没有一种方法可以让封送器忽略nillable参数,并且不向xml输出任何内容?

  • 当目标WSDL/XSDS放在某些特定路径下时,wsimport和xjc命令(都是作为Java JDK的一部分下载的)将忽略提供的jaxb绑定文件。

  • 我一直在使用Metro,遇到了一个问题,wsgen似乎忽略了我在web方法响应类上添加的任何JAXB注释。 我试图返回一组实体类,我想通过网络服务向外部客户端公开,但是我只想让某些类属性和方法对外部客户端可见,所以将类存取类型设置为PROPERTY,并进行注释所有属性我想成为@XmlElement类的XML版本的一部分。 我可以使用schemagen ant任务为实体类创建XML模式,该任务正确地

  • 我需要生成一个XML文档,开头如下:

  • 问题内容: 我和我的团队正在尝试通过更改视频帧频来对视频文件进行重新编码,以使其更具“格调”感。我们将以下属性用于: 但是输出视频仍以正常帧频播放(使用播放)。 降低视频帧速率的正确方法是什么? (例如12)。 朝着正确方向的任何帮助都将受到高度重视。 我们卡住了。此致Roi 问题答案: 您可以控制附加到每个样品的时间直接。 您需要在提供的时间中调整时间。使用和检索当前的时间信息,然后遍历每个样本

  • 当我试图使用包含名称空间的JAXB将xml转换为Java对象时,会发生错误。 示例示例:' Zeta Walnes ` 我需要忽略名称空间