我从任何类型的.net Web服务中得到以下响应。我需要解析此格式,并读取格式中提供的数据值,如RemMessage和INVM_ID。我无法解析此格式并获得适当的值。java代码是。。
public class WebService {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
SoapObject request = new SoapObject(NAMESPACE, webMethName);
androidHttpTransport.debug=true;
androidHttpTransport.setXmlVersionTag("");
// Property which holds input parameters
PropertyInfo sayHelloPI = new PropertyInfo();
// Set Name
sayHelloPI.setName("UserId");
// Set Value
sayHelloPI.setValue("41");
// Set dataType
sayHelloPI.setType(String.class);
// Add the property to request object
request.addProperty(sayHelloPI);
//Set envelope as dotNet
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
try {
List<GetReminder> reminders = new ArrayList<>();
androidHttpTransport.setXmlVersionTag("<?xml version="1.0" encoding="utf-8"?>");
// Invoke web service
androidHttpTransport.call(SOAP_ACTION, envelope);
// Get the response
String response=androidHttpTransport.responseDump;
Log.d("Result --- ", response.toString() );
SoapObject obj=(SoapObject)envelope.getResponse();
System.out.println("obj---->" + obj.toString());
} catch (SocketException e) {
Log.e("Error :" ,"Error " +e.getMessage());
//Print error
e.printStackTrace();
//Assign error message to resTxt
resTxt = "Error occured";
}
catch (XmlPullParserException e1)
{
String resp=androidHttpTransport.responseDump;
e1.printStackTrace();
resTxt = "Error occured";
}
//Return resTxt to calling object
return resTxt;
}
}
这给我返回了一个如下的响应,我需要读取这些参数的数据RemMessage,InvM_Id,我有类似的GetReminder类
public class GetReminder implements Serializable {
private String RemMessage;
private int InvM_Id;
private int DocType;
private int PrmR_TypeId;
private int PrmR_Id;
public String getRemMessage() {
return RemMessage;
}
public void setRemMessage(String remMessage) {
RemMessage = remMessage;
}
public int getInvM_Id() {
return InvM_Id;
}
public void setInvM_Id(int invM_Id) {
InvM_Id = invM_Id;
}
public int getPrmR_TypeId() {
return PrmR_TypeId;
}
public void setPrmR_TypeId(int prmR_TypeId) {
PrmR_TypeId = prmR_TypeId;
}
public int getDocType() {
return DocType;
}
public void setDocType(int docType) {
DocType = docType;
}
public int getPrmR_Id() {
return PrmR_Id;
}
public void setPrmR_Id(int prmR_Id) {
PrmR_Id = prmR_Id;
}
}
响应格式
anyType {
schema = anyType {
element = anyType {
complexType = anyType {
choice = anyType {
element = anyType {
complexType = anyType {
sequence = anyType {
element = anyType {
};
element = anyType {
};
element = anyType {
};
element = anyType {
};
element = anyType {
};
};
};
};
};
};
};
};
diffgram = anyType {
NewDataSet = anyType {
Table = anyType {
RemMessage = ExeedDiscountLimitonInvoicedatedon05 / 03 / 2015forCSHAH,
from3 - LokhandwalaShowroom;
InvM_Id = 77693;
DocType = 3;
PrmR_TypeId = 3;
PrmR_Id = 1820;
};
};
};
}
这只是一个单一的消息格式(RemMessage),我将获得多个RemMessage条目。
您在这篇文章中包含了soap响应的XML表示:使用diffgram解析复杂的soap响应。我们可以看到,第一个元素("schema=anyType{…")只是类型"NewDataSet"的定义。因此,您只需要分析第二部分,它保存GetReminder模型的数据。代码位于您上次在此处发布的内容下方https://stackoverflow.com/a/30059614/4114960
public ArrayList<Object> deserializeSoap(SoapObject soapObj) {
if(soapObj!=null){
if(soapObj.hasProperty("GetReminderResult")){
SoapObject SoapObj1 = (SoapObject) soapObj.getProperty("GetReminderResult");
if(soapObj1.hasProperty("schema")){
SoapObject soapObj2 = (SoapObject) soapObj1.getProperty("schema");
if(soapObj2.hasProperty("element")){
SoapObject SoapObj3 = (SoapObject) soapObj2.getProperty("element");
if(SoapObj3.hasProperty("complexType")){
SoapObject SoapObj4 = (SoapObject) SoapObj3.getProperty("complexType");
if(SoapObj4.hasProperty("choice")){
SoapObject SoapObj5 = (SoapObject) SoapObj4.getProperty("choice");
if(SoapObj5.hasProperty("element")){
SoapObject SoapObj6 = (SoapObject) SoapObj5.getProperty("element");
if(SoapObj6.hasProperty("sequence")){
SoapObject SoapObj7 = (SoapObject) SoapObj6.getProperty("sequence");
if(SoapObj7.hasProperty("element"))
{
getListFromSoapObj(SoapObj7)
}
}
}
}
}
}
}
}
}
return null;
}
private static ArrayList<Object> getListFromSoapObj(SoapObject soapObj) {
ArrayList<Object> memberObjList = new ArrayList<Object>();
for (int i = 0; i < soapObj.getPropertyCount(); i++) {
Object memberObj = new Object();
SoapObject soapObjectInner = (SoapObject) soapObj.getProperty(i);
if (soapObjectInner.hasProperty("RemMessage")) {
memberObj.setImageId(soapObjectInner
.getPropertyAsString("RemMessage"));
}
memberObjList.add(memberObj);
}
return memberObjList;
System.out.println("---------------------" + memberObjList.size());
}