我试图使用JaxB解组基本的XML文件,但代码有问题 . marshaller正确运行,但unmarshaller不返回XML文件中的内容,而是返回 com.project.test.Jaxb@094jufd34c
. (该类的名称后跟'@',随机组合字母和数字) . 这是下面的代码 . 感谢您的帮助或想法 .
XML注释类:
@XmlRootElement
public class Jaxb {
String newString;
public String getNewString() {
return newString;
}
@XmlElement
public void setNewString(String newString) {
this.newString = newString;
}
}
编组:
public class Marshal {
Jaxb newWindow = new Jaxb();
String xmlString;
void marshal(String[] args) {
xmlString="a,b,c";
newWindow.setNewString(xmlString);
try {
File file = new File("newXml.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Jaxb.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(newWindow, file);
jaxbMarshaller.marshal(newWindow, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
解组:
public class unmarshal {
static String unMarshal() {
String unmarshString="";
try {
File x = new File("newXml.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Jaxb.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Jaxb newUnmarshal = (Jaxb) jaxbUnmarshaller.unmarshal(x);
unmarshString = newUnmarshal.toString();
} catch (JAXBException e) {
e.printStackTrace();
System.out.print("error");
}
return unmarshString;
}
}
1 回答
com.project.test.Jaxb@094jufd34c
是Jaxb
类上默认toString()
实现的输出 . 覆盖toString
以输出您需要输出的内容,例如但是,我猜测,因为你的
unmarshal
方法专门返回一个String,那么你真正想做的只是unmarshString = newUnmarshal.getNewString()
而不是unmarshString = unmarshal.toString()
它's not random, it'由javadoc for Object#toString定义
这与XML或JAXB无关,这就是如何在类上定义
toString
.