【发布时间】:2018-02-14 13:56:27
【问题描述】:
我通过 xjc 从一个大 XSD 文件生成了大约 100 个(如果不是更多)Java 类。
该 XSD 文件的元素具有大写名称。现在,当我从这些生成的 Java 类中编组一个对象时,我遇到了一些问题。
JAXB marshall 生成的示例 XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<advertiser xmlns:ns2="http://p.t.com/service">
<ns2:Name>TEST Adv 001</ns2:Name>
</advertiser>
元素的名称(但不是子元素的名称)由 JAXB 以小写形式生成。我需要它们是大写的(因为它们在 XSD 中)。
有一些奇怪的 ns2: 元素名称的前缀,例如 我希望此示例中的 xmlns:ns2 仅变为 xmlns,而 ns2:Name 仅变为 Name。 SO上的一个答案建议将attributeFormDefault="unqualified"放在XSD中,但似乎也没有帮助我。
如何解决这两个问题?
我在这里寻找类似的问题,但没有找到与我完全相同的问题。此外,那里的答案看起来很复杂,他们要求更改我无法做到的 Java 类。为什么要这么复杂?!
请注意,我的 Java 类是自动生成的,所以我不想手动更改它们。
我想知道为什么 XSD 说的是一件事,而 JAXB 编组进程产生的是另一件事。 JAXB marshall 不应该生成 100% 符合 XSD 的 XML 吗?
编辑
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Advertiser", propOrder = {
})
public class Advertiser {
@XmlElement(name = "TelID")
protected Integer telID;
@XmlElement(name = "Name")
protected String name;
@XmlElementRef(name = "Address", namespace = "http://p.t.com/service", type = JAXBElement.class)
protected JAXBElement<String> address;
.............
编辑 2
Advertiser adv = new Advertiser();
adv.setName("TEST Adv 001");
StringWriter sw = new StringWriter();
JAXB.marshal(adv, sw);
System.out.println(sw.toString());
【问题讨论】: