Cześć!
Piszę, bo nie mogę już dosyć długo poradzić sobie z następującym problemem.
Zdefiniowałem sobie serwis (który umieściłem na JBoss-ie - ale to chyba nie ma większego znaczenia) z następujacymi metodami metodami
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/sale_production2/{id}/{from}/{to}")
public List<SaleProductionRes> metoda(
@PathParam("id") PathSegment id,
@PathParam("from") PathSegment from, @PathParam("to") PathSegment to) {
......
}
oraz
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/sale_production")
public List<SaleProductionRes> metoda2(
@PathParam("id") PathSegment id,
@PathParam("from") PathSegment from, @PathParam("to") PathSegment to) {
....
}
obie metody mają takie same wnętrza. Jak widać powyżej różnią się nazwą i adnotacjami (No i tutaj upatruje źródło problemu). Metoda "GET" daje zadowalające efekty i po zapytaniu w przeglądarce zwraca fajnego JSON-a - czy li jest dobra.
Przykład:
http://adres_ip:8080/nazwa_aplikacji/xxx/sale_production2/2/2012-09-25T00:00:00Z/2012-09-26T00:00:00Z
zwraca poprawny rezultat
Po stronie androida, aby wywoływać metodę post-ową stworzyłem coś takiego
public static String makeRequest(String path, Map<String, String> params)
throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject obj = new JSONObject();
setObj(obj, params);
StringEntity se = new StringEntity(obj.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
return httpclient.execute(httpost, new BasicResponseHandler());
}
private static void setObj(JSONObject object, Map<String, String> map)
throws UnsupportedEncodingException, JSONException {
for (String key : map.keySet()) {
object.put(key, map.get(key));
}
}
Metodę post staram się wywołać uruchamiając makeRequest z parametrami path="http://adres_ip:8080/nazwa_aplikacji/xxx/sale_production/" oraz mapą
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("id", "2");
parameters.put("from", "2012-09-25T0000Z");
parameters.put("to", "2012-09-26T0000Z");
W rezultacie dostaję exception:
09-25 1625.249: W/System.err(1168): org.apache.http.client.HttpResponseException: Internal Server Error
09-25 1625.269: W/System.err(1168): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
09-25 1625.269: W/System.err(1168): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
09-25 1625.279: W/System.err(1168): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
09-25 1625.279: W/System.err(1168): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
09-25 1625.289: W/System.err(1168): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
Dodam, że mam jeszcze inną metodę POST-ową (ale już bezparametrową), która wykonuje się za pomocą powyższego kodu poprawnie i zwraca zadowalające wyniki. Oto ona
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/res")
public List<Res> getRes() {
.....
}
Pytanie wobec tego takie. Co zrobić, aby poprawnie wywołać metodę POST-ową z parametrami (a może implementacja metody jest niepoprawna?). Dodam, że przejrzałem już wiele postów na różnych forach i żaden nie rozwiązuje mojego problemu.Co przeoczyłem? Co zrobiłem źle?
dziękuję