簡體   English   中英

JaxB Unmarshaller錯誤

[英]JaxB Unmarshaller Error

我正在嘗試使用JaxB解組基本XML文件,但是代碼有問題。 編組器正常運行,但是解組器返回com.project.test.Jaxb@094jufd34c ,而不是返回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;
}
}

com.project.test.Jaxb@094jufd34cJaxb類上默認toString()實現的輸出。 覆蓋toString以輸出是否需要輸出,例如

public String toString() {
    return newString;
}

但是,我猜測由於您的unmarshal方法專門返回了一個String,所以您真正想要做的只是unmarshString = newUnmarshal.getNewString()而不是unmarshString = unmarshal.toString()

班級名稱,后跟一個“ @”,字母和數字隨機組合

它不是隨機的,由javadoc為Object#toString

返回對象的字符串表示形式。 通常,toString方法返回一個“以文本形式表示”此對象的字符串。 結果應該是簡潔易懂的表示形式,便於人們閱讀。 建議所有子類都重寫此方法。

類Object的toString方法返回一個字符串,該字符串包括該對象是其實例的類的名稱,符號字符“ @”以及該對象的哈希碼的無符號十六進制表示形式。 換句話說,此方法返回的字符串等於:

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

這與XML或JAXB無關,這只是在類上定義toString的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM