当前位置: 首页 > 知识库问答 >
问题:

JaxB解封异常:javax.xml.bind.unmarshalException:意外元素。我哪里出了问题?

池恩
2023-03-14
    JAXBElement<RequestblockType> requestblock = objectFactory.createRequestblock(requestblockType);
    m.marshal(requestblock, writer);
    // output string to console
    byte[] bytes = writer.toString().getBytes(Charset.forName("UTF-8"));

我以xml字符串的形式从服务器返回响应,现在试图将其解压缩回对象中。

    JAXBContext jaxbContext = JAXBContext.newInstance(ResponseblockType.class);
    StringReader reader = new StringReader(xmlString);
    jaxbContext.createUnmarshaller().unmarshal(reader); //this line throws Exception
    um.unmarshal(reader);

在指定的行上,我得到以下异常:

UnmarshalException:意外元素(URI:“”,local:“ResponseBlock”)。需要的元素为<{}responseblocktype>

<?xml version="1.0" encoding="UTF-8"?>
<responseblock version="3.67">
  <requestreference>X5727835</requestreference>
   <response type="AUTH">
  <merchant>
     <merchantname>Merchant1</merchantname>
     <orderreference>8900001233</orderreference>
     <tid>12341234</tid>
     <merchantnumber>00000000</merchantnumber>
     <merchantcountryiso2a>GB</merchantcountryiso2a>
  </merchant>
  <transactionreference>3-9-1598316</transactionreference>
  <timestamp>2014-08-18 11:56:40</timestamp>
  <acquirerresponsecode>00</acquirerresponsecode>
  <operation>
     <accounttypedescription>ECOM</accounttypedescription>
  </operation>
  <settlement>
     <settleduedate>2014-08-18</settleduedate>
     <settlestatus>0</settlestatus>
  </settlement>
  <billing>
     <amount currencycode="USD">3698</amount>
     <payment type="VISA">
        <issuer>Test Issuer1</issuer>
        <pan>1234123412341234</pan>
        <issuercountry>US</issuercountry>
     </payment>
     <dcc enabled="0" />
  </billing>
  <authcode>TEST</authcode>
  <live>0</live>
  <error>
     <message>Ok</message>
     <code>0</code>
  </error>
  <security>
     <postcode>0</postcode>
     <securitycode>2</securitycode>
     <address>0</address>
  </security>
   </response>
</responseblock>
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "responseblockType")
@XmlRootElement
public class ResponseblockType {

@XmlElement(required = true)
protected String requestreference;
@XmlElement(required = true)
protected ResponseType response;
@XmlAttribute(name = "version")
protected String version;

public String getRequestreference() { return requestreference; }
public void setRequestreference(String value) { this.requestreference = value; }
public ResponseType getResponse() { return response; }
public void setResponse(ResponseType value) { this.response = value; }
public String getVersion() { return version; }
public void setVersion(String value) { this.version = value;  }

谁能让我知道我哪里出了问题?如果可能的话,我可以提供更多的信息。我从其他帖子中看到,在我的顶级bean响应类中添加@XmlRootelement可能会有所帮助,但没有成功。此外,我不必这样做,我的要求时,编组。

共有1个答案

莫英卓
2023-03-14

序列化XML responseblock的根元素名与bean类中定义的根元素名不同。

<responseblock version="3.67">

但是

@XmlRootElement
public class ResponseblockType

它应该是与您的注释相匹配的以下内容:

 <responseblockType version="3.67">
    ...
    ...
 </responseblockType>
@XmlRootElement(name="responseblock")
public class ResponseblockType   
 line 4: <response type="AUTH">
 类似资料:
  • 我正在尝试将JSON解组为Java对象。我看到的关于解析XML的帖子很少。所以我希望问题不要重复 我的Java类有以下注释 我使用的是来自cxf-rt-rs-extension-providers-version-2.7.3的org.apache.cxf.jaxrs.provider.json.JSONProvider 我得到以下错误 UnMarshalException:意外元素(URI:“”,

  • 我正在使用JAXB解析器将通过http请求发送的XML转换为Java对象,同时根据XSD模式对其进行验证。问题是,当调用unmarshal()方法时,它会引发以下异常: UnMarshalException:意外元素(URI:“http://www.somedomain.com/”,local:“assign”)。所需元素为(无) 如果从根XML元素中删除名称空间,它会引发相同的异常,uri部分为

  • 我尝试解组一个XML文件到一个对象。 我得到了这个错误: 我的解组过程如下所示: 我的XML实体看起来像: 我的XMLFile看起来像: 那么,我的解组过程出了什么问题?XML实体是用xjc创建的。 我也尝试了简单的xml文件/对象。这对我来说很好。

  • 问题内容: 从xml解组时遇到异常 组类没有任何注释,而group.xml仅包含数据。 有什么原因吗? 问题答案: 看起来您的XML文档具有根元素“ Group”而不是“ group”。您可以: 将XML上的根元素更改为“ group” 将注释@XmlRootElement(name =“ Group”)添加到Group类。

  • 背景: 我使用JAXB将XML解组为Java对象。最初,我只是使用JAXB来执行解组。然后对代码进行静态分析,并提出了XML外部实体注入的高关键性问题。经过一点研究,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析

  • 为什么在使用JAXB时需要使用? 我的工作场景是这样的: 我正在做一个从.NET到Java的转换项目。在.NET中,类的编写与POJO类似。我只是在代码中添加了注释(如、等)。并解决了与注释相关的错误。 现在我犯了这样的错误: XML文件如下: POJO类: