Я пытаюсь сгенерировать файл sitemap.xml с помощью JAXB, и атрибут location игнорируется (я хочу сгенерировать атрибут xsi:schemaLocation
на моем корневом элементе).JAXB @XmlSchema location ignored
Я хочу, чтобы сгенерировать 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>
Я видел другие вопросы: @xmlSchema annotation use with jaxb и How to generate the correct sitemap namespace using JAXB and Spring @ResponseBody in controller?
Но ни один из них решить эту проблему я испытываю с аннотацию.
Я следующий пакет-инфо:
@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..")
, тогда он будет заполнен - но я хочу обратить внимание и почему он не работает с аннотацией.
Спасибо - я заметил это в документах, но поскольку мой тест просто использует простой JAXB (JAXBContenxt создает javax.xml.bind.Marshaller), я надеялся, что они его осуществили. Я предполагаю, что это означает, что нет? – rhinds
Похоже на 'no'. Пытался разбудить источники, но это заняло слишком много времени. –