如何使用 JAXB 将 Java 对象转换为 XML 元素属性
How to convert Java objects to XML element attributes using JAXB
如何使用 JAXB
将 java 对象转换为 xml 以获得以下 xml:
<Case>
<Version>1.0</Version>
<Code>457123</Code>
<Meta uc=\"Sample\" pip=\"116.0.1.1\" lot=\"P\"/>
</Case>
关于如何获得 XML 有很多答案。我已经经历了所有这些。但我的问题是如何获得我所展示的 XML 。它包含一个自闭合标签,甚至包含属性。
我正在使用 Eclipse IDE。请推荐一个方法。
这是我的案例class:
import auth.Res.Meta;
@XmlRootElement (name="Case")
public class Test {
private Meta mt;
private String version;
private String code;
@XmlRootElement
public class Meta {
@XmlAttribute
private String uc;
@XmlAttribute
private String pip;
public String getUc() {
return uc;
}
public void setUc(String uc) {
this.uc = uc;
}
public String getPip() {
return pip;
}
public void setPip(String pip) {
this.pip = pip;
}
}
public Meta getMt() {
return mt;
}
public void setMt(Meta mt) {
this.mt = mt;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
解决方案:
我按照 LazerBanana 在第一个答案中的建议,通过为 Meta 创建单独的 class 解决了这个问题。
这就是您的 Meta class 的样子。
public class Meta {
private String uc;
private String pip;
private String lot;
public String getUc() {
return uc;
}
@XmlAttribute
public void setUc(String uc) {
this.uc = uc;
}
public String getPip() {
return pip;
}
@XmlAttribute
public void setPip(String pip) {
this.pip = pip;
}
public String getLot() {
return lot;
}
@XmlAttribute
public void setLot(String lot) {
this.lot = lot;
}
}
这是你的 Case class 这是根元素
@XmlRootElement
public class Case {
private int version;
private String code;
private String id;
private Meta meta;
public int getVersion() {
return version;
}
@XmlElement
public void setVersion(int version) {
this.version = version;
}
public String getCode() {
return code;
}
@XmlElement
public void setCode(String code) {
this.code = code;
}
public String getId() {
return id;
}
@XmlElement
public void setId(String id) {
this.id = id;
}
public Meta getMeta() {
return meta;
}
@XmlElement
public void setMeta(Meta meta) {
this.meta = meta;
}
}
这是控制台和您想要的文件的编组位。
public class Main {
public static void main(String... args) {
Case fcase = new Case();
Meta meta = new Meta();
meta.setLot("asd");
meta.setPip("sdafa");
meta.setUc("asgd4");
fcase.setMeta(meta);
fcase.setVersion(1);
fcase.setId("sah34");
fcase.setCode("code34");
try {
// File file = new File("C:\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Case.class, Meta.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// jaxbMarshaller.marshal(fcase, file);
jaxbMarshaller.marshal(fcase, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
输出:
<case>
<code>code34</code>
<id>sah34</id>
<meta lot="asd" pip="sdafa" uc="asgd4"/>
<version>1</version>
</case>
下次请尝试做更多的研究,我不是专家,我只是用谷歌搜索了一下。
我需要创建一个接受 xml 我有 gien 格式的休息服务。多数民众赞成你我需要它在一个 class.
@POST
@Path("/add")
@Consumes("application/xml")
@Produces("application/xml")
public Response getper(Test test)
{
String nam=test.getVersion();
int cd=test.getCode();
Res rs=new Res();
rs.setMessage(nam);
.
.
return Response.status(200).entity(rs).build();
}
如何使用 JAXB
将 java 对象转换为 xml 以获得以下 xml:
<Case>
<Version>1.0</Version>
<Code>457123</Code>
<Meta uc=\"Sample\" pip=\"116.0.1.1\" lot=\"P\"/>
</Case>
关于如何获得 XML 有很多答案。我已经经历了所有这些。但我的问题是如何获得我所展示的 XML 。它包含一个自闭合标签,甚至包含属性。
我正在使用 Eclipse IDE。请推荐一个方法。
这是我的案例class:
import auth.Res.Meta;
@XmlRootElement (name="Case")
public class Test {
private Meta mt;
private String version;
private String code;
@XmlRootElement
public class Meta {
@XmlAttribute
private String uc;
@XmlAttribute
private String pip;
public String getUc() {
return uc;
}
public void setUc(String uc) {
this.uc = uc;
}
public String getPip() {
return pip;
}
public void setPip(String pip) {
this.pip = pip;
}
}
public Meta getMt() {
return mt;
}
public void setMt(Meta mt) {
this.mt = mt;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
解决方案:
我按照 LazerBanana 在第一个答案中的建议,通过为 Meta 创建单独的 class 解决了这个问题。
这就是您的 Meta class 的样子。
public class Meta {
private String uc;
private String pip;
private String lot;
public String getUc() {
return uc;
}
@XmlAttribute
public void setUc(String uc) {
this.uc = uc;
}
public String getPip() {
return pip;
}
@XmlAttribute
public void setPip(String pip) {
this.pip = pip;
}
public String getLot() {
return lot;
}
@XmlAttribute
public void setLot(String lot) {
this.lot = lot;
}
}
这是你的 Case class 这是根元素
@XmlRootElement
public class Case {
private int version;
private String code;
private String id;
private Meta meta;
public int getVersion() {
return version;
}
@XmlElement
public void setVersion(int version) {
this.version = version;
}
public String getCode() {
return code;
}
@XmlElement
public void setCode(String code) {
this.code = code;
}
public String getId() {
return id;
}
@XmlElement
public void setId(String id) {
this.id = id;
}
public Meta getMeta() {
return meta;
}
@XmlElement
public void setMeta(Meta meta) {
this.meta = meta;
}
}
这是控制台和您想要的文件的编组位。
public class Main {
public static void main(String... args) {
Case fcase = new Case();
Meta meta = new Meta();
meta.setLot("asd");
meta.setPip("sdafa");
meta.setUc("asgd4");
fcase.setMeta(meta);
fcase.setVersion(1);
fcase.setId("sah34");
fcase.setCode("code34");
try {
// File file = new File("C:\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Case.class, Meta.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// jaxbMarshaller.marshal(fcase, file);
jaxbMarshaller.marshal(fcase, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
输出:
<case>
<code>code34</code>
<id>sah34</id>
<meta lot="asd" pip="sdafa" uc="asgd4"/>
<version>1</version>
</case>
下次请尝试做更多的研究,我不是专家,我只是用谷歌搜索了一下。
我需要创建一个接受 xml 我有 gien 格式的休息服务。多数民众赞成你我需要它在一个 class.
@POST
@Path("/add")
@Consumes("application/xml")
@Produces("application/xml")
public Response getper(Test test)
{
String nam=test.getVersion();
int cd=test.getCode();
Res rs=new Res();
rs.setMessage(nam);
.
.
return Response.status(200).entity(rs).build();
}