嘗試使用JAXBjavax.xml.bind.UnmarshalException:意外的元素(URI:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://SOMETHING/doc/2006-03-01/", local:"Name"). Expected elements are <{}Name>,<{}IsTruncated>,<{}MaxKeys>,<{}Contents>,<{}Prefix>,<{}Marker>
這裏來轉換XML響應的Java對象時,我收到以下錯誤是我的XML:
<ListBucketResult xmlns="http://something/doc/2006-03-01/">
<Name>test2</Name>
<Prefix/>
<Marker/>
<MaxKeys>3</MaxKeys>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>metadata.xml</Key>
<LastModified>2012-09-04T08:29:36.000Z</LastModified>
<ETag>6b836fd43c402681506926b2248ec418</ETag>
<Size>3258</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
我的Java對象類是像這樣
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"name",
"prefix",
"marker",
"maxKeys",
"isTruncated",
"contents"
})
@XmlRootElement(name = "ListBucketResult")
public class ListBucketResult {
@XmlElement(name = "Name", required = true)
protected String name;
@XmlElement(name = "Prefix", required = true)
protected String prefix;
@XmlElement(name = "Marker", required = true)
protected String marker;
@XmlElement(name = "MaxKeys")
protected int maxKeys;
@XmlElement(name = "IsTruncated")
protected boolean isTruncated;
@XmlElement(name = "Contents", required = true)
protected ListBucketResult.Contents contents;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"key",
"lastModified",
"eTag",
"size",
"storageClass"
})
public static class Contents {
@XmlElement(name = "Key", required = true)
protected String key;
@XmlElement(name = "LastModified", required = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar lastModified;
@XmlElement(name = "ETag", required = true)
protected String eTag;
@XmlElement(name = "Size")
protected int size;
@XmlElement(name = "StorageClass", required = true)
protected String storageClass;
,最後我的解組代碼爲:
JAXBContext jc = JAXBContext.newInstance(ListBucketResult.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
JAXBElement element = (JAXBElement) unmarshaller.unmarshal (inputStream);
ListBucketResult customer = (ListBucketResult) element.getValue();
有人請讓我知道我在做什麼不正確嗎?
嗨,改變這沒有幫助。 \t @XmlAccessorType(XmlAccessType。FIELD) \t \t @XmlType(名稱= 「」,命名空間= 「HTTP://東西/ DOC/2006-03-01 /」,propOrder = { \t \t 「姓名」, \t \t 「前綴」, \t \t 「標記」, \t \t 「maxKeys」, \t \t 「isTruncated」, \t \t 「內容」 \t \t}) – Yahiya
任何任何人的幫助? – Yahiya
無論機制如何,問題都是一個命名空間問題。異常方法表示提供了一個完全限定名爲{http:// SOMETHING/doc/2006-03-01 /} Name的元素(根據提供的xml正確),但元素{}預計名稱(除其他外)。後者是默認名稱空間中的一個元素。異常*現在是完全相同還是稍有變化? – dcbyers