Reputation: 214
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
Here is my request and response
My Request
<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>
My Response
<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>
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;
}
}
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;
}
}
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;
}
}
Method
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>
Upvotes: 4
Views: 869
Reputation: 508
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; } }
Upvotes: 1