Android 无法使用SimpleXML反序列化SOAP响应?

Android 无法使用SimpleXML反序列化SOAP响应?,android,retrofit2,simple-framework,Android,Retrofit2,Simple Framework,我正在与本地设备建立UPnP连接库。 我在尝试解析其中一个操作的响应时遇到以下异常: 问题:org.simpleframework.xml.core.ValueRequiredException:无法满足@org.simpleframework.xml.Element(data=false,name=s:Body,required=true,type=class-com.stuff.AssignedRolesResponseBody)第1行com.stuff.AssignedRolesRespo

我正在与本地设备建立UPnP连接库。 我在尝试解析其中一个操作的响应时遇到以下异常:

问题:org.simpleframework.xml.core.ValueRequiredException:无法满足@org.simpleframework.xml.Element(data=false,name=s:Body,required=true,type=class-com.stuff.AssignedRolesResponseBody)第1行com.stuff.AssignedRolesResponseEnvelope类的字段“responseBody”private com.stuff.AssignedRolesResponseBody com.stuff.assignedrolesponseenvelope.responseebody

我试图解析的原始响应

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <s:Body>
        <u:GetAssignedRolesResponse xmlns:u="urn:schemas-upnp-org:service:DeviceProtection:1">
            <RoleList>{something_here?}</RoleList>
        </u:GetAssignedRolesResponse>
    </s:Body>
</s:Envelope>
正文:

@Root(name = "s:Envelope")
@NamespaceList({
        @Namespace(prefix = "s", reference = "http://schemas.xmlsoap.org/soap/envelope/")
})
public class AssignedRolesResponseEnvelope extends XMLBaseResponse {

  @Element(name = "s:Body", type = AssignedRolesResponseBody.class)//I tried without specifiying the type here - no difference
  private AssignedRolesResponseBody responseBody;

  public AssignedRolesResponseBody getResponseBody() {
    return responseBody;
  }

  public void setResponseBody(AssignedRolesResponseBody responseBody) {
    this.responseBody = responseBody;
  }
}
public class AssignedRolesResponseBody {

  @Element(name = "u:GetAssignedRolesResponse")
  @NamespaceList({
          @Namespace(prefix = "u", reference = "urn:schemas-upnp-org:service:DeviceProtection:1")
  })
  private AssignedRolesResponseAction action;

  public AssignedRolesResponseAction getAction() {
    return action;
  }

  public void setAction(AssignedRolesResponseAction action) {
    this.action = action;
  }
}
public class AssignedRolesResponseAction {

  @Element(name = "RoleList")
  List<String> roleList;

  public List<String> getRoleList() {
    return roleList;
  }

  public void setRoleList(List<String> roleList) {
    this.roleList = roleList;
  }
}
  @Element(name = "Body")
  private AssignedRolesResponseBody responseBody;

  @Element(name = "GetAssignedRolesResponse")
  private AssignedRolesResponseAction action;
行动:

@Root(name = "s:Envelope")
@NamespaceList({
        @Namespace(prefix = "s", reference = "http://schemas.xmlsoap.org/soap/envelope/")
})
public class AssignedRolesResponseEnvelope extends XMLBaseResponse {

  @Element(name = "s:Body", type = AssignedRolesResponseBody.class)//I tried without specifiying the type here - no difference
  private AssignedRolesResponseBody responseBody;

  public AssignedRolesResponseBody getResponseBody() {
    return responseBody;
  }

  public void setResponseBody(AssignedRolesResponseBody responseBody) {
    this.responseBody = responseBody;
  }
}
public class AssignedRolesResponseBody {

  @Element(name = "u:GetAssignedRolesResponse")
  @NamespaceList({
          @Namespace(prefix = "u", reference = "urn:schemas-upnp-org:service:DeviceProtection:1")
  })
  private AssignedRolesResponseAction action;

  public AssignedRolesResponseAction getAction() {
    return action;
  }

  public void setAction(AssignedRolesResponseAction action) {
    this.action = action;
  }
}
public class AssignedRolesResponseAction {

  @Element(name = "RoleList")
  List<String> roleList;

  public List<String> getRoleList() {
    return roleList;
  }

  public void setRoleList(List<String> roleList) {
    this.roleList = roleList;
  }
}
  @Element(name = "Body")
  private AssignedRolesResponseBody responseBody;

  @Element(name = "GetAssignedRolesResponse")
  private AssignedRolesResponseAction action;
public类AssignedRolesResponseAction{
@元素(name=“RoleList”)
列出角色扮演者;
公共列表getRoleList(){
返回角色扮演者;
}
公共无效用户列表(列表用户列表){
this.roleList=roleList;
}
}

非常感谢您的任何意见。

我将回答我自己的问题。我做了3个更改来修复此问题:

1) 。还映射了
encodyngStyle
,如下所示:

  @Attribute(name = "encodingStyle")
  public String encodingStyle;
2) 。映射了其他实体,但没有前缀:

@Root(name = "s:Envelope")
@NamespaceList({
        @Namespace(prefix = "s", reference = "http://schemas.xmlsoap.org/soap/envelope/")
})
public class AssignedRolesResponseEnvelope extends XMLBaseResponse {

  @Element(name = "s:Body", type = AssignedRolesResponseBody.class)//I tried without specifiying the type here - no difference
  private AssignedRolesResponseBody responseBody;

  public AssignedRolesResponseBody getResponseBody() {
    return responseBody;
  }

  public void setResponseBody(AssignedRolesResponseBody responseBody) {
    this.responseBody = responseBody;
  }
}
public class AssignedRolesResponseBody {

  @Element(name = "u:GetAssignedRolesResponse")
  @NamespaceList({
          @Namespace(prefix = "u", reference = "urn:schemas-upnp-org:service:DeviceProtection:1")
  })
  private AssignedRolesResponseAction action;

  public AssignedRolesResponseAction getAction() {
    return action;
  }

  public void setAction(AssignedRolesResponseAction action) {
    this.action = action;
  }
}
public class AssignedRolesResponseAction {

  @Element(name = "RoleList")
  List<String> roleList;

  public List<String> getRoleList() {
    return roleList;
  }

  public void setRoleList(List<String> roleList) {
    this.roleList = roleList;
  }
}
  @Element(name = "Body")
  private AssignedRolesResponseBody responseBody;

  @Element(name = "GetAssignedRolesResponse")
  private AssignedRolesResponseAction action;
3) 。映射操作的

@Root(name = "u:GetAssignedRolesResponse")
@Namespace(reference = "urn:schemas-upnp-org:service:DeviceProtection:1", prefix = "u")
public class AssignedRolesResponseAction {}