2015-01-04 85 views
-1

我想使用JaxB解組一個基本的XML文件,但是代碼有問題。編組器正確運行,但解組器不是返回XML文件中的內容,而是返回[email protected]。 (班級的名字後跟一個'@',隨機組合了字母和數字)。這是下面的代碼。感謝您的幫助或想法。JaxB Unmarshaller錯誤

XML註釋類:

@XmlRootElement 
public class Jaxb { 
String newString; 

public String getNewString() { 
    return newString; 
} 

@XmlElement 
public void setNewString(String newString) { 
    this.newString = newString; 
} 
} 

的Marshaller:

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(); 
      } 
} 
} 

的Unmarshaller:

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; 
} 
} 

回答

3

[email protected]是默認toString()實現對你的Jaxb類輸出。覆蓋toString以輸出您需要它輸出的內容,例如

public String toString() { 
    return newString; 
} 

不過,我猜,因爲你的unmarshal方法具體返回一個字符串,然後是剛剛unmarshString = newUnmarshal.getNewString()代替unmarshString = unmarshal.toString()

類後跟一個名字你真正想做的事「@」用字母和數字的隨機組合

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

定義

返回對象的字符串表示形式。通常,toString方法返回一個「文本表示」該對象的字符串。結果應該是一個簡潔但內容豐富的表述,對於一個人來說很容易閱讀。建議所有子類重寫此方法。

類Object的toString方法返回一個字符串,其中包含對象爲實例的類的名稱,符號字符「@」和對象的哈希代碼的無符號十六進制表示形式。換句話說,該方法返回一個字符串等於值:

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

這有什麼做用XML或JAXB,這僅僅是如何在一個類中定義toString

+0

謝謝你的幫助和信息! –