无法将xml字符串解组为java对象
将xml字符串解组到java对象会出现以下错误: javax.xml.bind.UnmarshaleException:意外元素(uri:“”), 本地:“AppServerResponse”)。预期的要素是 这是AppServerResponse Java类无法将xml字符串解组为java对象,java,xsd,namespaces,Java,Xsd,Namespaces,将xml字符串解组到java对象会出现以下错误: javax.xml.bind.UnmarshaleException:意外元素(uri:“”), 本地:“AppServerResponse”)。预期的要素是 这是AppServerResponse Java类 @XmlRootElement (name = "AppServerResponse", namespace = "http://www.coda.com/efinance/schemas/appserver") @XmlAccesso
@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);
String strResponse=“”
+ ""
+ ""
+ ""
+“测试”
+“接口”
+“欧元”
+ "1"
+ "1"
+ "/"
+ "2"
+ "€"
+“以前”
+“无链接”
+“欧元”
+ "2018/4"
+ "11"
+ "3"
+ "12"
+ "14.000.0014"
+ ""
+ ""
+ ""
+ "";
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
文档生成器数据库;
db=dbf.newDocumentBuilder();
documentdocresponse=db.parse(新的InputSource(新的StringReader(strResponse));
writeXmlDocumentToXmlFile(docResponse);
JAXBContext contextResponse=JAXBContext.newInstance(responseClass);
Unmarshaller u=contextResponse.createUnmarshaller();
返回值=u.unmarshal(docResponse);
您的JAXB注释指定您的元素在http://www.coda.com/efinance/schemas/appserver
名称空间,但Response字符串中的元素实际上不在名称空间中。看起来您打算通过设置默认名称空间
String strResponse=“谢谢您的回答……我按如下方式更改了响应xml字符串,但没有任何帮助:>''String strResponse=“\”version=\''2.0\”>''''我仍然得到完全相同的异常。。。意外元素(uri:,本地:“AppServerResponse”)。预期元素为。请注意,响应来自外部系统,不应在我的代码中更改。我在这里添加只是为了测试您的评论xmlns:ns=
。:ns
不正确,因为这与http://www.coda.com/efinance/schemas/appserver
带有“ns”前缀的命名空间。您的AppServerResponse没有前缀(例如),因此仍不在该命名空间中。相反,您需要使用xmlns=
。如果您不应该更改strResponse,但可以更改JAXB代码,则可以尝试删除@XmlElement注释中的所有名称空间=…
。再次感谢您的帮助。我们也尝试过这个选项(xmlns=“”…)。结果完全一样(没有解决问题)。删除Java类中的名称空间也没有帮助。