Android 无法使用SimpleXML反序列化SOAP响应?
我正在与本地设备建立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 我试图解析的原始响应: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
<?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 {}