[英]Unable to unmarshal xml-string to java object
將xml字符串解組到Java對象會產生以下錯誤:
javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“ AppServerResponse”)。 預期的元素是<{ http://www.coda.com/efinance/schemas/appserver } AppServerResponse>
這是AppServerResponse Java類
@XmlRootElement (name = "AppServerResponse", namespace = "http://www.coda.com/efinance/schemas/appserver")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AppServerResponse", namespace = "http://www.coda.com/efinance/schemas/appserver", propOrder = {
"getEnvironment",
"listUserCompanies",
"softToHardDate"
})
public class AppServerResponse extends ServiceResponse
{
@XmlElement(name = "GetEnvironment", namespace = "http://www.coda.com/efinance/schemas/appserver")
protected GetEnvironmentResponseVerb getEnvironment;
@XmlElement(name = "ListUserCompanies", namespace = "http://www.coda.com/efinance/schemas/appserver")
protected ListUserCompaniesResponseVerb listUserCompanies;
@XmlElement(name = "SoftToHardDate", namespace = "http://www.coda.com/efinance/schemas/appserver")
protected SoftToHardDateResponseVerb softToHardDate;
解組功能和xml消息的代碼已解組:
String strResponse = "<AppServerResponse uri=\"http://www.coda.com/efinance/schemas/appserver\" version=\"2.0\" >"
+ "<GetEnvironment>"
+ "<Response status=\"success\">"
+ "<Environment>"
+ "<CmpCode>TEST</CmpCode>"
+ "<CapCode>INTERFACE</CapCode>"
+ "<HomeCurr>EUR</HomeCurr>"
+ "<DateOrder>1</DateOrder>"
+ "<DateDisplay>1</DateDisplay>"
+ "<DateSep>/</DateSep>"
+ "<HomeCurrDps>2</HomeCurrDps>"
+ "<HomeCurrSymbol>€</HomeCurrSymbol>"
+ "<HomeCurrSymbolPos>before</HomeCurrSymbolPos>"
+ "<HomeCurrLinkType>no_link</HomeCurrLinkType>"
+ "<HomeCurrParent>EURO</HomeCurrParent>"
+ "<CurrentPeriod>2018/4</CurrentPeriod>"
+ "<CmpTimeStamp>11</CmpTimeStamp>"
+ "<CapTimeStamp>3</CapTimeStamp>"
+ "<UsrTimeStamp>12</UsrTimeStamp>"
+ "<ServerVersion>14.000.0014</ServerVersion>"
+ "</Environment>"
+ "</Response>"
+ "</GetEnvironment>"
+ "</AppServerResponse>";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
DocumentBuilder db;
db = dbf.newDocumentBuilder();
Document docResponse = db.parse(new InputSource(new StringReader(strResponse)));
writeXmlDocumentToXmlFile(docResponse);
JAXBContext contextResponse = JAXBContext.newInstance(responseClass);
Unmarshaller u = contextResponse.createUnmarshaller();
returnValue = u.unmarshal(docResponse);
您的JAXB批注指定您的元素位於http://www.coda.com/efinance/schemas/appserver
命名空間中,但是ressponse String中的元素實際上不在命名空間中。 看來您打算通過設置默認名稱空間
String strResponse = "<AppServerResponse uri=\"http://www.coda.com/efinance/schemas/appserver\"..."
但是uri
屬性實際上並沒有這樣做。 相反,您需要xmlns
屬性:
String strResponse = "<AppServerResponse xmlns=\"http://www.coda.com/efinance/schemas/appserver\"..."
注意xmlns
屬性名稱,而不是uri
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.