您好我正在使用java编写XML响应字符串的解组脚本。我已经提到了xml响应,解组代码和我收到的错误。 请帮助解决问题,并就此问题向我提出建议。
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
javax.xml.bind.Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(new StreamSource(new StringReader(response.toString() ) ) );
System.out.println(customer.getNAME());
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"response"). Expected elements are <{}customer>
<?xml version="1.0" encoding="UTF-8"?>
<response>
<control>
<status>success</status>
<senderid>XXXX</senderid>
<controlid>ControlIdHere</controlid>
<uniqueid>false</uniqueid>
<dtdversion>3.0</dtdversion>
</control>
<operation>
<authentication>
<status>XXXX</status>
<userid>XXXX</userid>
<companyid>XXXXXX</companyid>
<sessiontimestamp>2014-08-12T03:49:00-07:00</sessiontimestamp>
</authentication>
<result>
<status>success</status>
<function>readByQuery</function>
<controlid>testControlId</controlid>
<data listtype="customer" count="26" totalcount="26" numremaining="0">
<customer>
<RECORDNO>15</RECORDNO>
<CUSTOMERID>RIC001</CUSTOMERID>
<NAME>XYZ</NAME>
<ENTITY>CRIC001</ENTITY>
<PARENTKEY></PARENTKEY>
<PARENTID></PARENTID>
<PARENTNAME></PARENTNAME>
</customer>
<customer>
<RECORDNO>15</RECORDNO>
<CUSTOMERID>RIC001</CUSTOMERID>
<NAME>BBB</NAME>
<ENTITY>CRIC001</ENTITY>
<PARENTKEY></PARENTKEY>
<PARENTID></PARENTID>
<PARENTNAME></PARENTNAME>
</customer>
</data>
</result>
</operation>
答案 0 :(得分:3)
问题是你告诉unmarshaller你想要一个Customer
对象,并且会给出一个表示Customer
的XML字符串,但是你传递的是一个表示{{1}的XML字符串对象。如果您有Response
类,请使用它来创建Response
实例。如果没有,请在响应中获取表示JAXBContext
对象的字符串
Customer
并与unmarshaller一起使用。
== 更新 ==
假设您没有<customer>
<name>ABC</name>
<country>India<country>
</customer>
或Response
类,则可以使用类似于以下内容的代码;
Data
答案 1 :(得分:2)
您目前正在尝试将使用<response>
标记打开的XML转换为Customer对象。
您需要专门为JAXBUnmarshaller提供元素才能使其正常工作。例如:
<customer>
<name>ABC</name>
<country>India<country>
</customer>
答案 2 :(得分:1)
XML字符串不是有效的XML(缺少结束标记),但我认为发布问题时会出错?
当解组到Customer对象时,看起来JAXB不期望<response>
根元素。 Customer类是什么样的?
答案 3 :(得分:1)
在您到达customer元素之前,请查看此问题如何遍历XML。从那里你可以解组XML:
答案 4 :(得分:-2)
必须使用
声明Java类@XmlRootElement 类响应