解析 Soap 服务使用 Retrofit 我在响应中的类包络模型中面临这样的异常(即)不匹配的主体模型 [英] Parsing Soap Service use of Retrofit I am facing exception like this(i.e)mismatched body model in the class envelope model in the response

查看:47
本文介绍了解析 Soap 服务使用 Retrofit 我在响应中的类包络模型中面临这样的异常(即)不匹配的主体模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用 Retrofit 的 Soap Services 中解析响应时遇到此异常.我的异常如下

While parsing response in Soap Services use of Retrofit iam facing this exception.My exception is below

  Failure: org.simpleframework.xml.core.ElementException: Element 'Body' does not have a match in class org.cainfo.arun.model.response.VerifyMobileResEnvelopeModel at line 1

这是我的请求和回复

我的要求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.router.ees.com/">
<soapenv:Header/>
<soapenv:Body>
  <web:verifyMobile>
     <arg0>12345678</arg0>
  </web:verifyMobile>
</soapenv:Body>
</soapenv:Envelope>

我的回复

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
  <ns1:verifyMobileResponse xmlns:ns1="http://webservice.router.ees.com/">
     <return>name</return>
  </ns1:verifyMobileResponse>
</soap:Body>
</soap:Envelope>

验证MobileResEnvelopeModel

VerifyMobileResEnvelopeModel

@Root(name = "soap:Envelope")
@Namespace( prefix = "soap", reference = "http://schemas.xmlsoap.org/soap/envelope/")
public class VerifyMobileResEnvelopeModel {
@Element(name = "soap:Body", required = false)
private VerifyMobileResBodyModel verifyMobileResBodyModel;

public VerifyMobileResBodyModel getVerifyMobileResBodyModel() {
    return verifyMobileResBodyModel;
}

public void setBody(VerifyMobileResBodyModel verifyMobileResBodyModel) {
    this.verifyMobileResBodyModel = verifyMobileResBodyModel;
 }
}

验证MobileResBodyModel

VerifyMobileResBodyModel

@Root(name = "soap:Body", strict = false)
public class VerifyMobileResBodyModel {
@Element(name = "ns1:verifyMobileResponse", required = false)
@Namespace(prefix = "ns1", reference = "http://webservice.router.ees.com/")
private VerifyMobileResDataModel verifyMobileResModel;

public VerifyMobileResDataModel getVerifyMobileResModel() {
    return verifyMobileResModel;
}

public void setVerifyMobileResModel(VerifyMobileResDataModel verifyMobileResModel) {
    this.verifyMobileResModel = verifyMobileResModel;
 }
}

验证MobileResDataModel

VerifyMobileResDataModel

@Root(name = "ns1:verifyMobileResponse", strict = false)
@Namespace(prefix = "ns1", reference = "http://webservice.router.ees.com/")
public class VerifyMobileResDataModel {
@Element(name = "return", required = false)
private String customerName;

public String getCustomerName() {
    return customerName;
}

public void setCustomerName(String customerName) {
    this.customerName = customerName;
 }
}

方法

public void getResponse() {
    VerifyMobileRqstDataModel mVerifyMobileRqstDataModel = new VerifyMobileRqstDataModel();
    mVerifyMobileRqstDataModel.phoneNo = mobileNo;

    VerifyMobileRqstBodyModel mVerifyMobileRqstBodyModel = new VerifyMobileRqstBodyModel();
    mVerifyMobileRqstBodyModel.verifyMobileRqstDataModel = mVerifyMobileRqstDataModel;

    VerifyMobileRqstEnvelopeModel mVerifyMobileRqstEnvelopeModel = new VerifyMobileRqstEnvelopeModel();
    mVerifyMobileRqstEnvelopeModel.verifyMobileRqstBodyModel = mVerifyMobileRqstBodyModel;

    Call<VerifyMobileResEnvelopeModel> call = webService.rqstVerifyMobileNo(mVerifyMobileRqstEnvelopeModel);
    call.enqueue(new Callback<VerifyMobileResEnvelopeModel>() {
        @Override
        public void onResponse(Call<VerifyMobileResEnvelopeModel> call, Response<VerifyMobileResEnvelopeModel> response) {
            if (response.isSuccessful() && response.body() != null) {
               // String customerName = response.body().verifyMobileResBodyModel.verifyMobileResModel.customerName;
                String customerName = response.body().getBody().getVerifyMobileResModel().getCustomerName();
                Log.i("CustomerName", customerName);

            }
        }

        @Override
        public void onFailure(Call<VerifyMobileResEnvelopeModel> call, Throwable t) {
            Log.e("Failure", t.getMessage());
        }
    });
}

我正面临一些解析问题.但得到回应.在该方法中,它没有进入响应块,失败块被执行并抛出此异常.找出问题很麻烦.我尝试了很多.请任何人帮助我.提前致谢.

I am facing some parsing issue. But getting the respone. In the method its not coming to response block, failure block get executed and it throws this exception. Its cumbersome to find out issue. I tried a lot. Please anyone help me. Thanks in advance.

我的代码中的响应.但它没有进入响应块

Response in my code. But it didn't come inside the response block

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   
<soap:Body>
<ns1:verifyMobileResponse  xmlns:ns1="http://webservice.router.ees.com/"> 
<return>Ramesh</return> 
</ns1:verifyMobileResponse>
</soap:Body>
</soap:Envelope>

推荐答案

虽然为时已晚,但这可能会帮助像我这样的可怜人,我也遇到过类似的问题.尝试在 ResponseBody 的根标签中设置strict = false",如下所示

Its too late though but this might help some poor soul like me, I have faced similar issue. Try by setting "strict = false" in root tag of ResponseBody as follows

@Root(name = "soap:Envelope", strict = false) 
@Namespace( prefix = "soap", reference = "http://schemas.xmlsoap.org/soap/envelope/") 
public class VerifyMobileResEnvelopeModel { @Element(name = "soap:Body", required = false) 
private VerifyMobileResBodyModel verifyMobileResBodyModel;

public VerifyMobileResBodyModel getVerifyMobileResBodyModel() {
    return verifyMobileResBodyModel; }

public void setBody(VerifyMobileResBodyModel verifyMobileResBodyModel) {
    this.verifyMobileResBodyModel = verifyMobileResBodyModel;  } }

这篇关于解析 Soap 服务使用 Retrofit 我在响应中的类包络模型中面临这样的异常(即)不匹配的主体模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆