로컬 장치와의 UPnP 연결을위한 라이브러리에서 작업 중입니다. 작업 중 하나에서 응답을 구문 분석하려고 할 때 다음 예외가 발생합니다.
문제: 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;
}
}
어떤 입력이라도 대단히 감사합니다.
내 질문에 답하겠습니다. 이 문제를 해결하기 위해 세 가지 사항을 변경했습니다.
1). 다음 encodyngStyle
과 같이 매핑했습니다 .
@Attribute(name = "encodingStyle")
public String encodingStyle;
2). 접두사없이 다른 엔티티 를 매핑했습니다 .
@Element(name = "Body")
private AssignedRolesResponseBody responseBody;
@Element(name = "GetAssignedRolesResponse")
private AssignedRolesResponseAction action;
삼). Action 의 루트 를 매핑했습니다 .
@Root(name = "u:GetAssignedRolesResponse")
@Namespace(reference = "urn:schemas-upnp-org:service:DeviceProtection:1", prefix = "u")
public class AssignedRolesResponseAction {}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다