2016-04-07 1 views
1

Я кодирую пользовательский, но простой клиент для проверки веб-сервисов elgg с помощью Java. Я хочу отправить запрос на отправку на сервер с помощью простого параметра, но.elgg web services client

Вот моя функция подвергается в Elgg:

function hello_world($name) { 
    return "Hello ".$name; 
} 


elgg_ws_expose_function(
    "test.echo", 
    "hello_world", 
    array("name" => array("type" => "string", "required" => true)), 
    'A testing method which echos back a string', 
    'POST', 
    false, 
    false 
); 

и вот мой Java-код для отправки запроса на сообщение:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package readjson; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.StatusLine; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.CloseableHttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 


public class Main { 

    public static void main(String[] args) { 


     try { 
      CloseableHttpClient client = HttpClients.createDefault(); 
      JSONObject object = new JSONObject(); 
      String name = "Mousa"; 
      object.put("name", name); 
      HttpPost httpPost = new  HttpPost("http://localhost/elgg/services/api/rest/json?method=test.echo"); 
     httpPost.setHeader("Accept", "application/json"); 
     httpPost.setHeader("Content-type", "application/json"); 
     StringEntity entity = new StringEntity(object.toJSONString()); 
     System.out.println(object); 
     httpPost.setEntity(entity); 
     CloseableHttpResponse response = client.execute(httpPost); 
     System.out.println(response.getStatusLine().getStatusCode()); 
     HttpEntity httpEntity = response.getEntity(); 
     StringBuilder stringBuilder = new StringBuilder(); 
      InputStream inputStream = httpEntity.getContent(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
      String line; 
      while((line = bufferedReader.readLine()) != null) { 
       stringBuilder.append(line); 
      } 
      inputStream.close(); 
      System.out.println(stringBuilder.toString()); 
     client.close(); 
     } 
     catch(Exception ex) { 
      System.out.println(ex.getLocalizedMessage()); 
     } 
    } 
} 

Но я получаю этот вывод и есть проблема с почтовым запросом. Я не знаю, что не так с этим кодом:

{"name":"Mousa"} 

200 


{"status":-1,"message":"Missing parameter name in method test.echo"} 

В нем говорится, что отсутствует параметр «имя» !!!

Пожалуйста, помогите

ответ

0

Насколько я помню, веб-службы Elgg не может справиться с JSON в теле запроса, используйте сериализованную строку запроса вместо этого, например:

name=Mousa&interest[]=interest1&interest[]=interest2

Elgg, скорее всего, использовать parse_str() , поэтому это может быть полезно: http://php.net/manual/en/function.parse-str.php

 Смежные вопросы

  • Нет связанных вопросов^_^