Java 无法从xml中解组具有非字符串值的字段

Java 无法从xml中解组具有非字符串值的字段,java,xml,unmarshalling,Java,Xml,Unmarshalling,我有这样的xml响应 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <Hubl xmlns="http://com.zap.oldschool/"> <Mubl>&lt;?xml version="1.0" encodin

我有这样的xml响应

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <Hubl xmlns="http://com.zap.oldschool/">
      <Mubl>&lt;?xml version="1.0" encoding="UTF-8" standalone="si"?&gt;&lt;Zap&gt;&lt;Zap ZapId="literal"</Mubl>
    </Hubl>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
非常感谢您的建议

编辑:

  • 私有字符串mubl
    (在
    Mubl
    类中)是
    @XmlValue
    而不是
    @XmlElement
  • 在xml中有xmlns—这意味着您指定了名称空间。所以,如果使用了名称空间,您也必须在注释中使用它(而且,如果XML元素不声明父名称空间,它们将继承父名称空间)。因此,当这些元素的名称空间为“”时,您的实现尝试使用名称空间“”获取hubl和mubl。这就是为什么在Huble类中必须向注释@XmlRootElement和@XmlElement添加名称空间参数

  • 好的,也许是这样的:我认为
    mubl
    是一个根=类,这个类的属性=这个XML元素的值。。。因此,让我们用
    @XmlValue
    替换
    @XmlElement
    。仍然有null@XmlRootElement(name=“Hubl”)@xmlacessortype(xmlacesstype.FIELD)公共类Hubl{@xmlement(name=“Mubl”)私有Mubl Mubl;公共Mubl getMubl(){return Mubl;}公共void setMubl(Mubl Mubl){this.mabl=mabl;}}add
    namespace=”http://com.zap.oldschool/“
    到Hubl.class中的
    @XmlRootElement
    @XmlElement
    。(+以前的更改)。它适用于我在您的xml中有xmlns-这意味着您指定了名称空间。因此,如果使用名称空间,您也必须在注释中使用它(此外,如果XML元素不声明父名称空间,则它们将继承父名称空间)。因此,当这些元素的名称空间为
    时,您的实现尝试使用namespace=
    获取
    hubl
    mubl
    http://com.zap.oldschool/"
    。这就是为什么您必须在
    Huble
    类中的注释
    @XmlRootElement
    @XmlElement
    中添加
    名称空间
    参数。
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "Mubl")
    public class Mubl {
        @XmlElement(name = "Mubl")
        private String mubl;
    
        public String getMubl() {
            return mubl;
        }
    
        public void setMubl(String mubl) {
            this.mubl = mubl;
        }
    }