2016-12-07 2 views
1

私は、ローカルデバイスとの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; 
    } 
} 

答えて

0

私は自分の質問に答えます。私はこれを修正するために3つの変更を加えました:

1)。

@Attribute(name = "encodingStyle") 
    public String encodingStyle; 

2):このように、同様encodyngStyleをマッピングされました。接頭辞なしで他のエンティティをマッピングされた:

@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 {} 
関連する問題