Я написал веб-службу 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();
}
}
}
}
В конце я получаю некоторые данные, но они не соответствуют фактическим.В какую сторону я допустил ошибку?