- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类(class):
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee {
@XmlAttribute
@XmlID
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Employee getManager() {
return manager;
}
public void setManager(Employee manager) {
this.manager = manager;
}
public List<Employee> getReports() {
return reports;
}
public void setReports(List<Employee> reports) {
this.reports = reports;
}
@XmlAttribute
private String name;
@XmlIDREF
private Employee manager;
@XmlElement(name="report")
@XmlIDREF
private List<Employee> reports;
public Employee() {
reports = new ArrayList<Employee>();
}
}
公司类别:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {
@XmlElement(name="employee")
private List<Employee> employees;
public Company() {
employees = new ArrayList<Employee>();
}
public List<Employee> getEmployees(){
return employees;
}
}
我的主要包含以下内容:
Employee employee1 = new Employee();
employee1.setId("1");
employee1.setName("Jane Doe");
company.getEmployees().add(employee1);
Employee employee2 = new Employee();
employee2.setId("2");
employee2.setName("John Smith");
employee2.setManager(employee1);
employee1.getReports().add(employee2);
company.getEmployees().add(employee2);
Employee employee3 = new Employee();
employee3.setId("3");
employee3.setName("Anne Jones");
employee3.setManager(employee1);
employee1.getReports().add(employee3);
company.getEmployees().add(employee3);
如果我编码它,它就可以正常运行。但是,如果我创建以下架构,然后在 main 中添加该架构,则会出现以下错误:
架构:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="company" type="company"/>
<xs:complexType name="company">
<xs:sequence>
<xs:element name="employee" type="employee" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="employee">
<xs:sequence>
<xs:element name="manager" type="xs:IDREF" minOccurs="0"/>
<xs:element name="report" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:schema>
收到错误:
线程“main”中出现异常 javax.xml.bind.MarshalException - 带有链接异常:[org.xml.sax.SAXParseException:cvc-datatype-valid.1.2.1:“1”不是“NCName”的有效值。]
我知道这是因为 NCName 不能以数字开头并且有空格。但就我而言,id 是一个数字。
我想知道:1)为什么只有当我包含架构时才会发生这种情况?2)解决方法是什么,这是使用moxy的唯一方法
最佳答案
1) 使用 marshaller.setSchema(schema) 设置 XML 模式;打开针对该 XML 架构的验证,并且您知道全数字 ID 值无效。
2) 您可以使用适配器。
在Employee.java中添加注释:
@XmlAttribute
@XmlID
@XmlJavaTypeAdapter(Adapter.class)
private String id;
您将需要这个简单的类:
public class Adapter extends XmlAdapter<String, String> {
@Override
public String marshal(String s) throws Exception {
return "_" + s;
}
@Override
public String unmarshal(String v) throws Exception {
return v.substring(1);
}
}
根据 XML 架构,生成的 XML 将是正确的:
<company>
<employee id="_1" name="Jane Doe">
<report>_2</report>
<report>_3</report>
</employee>
<employee id="_2" name="John Smith">
<manager>_1</manager>
</employee>
<employee id="_3" name="Anne Jones">
<manager>_1</manager>
</employee>
</company>
关于java - 如何在 xmlID 中使用数字和空格 xmlIDREF JAXB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849796/
我不太明白 @XmlIDREF 和 @XmlID 如何协同工作。通过使用 XmlIDREF,我只创建对实际元素的引用。但是 XmlID 的用例是什么。 我想创建对 Publication 类的引用。使
我有以下层次结构: public class Small { private String xmlId; @XmlID @XmlAttribute public Str
如果有一些带有相同值的@XmlID 注释属性,即使它们属于不同类型,JAXB 也无法成功解码对象,但是编码很好。 这是一个错误吗? 否则,如何支持该功能? 代码: package xml; impor
好的。我是 JAXB 新手,在 XmlID 和 XmlIDREF 方面遇到一些麻烦,其中 ID 位于抽象类中。 这是我的问题: 抽象类 @XmlAccessorType(XmlAccessType.F
jaxb @XmlIDREF @XmlID 工作惊人 我的 xml 输入是 1
我有以下类(class): @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Employee {
我正在使用 Hibernate 和 RESTeasy,我尽量避免与这些实体形成循环,因为我在 Artiste 和 Oeuvre 实体之间存在 OneToMany (ManyToOne) 双向关系: O
我有两个类,如下所示,带有 JAXB 注释。我查过有关应对周期的信息,但我仍然不明白。在示例中,@XmlID 和@XmlIDREF 在这两个类中如何相互协作?为什么两个类中都有@XmlDREF?有人可
我正在尝试将两个不同的 XML 文件编码/取消编码到 POJOS。第一个 XML 文件如下所示: --Network.xml--
根据 https://gist.github.com/VineetReynolds/5108580 ,JAXB 规范要求用 @XmlID 注释的元素是 String。 MOXy 在 2.5.x 版
我正在尝试将两个不同的 XML 文件编码/取消编码到 POJOS。第一个 XML 文件如下所示: --Network.xml--
我正在使用 CXF 公开 Web 服务。我使用 @XmlID 和 @XmlIDREF JAXB 注释来在编码/解码期间维护对象图的引用完整性。 WSDL 正确地包含具有 xs:id 和 xs:idre
您好,我在使用网络服务时遇到问题我有一个包含许多角色的用户对象。 当我从包含一个角色的网络服务中获取一个用户(Id:3)时,该角色包含许多用户(id:3和id 2)。我收到一个错误 由以下原因引起:j
我已经实现了一个基于 JPA 和 JAXB 的 REST API。 我有一个大致像这样的类(非常简化): @Entity @XmlRootElement ... public class Thing
我有这样两个实体: @XmlRootElement(name = "provider") @XmlAccessorType(XmlAccessType.PROPERTY) @Entity pub
我正在使用@XmlID 和@XmlIDREF 标记从一个对象引用另一个对象。即使使用继承类,它在 Java 6 中也能正常工作。我创建的示例代码如下所示。基类使用的标签: @XmlRootElemen
我是一名优秀的程序员,十分优秀!