2016-12-10 2 views
0

Я пытаюсь автоматизировать REST API через Java. Для этого я использую Jersy jar. Я достаточно искал googled и смог написать код, который не вызывает никаких исключений. Тем не менее, я всегда получаю 405 - Метод не разрешен ответ об ошибке при попытке достичь конечной точки моего проекта и отправить запрос. То же конечная точка возвращает успешный ответ на пользовательский интерфейс Soap. И нет заголовков. Тип носителя - JSON.REST API | Джерси-баночка | 405 error

В принципе, я просто хочу выполнить операцию SOAP UI, но через Eclipse. PS: Я новичок, любая помощь приветствуется.

package sample; 

import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.WebTarget; 
import javax.ws.rs.core.Form; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status.Family; 
import org.glassfish.jersey.client.JerseyInvocation.Builder; 

public class Sample 
{ 
    public static void main(String a[]) 
    { 

     Client client = ClientBuilder.newClient(); 
     WebTarget resource = client.target("https://endpoint-url/Resource"); 
     Form form = new Form(); 
     form.param("name", "bond"); 
     form.param("ID", "007"); 

     Builder request = (Builder) resource.request(); 
     request.accept(MediaType.APPLICATION_JSON); 

     Response response = request.get(); 
     if (response.getStatusInfo().getFamily() == Family.SUCCESSFUL) 
     { 
      System.out.println("Success! " + response.getStatus()); 
      System.out.println(response.readEntity(String.class)); 
     } 
     else 
     { 
      System.out.println("ERROR! " + response.getStatus());  
//   System.out.println(response); 
      System.out.println(response.readEntity(String.class)); 
     } 
    } 

} 
+0

Это выход I получить. Статус - 405 Метод не допускается. –

+0

Пожалуйста, отправьте код услуги – tech2504

+0

Код услуги? Вы имели в виду один на стороне сервера? Если да, то я не думаю, что у меня есть к нему доступ :( –

ответ

0

Наконец, я нашел код here, который творил чудеса для меня :)

Ниже приведен рабочий код:

package sample; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class JavaNetURLRESTFulClient 
{ 

    private static final String targetURL = "https://endpoint-url/Resource"; 

    public static void main(String[] args) 
    { 

     try { 

      URL targetUrl = new URL(targetURL); 

      HttpURLConnection httpConnection = (HttpURLConnection) targetUrl.openConnection(); 
      httpConnection.setDoOutput(true); 
      httpConnection.setRequestMethod("POST"); 
      httpConnection.setRequestProperty("Content-Type", "application/json"); 

      String input = "{\"name\":\"bond\",\"Id\":007}"; 

      OutputStream outputStream = httpConnection.getOutputStream(); 
      outputStream.write(input.getBytes()); 
      outputStream.flush(); 

      if (httpConnection.getResponseCode() != 200) { 
       throw new RuntimeException("Failed : HTTP error code : " 
        + httpConnection.getResponseCode()); 
      } 

      BufferedReader responseBuffer = new BufferedReader(new InputStreamReader(
        (httpConnection.getInputStream()))); 

      String output; 
      System.out.println("Output from Server:\n"); 
      while ((output = responseBuffer.readLine()) != null) { 
       System.out.println(output); 
      } 

      httpConnection.disconnect(); 

      } catch (MalformedURLException e) { 

      e.printStackTrace(); 

      } catch (IOException e) { 

      e.printStackTrace(); 

     } 

     }  
} 
1

Вопрос Акцепт, получить ресурс вместо Post ресурса вы не проходя параметр формы в ресурс метода. То есть причина получения issues.Check ниже

public class Sample { 
     public static void main(String a[]) 
     { 

      Client client = ClientBuilder.newClient(); 
      WebTarget resource = client.target("https://endpoint-url/Resource"); 
      Form form = new Form(); 
      form.param("name", "bond"); 
      form.param("ID", "007"); 
      Builder request = (Builder) resource.request(); 
      request.accept(MediaType.APPLICATION_JSON);   
    Response response = request.post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED)); 
      if (response.getStatusInfo().getFamily() == Family.SUCCESSFUL) 
      { 
       System.out.println("Success! " + response.getStatus()); 
       System.out.println(response.readEntity(String.class)); 
      } 
      else 
      { 
       System.out.println("ERROR! " + response.getStatus());  //   System.out.println(response); 
       System.out.println(response.readEntity(String.class)); 
      } 
     } 

    } 
+0

Спасибо, я пробовал модифицировать код, но я получаю 400 ошибок. Я даже попробовал 'Re sponse response = request.post (Entity.entity (form, MediaType.APPLICATION_JSON)); 'и' Response response = request.post (Entity.form (form)) ;, но я получаю тот же ответ 400 - ** Сервер возникла ошибка обработки запроса. Подробнее см. Журналы сервера. ** –

+0

Я уверен, что я использую все необходимые атрибуты в моем запросе (то есть 'form.param (attribute, value)') с правильными значениями. –

+0

@Shreyas SG: Правильно ли это https: // endpoint-url/Resource url? – tech2504