Файл Скачать Веб-сервис Android-клиент - PullRequest
2 голосов
/ 14 октября 2011

Я написал веб-службу axis2, принимающую мыльные запросы.

Часть веб-службы:

 public DataHandler getFile(String fileName)
  {
    FileDataSource dataSource = new FileDataSource(writePath + "/" + fileName);
    DataHandler fileDataHandler = new DataHandler(dataSource);
    return fileDataHandler;
  }

Обычный клиент Java с обработчиком данных работает нормально.Однако я хочу написать Android-клиент для получения данных.Я знаю, что нет реализации javax.activation.DataHandler для Android.В Axis2 я попытался разрешить серверу получать запросы http, чтобы он служил в качестве службы отдыха.

services.xml конфигурации

<service name="WsFileTransfer">
<description>
    Please Type your service description here
</description>
<messageReceivers>
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
        class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
        class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
<parameter name="ServiceClass" locked="false">com.company.project.web.service.WsFileTransfer
</parameter>
<operation name="getFile">

    <parameter name="RESTMethod">GET</parameter>

    <parameter name="RESTLocation">getFile/{fileName}</parameter>

</operation>

Android-клиент выглядит так:

Клиентская сторона

private void getFile(String fileName) throws JSONException, FileNotFoundException {


    client.getParams().setParameter(ClientPNames.COOKIE_POLICY,
            CookiePolicy.RFC_2109);
    StringEntity tmp = null;

    httpGet = new HttpGet(EPR + "getFile?fileName=" + fileName);
    httpGet.setHeader("Content-Type", CONTENT_TYPE);


    FileOutputStream stream = null;
    InputStream readStream = null;
    try {
        response = client.execute(httpGet);


        HttpEntity returnEntity = response.getEntity();
        readStream = returnEntity.getContent();

    } catch (ClientProtocolException e) {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    }

    String filePath = Environment.getExternalStorageDirectory().getPath()
    + System.getProperty("file.separator") + fileName;
    File file = new File(filePath);
    stream = new FileOutputStream(file);


    try {
        while(readStream.read() >= 0){
        stream.write(readStream.read());
        }
    } catch (IOException e) {

        e.printStackTrace();
    }
    finally{

        if(stream != null)
            try {
                stream.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        if(readStream != null){
            try {
                readStream.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }

}

В конце я получаю некоторые данные, но они не соответствуют фактическим.В какую сторону я допустил ошибку?

...