首页 文章

JaxB Unmarshaller错误

提问于
浏览
-1

我试图使用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 回答

  • 3

    com.project.test.Jaxb@094jufd34cJaxb 类上默认 toString() 实现的输出 . 覆盖 toString 以输出您需要输出的内容,例如

    public String toString() {
        return newString;
    }
    

    但是,我猜测,因为你的 unmarshal 方法专门返回一个String,那么你真正想做的只是 unmarshString = newUnmarshal.getNewString() 而不是 unmarshString = unmarshal.toString()

    类的名称后跟一个带有字母和数字随机组合的'@'

    它's not random, it'由javadoc for Object#toString定义

    返回对象的字符串表示形式 . 通常,toString方法返回一个“文本表示”此对象的字符串 . 结果应该是一个简洁但信息丰富的表示,便于人们阅读 . 建议所有子类都重写此方法 . 类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成 . 换句话说,此方法返回一个等于值的字符串:

    getClass().getName() + '@' + Integer.toHexString(hashCode())
    

    这与XML或JAXB无关,这就是如何在类上定义 toString .

相关问题