在Android中解组肥皂响应

时间:2014-07-15 12:35:50

标签: android soap jaxb saxparser unmarshalling

我有两个应用程序,客户端应用程序(移动应用程序)有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解析。

请帮忙。

1 个答案:

答案 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>