我想了解以下标准和最佳实践:
案例场景:
如果“XYZ规范” (例如:BPMN规范)存在xml标准,例如:
<home>
<person name="ZEN" />
<person name="PAUL" />
<animal name="DOG" />
<animal name="CAT" />
</home>
Run Code Online (Sandbox Code Playgroud)
和“XYZ SPECIFICATION”还提供扩展元素来定义您自己的标签,例如:
<home>
<person name="ZEN" />
<person name="PAUL" />
<animal name="DOG" />
<animal name="CAT" />
<extension>
<instrument-list>
<type name="acoustic">
<instrument name="GUITAR" />
<instrument name="VIOLIN" />
</type>
<type name="electronic">
<instrument name="GUITAR" />
<instrument name="VIOLIN"/>
</type>
</instrument-list>
</extension>
</home>
Run Code Online (Sandbox Code Playgroud)
其他客户端解析器使用标准定义的标签,它们不需要解析扩展标签,所以我认为使用 json 压缩扩展元素会更好(因为与 xml 相比,json 占用的空间更少):
<home>
<person name="ZEN" />
<person name="PAUL" />
<animal name="DOG" />
<animal name="CAT" /> …Run Code Online (Sandbox Code Playgroud) 我创建了三个JAXB类:Home , Person , Animal。Java Class Home具有List<Object> any可能包含Person和/或Animal实例的变量。
public class Home {
@XmlAnyElement(lax = true)
protected List<Object> any;
//setter getter also implemented
}
@XmlRootElement(name = "Person") // Edited
public class Person {
protected String name; //setter getter also implemented
}
@XmlRootElement(name = "Animal") // Edited
public class Animal {
protected String name; //setter getter also implemented
}
Run Code Online (Sandbox Code Playgroud)
/ * 解组后 * /
Home home ;
for(Object obj : home .getAny()){
if(obj instanceof Person ){
Person person …Run Code Online (Sandbox Code Playgroud) @XmlElements({
@XmlElement(name = "house", type = House.class),
@XmlElement(name = "error", type = Error.class),
@XmlElement(name = "message", type = Message.class),
@XmlElement(name = "animal", type = Animal.class)
})
protected List<RootObject> root;
Run Code Online (Sandbox Code Playgroud)
其中RootObject是House,Error,Message,Animal的超类
root.add(new Animal());
root.add(new Message());
root.add(new Animal());
root.add(new House());
//Prints to xml
<animal/>
<message/>
<animal/>
<house/>
Run Code Online (Sandbox Code Playgroud)
但需要按照内部声明的顺序 @XmlElements({})
<house/>
<message/>
<animal/>
<animal/>
Run Code Online (Sandbox Code Playgroud) 为什么@ManyToOneJPA 规范没有mappedBy属性?
@ManyToOne既有单向关系,也@OneToMany有双向关系,但只有单向关系。这是为什么?
java ×3
jaxb ×2
jaxb2 ×2
xml ×2
xml-parsing ×2
eclipselink ×1
jpa ×1
jpa-2.0 ×1
json ×1
orm ×1