简体   繁体   English

如何在Java SimpleXML中反序列化对象

[英]How to deserialize object in java SimpleXML

i have to send request by soap. 我必须用肥皂发送请求。 and i use Retrofit2. 我使用Retrofit2。 i cant convert and deserialize the response. 我无法转换和反序列化响应。 in type of xml like "xsi" instance "xmlns" its my problem. 像“ xsi”实例“ xmlns”这样的xml类型,这是我的问题。

this is my response 这是我的回应

 <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:requestCPResponse xmlns:ns2="http://incomingwebchannel.hrz.jpos.org/">
         <return xsi:type="ns2:jiringBillInqOut" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <refNo>091015900983</refNo>
            <responseCode>03</responseCode>
         </return>
      </ns2:requestCPResponse>
   </S:Body>
</S:Envelope>

and this is my retrofit interface 这是我的改造界面

 @POST("/nafis-web-3/services/mobile")
 Call<UsStatesResponseEnvelope> requestCP(@Body UsStatesRequestEnvelope body);

this is my request code 这是我的请求代码

new RequestCallback<>(activity, true, ApiClient.createApi(activity).requestCP(envelope), new RequestListener<UsStatesResponseEnvelope>() {
                @Override
                public void onResponse(@NonNull final Response<UsStatesResponseEnvelope> response) {

                    try {
                        com.teskaco.transactionsample.utils.Log.e(response.body().getBody().getUsStatesCPResponse().getStatesResponseReturn().getResponseCode());



                    } catch (Exception e) {

                        Log.e("TAG", e.getMessage());
                    }
                }

                @Override
                public void onFailure(@NonNull int code, @NonNull JsonObject jsonObject) {
                }
            });

and this is my model. 这是我的模型。 UsStatesResponseBody.clss UsStatesResponseBody.clss

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

    @Element(name = "S:Body", required = false)
    private UsStatesResponseBody body;

    public UsStatesResponseBody getBody() {
        return body;
    }

    public void setBody(UsStatesResponseBody body) {
        this.body = body;
    }
}

class UsStatesResponseBody.clss UsStatesResponseBody.clss类

    @Root(name = "S:Body", strict = false)
public class UsStatesResponseBody {

    @Element(name = "ns2:requestCPResponse",required = false)
    private UsStatesCPResponse cpResponse;

    public UsStatesCPResponse getUsStatesCPResponse() {
        return cpResponse;
    }

    public void UsUsStatesCPResponse(UsStatesCPResponse responseReturn) {
        this.cpResponse = responseReturn;
    }
}

UsStatesCPResponse.clss UsStatesCPResponse.clss

@Root(name = "ns2:requestCPResponse", strict = false)
@NamespaceList({
        @Namespace( prefix = "ns2", reference = "http://incomingwebchannel.hrz.jpos.org/")})
public class UsStatesCPResponse {

    @Element(name = "return",required = false)
    private UsStatesResponseReturn responseReturn;

    public UsStatesResponseReturn getStatesResponseReturn() {
        return responseReturn;
    }

    public void UsStatesResponseReturn(UsStatesResponseReturn responseReturn) {
        this.responseReturn = responseReturn;
    }
}

UsStatesResponseReturn.clss UsStatesResponseReturn.clss

@Root(name = "return", strict = false)
@NamespaceList({
        @Namespace( prefix = "xsi:type", reference = "ns2:jiringBillInqOut"),
        @Namespace( prefix = "xsi", reference = "http://www.w3.org/2001/XMLSchema-instance")
})
public class UsStatesResponseReturn {

    @Element(name = "refNo",required = false)
    private String refNo;

    @Element(name = "responseCode",required = false)
    private String responseCode;

    public String getRefNo() {
        return refNo;
    }

    public void setRefNo(String refNo) {
        this.refNo = refNo;
    }

    public String getResponseCode() {
        return responseCode;
    }

    public void setResponseCode(String responseCode) {
        this.responseCode = responseCode;
    }
}

i solve with tray and error. 我解决托盘和错误。

Parent class 家长班

 import org.simpleframework.xml.Element;
    import org.simpleframework.xml.Namespace;
    import org.simpleframework.xml.Root;

    @Root(name = "S:Envelope" ,strict = false)
    @Namespace(prefix = "S", reference = "http://schemas.xmlsoap.org/soap/envelope/")
    public class BuyResponseEnvelope {

        @Element(name = "Body")
        private BuyResponseBody body;

        public BuyResponseBody getBody() {
            return body;
        }

        public void setBody(BuyResponseBody body) {
            this.body = body;
        }


    }

Body class 身体类

  import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name = "S:Body" ,strict = false)
public class BuyResponseBody {

    @Element(name = "requestCPResponse")
    private BuyCPResponse cpResponse;


    public BuyCPResponse getCpResponse() {
        return cpResponse;
    }

    public void setCpResponse(BuyCPResponse cpResponse) {
        this.cpResponse = cpResponse;
    }
}

request cp class 请求cp类

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;


@Root(name = "ns2:requestCPResponse",strict = false)
@Namespace( prefix = "ns2", reference = "http://incomingwebchannel.hrz.jpos.org/")
public class BuyCPResponse {

    @Element(name = "return")
    private BuyResponseReturn responseReturn;

    public BuyResponseReturn getResponseReturn() {
        return responseReturn;
    }

    public void setResponseReturn(BuyResponseReturn responseReturn) {
        this.responseReturn = responseReturn;
    }
}

and return class 并返回课程

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.NamespaceList;
import org.simpleframework.xml.Root;

@Root(name = "return",strict = false)
@Namespace( prefix = "xsi", reference = "http://www.w3.org/2001/XMLSchema-instance")
public class BuyResponseReturn {


    @Element(name = "refNo")
    private String refNo;

    @Element(name = "responseCode")
    private String responseCode;

    public String getRefNo() {
        return refNo;
    }

    public void setRefNo(String refNo) {
        this.refNo = refNo;
    }

    public String getResponseCode() {
        return responseCode;
    }

    public void setResponseCode(String responseCode) {
        this.responseCode = responseCode;

    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM