2013-08-23 10 views
5

CASOchiamata WebService riposante con versione client Jersey 2.2

Sto cercando di recuperare i dati utente per Servlet filtro con servizio REST.

pom.xml

<dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>2.2</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>javax.ws.rs-api</artifactId> 
     <version>2.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>2.2</version> 
     <scope>provided</scope> 
    </dependency> 

CODICE

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

    Client client = ClientBuilder.newClient(new ClientConfig()); 

    String entity = client.target("http://localhost:8080/insame/webresources/com.insame.entity.users") 
     .path("count") 
     .request(MediaType.TEXT_PLAIN) 
     .get(String.class); 

    System.out.println("entity-------->" +entity); 

RIPOSO:

@GET 
@Path("count") 
@Produces("text/plain") 
public String countREST() { 
    return String.valueOf(super.count()); 
} 

PROBLEMA

javax.ws.rs.ProcessingException: java.net.SocketException: Unexpected end of file from server 
at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:202) 
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:215) 
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:650) 

WARNING: StandardWrapperValve[com.insame.service.ApplicationConfig]: Servlet.service() for servlet com.insame.service.ApplicationConfig threw exception 
javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error 
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:904) 
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:749) 
    at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:88) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:650) 

DOMANDA

0) Cosa c'è di sbagliato nel mio codice?

1) Qual è il modo più saggio per recuperare i dati dal filtro servlet utilizzando REST + JPA?

2) Se c'è un altro modo per farlo, meglio intendo, pls fammi sapere?

3) è il client Jersey l'unico modo

4) Come posso ottenere EntityManager e chiamare il servizio direttamente dal resto del filtro senza Jersey client?

documentazione Jersey ed esempi: http://jersey.java.net/documentation/latest/user-guide.html#d0e2481

Grazie, Sami

risposta

0

0) 500 codice di errore significa che c'è qualcosa di sbagliato sul lato server. Potrebbe essere l'azione azione ha gettato qualche errore anche se REST è stato elaborato. 1) per REST semplice, ho usato Restlet e HttpClient. Anche jerseyClient con JAXB per elaborare la risposta come POJO. Nella mia esperienza, l'HTTP semplice è il modo migliore e più semplice per elaborare la risposta REST. È possibile scrivere facilmente un wrapper sul codice http (java.net) per elaborare la richiesta/risposta, creare Dom attorno a quello 2) e 3) viene risposto sopra