Я хочу создать спокойную веб-службу в java, используя jersey API и использовать его в приложении для Android. Я получил this question на SO, но он говорит о клиенте java, тогда как у меня есть клиент Android.IOException: Внутренний сервер Ошибка при попытке использования службы отдыха
Моя служба выглядит следующим образом:
@Path("/no")
public class CheckNumber {
@POST
@Produces("application/json")
@Consumes("application/json")
public String getDetails(@PathParam("cNo") String cNo) {
String CardNo="";
try {
JSONObject jsonObj = new JSONObject(cNo);
CardNo=jsonObj.getString("CardNo");
} catch (ParseException e1) {
e1.printStackTrace();
}
//Do something
return "someValue";
}
}
Теперь приходит на стороне клиента:
public class MainActivity extends Activity {
JSONObject json = new JSONObject();
String wsdl = "http://192.168.1.105:8080/restdemo/check/no/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new RequestTask().execute("1234567890");
}
class RequestTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String add = "{\"CardNo\":\"" + uri[0] + "\"}";
HttpPost postMethod = new HttpPost(wsdl);
String responseString = null;
try {
postMethod.addHeader("Content-Type", "application/json");
HttpEntity entity = new StringEntity(add);
postMethod.setEntity(entity);
response = httpclient.execute(postMethod);
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
responseString = out.toString();
} else {
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}
}
Я только начиная с остальных веб-служб. Я успешно создал образец службы отдыха, который потребляет строку и возвращает строку, и использовал эту службу в приложении для Android.
Но когда я пытаюсь передать строку json, используя метод POST. Это дает следующий журнал errorin:
java.io.IOException: Internal Server Error
at com.example.restclient.MainActivity$RequestTask.doInBackground(MainActivity.java:85)
где MainActivity.java:85 является throw new IOException(statusLine.getReasonPhrase());
, который подразумевает, что statusLine.getStatusCode()
не возвращается HttpStatus.SC_OK
. Вместо этого он возвращает код состояния = .
Любая помощь приветствуется.
Сначала попробуйте логи сервера, получить исключение. Неужели сервер работает с ошибкой или с перерывами? Вы воспроизвели ошибку с помощью не-android-реализации (java/wget/curl)? Вы видели данные HTTP, которые передаются по сети? (tcpdump -Xs1600 на сервере может помочь) –
statusLine.getStatusCode() не возвращает HttpStatus.SC_OK – GAMA
тоже попробовал с простым клиентом java. такая же ошибка. – GAMA