2017-02-02 7 views
0

У меня есть простое приложение WAR развернутого на сервере Glassfish, который имеет следующий ресурс:Почему клиент Джерси GET-клиента возвращает 404?

@Path("/oauth") 
public class Oauth { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getValidateCallSignature(@QueryParam("oauth_consumer_key") String consumerKey, 
              @QueryParam("oauth_nonce") String nonce, 
              @QueryParam("oauth_signature_method") String signatureMethod, 
              @QueryParam("oauth_timestamp") long timeStamp, 
              @QueryParam("oauth_version") long version, 
              @QueryParam("oauth_signature") String signature) { 

     System.out.println("### oauth/ called"); 

     return consumerKey + " --" + nonce + " --" + signatureMethod + " --" + timeStamp + " --" + version + " --" + signature; 
    } 
} 

Это приложение является в localhost:8080/EloquaTest/api/

Где RESTful услуги запускаются с помощью javax.ws.rs.core.Application вместо дескриптора развертывания.

@ApplicationPath("/api") 
public class AppStarter extends Application {} 

После запуска приложения, я проверил его, введя следующий URL в браузере: http://localhost:8080/EloquaTest/api/oauth?oauth_nonce=5564316845&oauth_signature=HMAC-SHA1

Как и ожидалось, результат в браузере был:

null --5564316845 --null --0 --0 --HMAC-SHA1 

До сих пор так хорошо, Теперь; Я создал отдельный WAR приложение, которое использует JSF имитировать клиента, который вызывает WebService упомянутый выше, где у меня есть простая кнопка в facelet, который вызывает защитный компонент, который в свою очередь вызывает WebService, вот backingbean:

@Model 
public class EloquaClientBacking { 

    private static final String ELOQUA_TEST_SERVER_URL = "http://esteban.mora.com:8080/EloquaTest/api/oauth"; 

    private String consumerKey = "09fb64e1-8b5d-406c-b4d5-adf9d318a1d2"; 
    private String nonce = "9519484"; 
    private String signatureMethod = "HMAC-SHA1"; 
    private long timestamp = 1410986606; 
    private float version = 1.0f; 
    private String signature = "AZbD26DeXrEV6iNLqBAxSXwWURg="; 

    public void personifyEloqua() throws URISyntaxException { 

     try { 
      Client client = ClientBuilder.newClient(); 

      WebTarget target = client.target(ELOQUA_TEST_SERVER_URL); 

      Response oauthResponse = target.queryParam("oauth_consumer_key", consumerKey) 
        .queryParam("oauth_nonce", nonce) 
        .queryParam("oauth_signature_method", signatureMethod) 
        .queryParam("oauth_timestamp", timestamp) 
        .queryParam("oauth_version", version) 
        .queryParam("oauth_signature", signature) 
        .request() 
        .get(); 

      System.out.println("##Calling: " + target.getUri()); 

      if (oauthResponse.getStatus() == 200) { 
       String entity = oauthResponse.readEntity(String.class); 

       System.out.println("######### " + entity); 

       FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage("### Entity: " + entity)); 
      } else { 
       FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(oauthResponse.getStatusInfo().toString() + " - status-code: " + oauthResponse.getStatus())); 
      } 

      oauthResponse.close(); 
      client.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Этот метод personifyEloqua() создаст клиента и выполнит запрос клиента GET, проблема в том, что я продолжаю получать 404, не найденный в качестве ответа, и я не могу понять, почему.

Я уже пробовал цепочки конфигурации:

client.target(URL).queryParam(etc,etc).queryParam(etc,etc).request().get(); 

и

client.target(BASE_URL).path("oauth").queryParam().... 

ничего не работает, никому ум указывая на то, что я делаю неправильно?

Спасибо!

ответ

0

Оказывается, что я делал глухую ошибку с типами данных:

WebService получал long oauth_version, но я отправлял float, после того, как я изменил службу @QueryParam("oauth_version") float version все это работало, как ожидалось!

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