我正在使用 JAXB 编组一个对象,这会产生以下输出
<?xml version="1.0"?><Jetstream xmlns="http://Jetstream.TersoSolutions.com/v1.0/HeartbeatEvent">......
我想要的输出是
<?xml version="1.0"?><Jetstream xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Jetstream.TersoSolutions.com/v1.0/HeartbeatEvent">
我正在使用以下代码封送对象
JAXBContext context;
try {
context = JAXBContext.newInstance(heartbeat.getClass());
OutputStream writer = new ByteArrayOutputStream();
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.0\"?>");
heartbeat.setHeader(header);
heartbeat.setHeartbeatEvent(event);
marshaller.marshal(heartbeat, writer);
String stringXML = writer.toString();
return stringXML;
} catch (JAXBException e) {
throw new RuntimeException("Problems generating XML in specified "
+ "encoding, underlying problem is " + e.getMessage(),
e);
添加
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.w3.org/2001/XMLSchema");
将导致输出接近预期,除了顺序错误和前缀错误
<?xml version="1.0"?><Jetstream xmlns="http://Jetstream.TersoSolutions.com/v1.0/HeartbeatEvent" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema">...
我想寻求一些帮助,以正确的顺序和正确的前缀生成我的命名空间。
编辑
在遵循评论中的建议后,我仍然没有任何运气。我将以下内容添加到相关包中的 package-info.java 文件中。
@javax.xml.bind.annotation.XmlSchema(
namespace = "http://Jetstream.TersoSolutions.com/v1.0/HeartbeatEvent",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
xmlns={@XmlNs(prefix="xsd", namespaceURI="http://www.w3.org/2001/XMLSchema") })
我的结果输出是
<?xml version="1.0"?><ns2:Jetstream xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://Jetstream.TersoSolutions.com/v1.0/HeartbeatEvent">
由于某种原因,前缀被缩短了,现在整个 xml 中都有 ns2: 标签。这些标签不能存在。