私は、ローカルデバイスとのUPnP接続のためのライブラリに取り組んでいます。 のいずれかのアクションからの応答を解析しようとしたとき、私は、次の例外を取得:SimpleXMLを使用してSOAP応答をデシリアライズできませんか?
問題:私は解析しようとしていますorg.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=s:Body, required=true, type=class com.stuff.AssignedRolesResponseBody) on field 'responseBody' private com.stuff.AssignedRolesResponseBody com.stuff.AssignedRolesResponseEnvelope.responseBody for class com.stuff.AssignedRolesResponseEnvelope at line 1
生の応答:
<?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>
これらを私のPOJOです:
ResponseEnvelope:
@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;
}
}
。