Java XML分析:不匹配InputException:无法构造“A”的实例(尽管至少存在一个创建者)

Java XML分析:不匹配InputException:无法构造“A”的实例(尽管至少存在一个创建者),java,xml-parsing,jackson,mpeg-dash,Java,Xml Parsing,Jackson,Mpeg Dash,我正在使用解析清单MPD(用于DASH视频流),但在解析过程中,在将XML解析为对象时,我遇到了一个不匹配的PutException。可以在中找到清单(是实时流媒体清单) 显示的错误如下所示: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `io.lindstrom.mpd.data.descriptor.Scope` (although at least one

我正在使用解析清单MPD(用于DASH视频流),但在解析过程中,在将XML解析为对象时,我遇到了一个不匹配的PutException。可以在中找到清单(是实时流媒体清单)

显示的错误如下所示:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `io.lindstrom.mpd.data.descriptor.Scope` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (StringReader); line: 17, column: 5] (through reference chain: io.lindstrom.mpd.data.MPD["ServiceDescription"]->io.lindstrom.mpd.data.descriptor.ServiceDescription["Scope"])
    at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63) ~[jackson-databind-2.9.0.jar:2.9.0]
    at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1329) ~[jackson-databind-2.9.0.jar:2.9.0]
现在,一些上下文

从同一清单中,标记“ServiceDescription”如下所示(我无法更改它)


范围代码的定义如下:

import javax.xml.bind.annotation.XmlAttribute;

public class Scope {

  @XmlAttribute(name = "schemeIdUri")
  private String schemeIdUri;

  public Scope(String schemeIdUri) {
    this.schemeIdUri = schemeIdUri;
  }

  public String getSchemeIdUri() {
    return schemeIdUri;
  }

  public void setSchemeIdUri(String schemeIdUri) {
    this.schemeIdUri = schemeIdUri;
  }
}
包含“范围”的类定义如下。我将定义它的标记更改为@XmlElement、@XmlAttribute,它不会给我任何不同的结果:

包io.lindstrom.mpd.data.descriptor;
导入java.util.Objects;
导入javax.xml.bind.annotation.XmlAttribute;
导入javax.xml.bind.annotation.XmlType;
@XmlType(比例器={
“身份证”,
“范围”,
“任何”,
“任何”
})
公共类服务描述{
@xmltattribute(name=“id”)
私有字符串id;
@XmlAttribute(name=“Scope”)
私人范围;
@XmlAttribute(name=“延迟”)
私人潜伏期;
@xmltattribute(name=“PlaybackRate”)
私人播放速率播放速率;
公共服务描述(字符串id、作用域、延迟、,
回放率(回放率){
this.id=id;
this.scope=范围;
this.latency=延迟;
this.playbackRate=playbackRate;
}
公共服务说明(){
this.id=null;
this.scope=null;
this.latency=null;
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共范围getScope(){
返回范围;
}
公共无效设置范围(范围){
this.scope=范围;
}
公共延迟getLatency(){
返回延迟;
}
public void setLatency(延迟){
this.latency=延迟;
}
公共播放速率getPlaybackRate(){
回传率;
}
public void setPlaybackRate(PlaybackRate PlaybackRate){
this.playbackRate=playbackRate;
}
@凌驾
公共布尔等于(对象o){
if(this==o){
返回true;
}
如果(o==null | | getClass()!=o.getClass()){
返回false;
}
ServiceDescription,其=(ServiceDescription)o;
return id==that.id&&
scope.equals(that.scope)&&
latency.equals(即延迟)&&
回放率。等于(即回放率);
}
@凌驾
公共int hashCode(){
返回Objects.hash(id、作用域、延迟、播放速率);
}
公共最终类生成器{
私有字符串id;
私人范围;
私人潜伏期;
私人播放速率播放速率;
具有id(字符串id)的公共生成器{
this.id=id;
归还这个;
}
公共建筑商范围(范围){
this.scope=范围;
归还这个;
}
带延迟的公共生成器(延迟){
this.latency=延迟;
归还这个;
}
具有播放速率的公共建筑商(播放速率播放速率){
this.playbackRate=playbackRate;
归还这个;
}
公共服务描述生成(){
ServiceDescription ServiceDescription=新的ServiceDescription();
servicesdescription.setId(id);
服务描述.设置范围(范围);
serviceDescription.setLatency(延迟);
serviceDescription.setPlaybackRate(播放速率);
返回服务描述;
}
}
}
好吧,在测试了不同的方法之后,修复错误所需的唯一一件事就是为它添加一个默认构造函数

这是类
Scope

@SuppressWarnings(“未使用”)
公共范围(){
schemeduri=null;
}
有了这个,就足以阻止它继续发生。可能它首先创建空对象,然后添加属性