我有两个应用程序,客户端应用程序(移动应用程序)有android&服务器应用程序具有Java编程语言 我使用jaxb编组我的自定义列表。
Keyword objKeyword=new Keyword();
objKeyword.setKeywordList(keywordList); //keywordList=new ArrayList<Keyword>();
JAXBContext jc = JAXBContext.newInstance(Keyword.class);
Marshaller mar = jc.createMarshaller();
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
sw = new StringWriter();
mar.marshal(objKeyword, sw);
我在Android应用程序中通过编写以下代码行来获得响应,
// Create request by specifying Namespace and Operation Name
SoapObject request = new SoapObject(WSDL_NAMESPACE, "getList");
// Creating envelope
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
// Setting output SOAP object
envelope.setOutputSoapObject(request);
// Creating HTTP call object
HttpTransportSE androidHttpTransport = new HttpTransportSE(WSDL_URL);
// Invoking web service
androidHttpTransport.call(WSDL_NAMESPACE + "getList", envelope);
// Getting the response
SoapObject response = (SoapObject) envelope.bodyIn;
在我的回复中,我按照以下格式获取自定义列表,
<My_list>
<keyList>
<id>1</id>
<name>Key1</name>
</keyList>
<keyList>
<id>2</id>
<name>Key2</name>
</keyList>
</My_list>
现在,我想在我的android客户端应用程序中解组soap响应。 我已经读过JAXB不能用于android,而是可以使用SAX解析器进行XML解析。
请帮忙。
答案 0 :(得分:0)
没有必要拆开它, 我可以使用以下代码行
在我的回复中获取整个列表// Getting the response
SoapObject response = (SoapObject) envelope.bodyIn;
然后我可以使用
获取列表计数int iResponseCount=response.getPropertyCount();
随后用
循环 List<Keys> lstKeys=new ArrayList<Keys>();
for (int i = 0; i < iResponseCount; i++) {
SoapObject responseKey =(SoapObject) response.getProperty(i);
Keys objKeys =new Keys();
objKeys.setId(responseKey.getProperty(0).toString());
objKeys.setName(responseKey.getProperty(1).toString());
lstKeys.add(objKeys);
}
PS:我还将我的服务器应用程序函数(用java编写)的返回类型从String更改为,
List<Keys>