Ho creato una shell dell'applicazione di base con AppFuse e ho seguito lo AppFuse tutorial per creare un semplice servizio RESTful con Jax-RS. Funziona bene. Una chiamata a http://localhost:8080/services/api/persons
restituisce una raccolta di oggetti Person come stringa formattata con JSON con i dati corretti.Ottieni HttpServletRequest nell'applicazione Jax Rs/Appfuse?
Ora desidero accedere agli oggetti ServletRequest
e ServletResponse
da un servizio RESTful esposto da Appfuse (per utilizzare un'altra libreria che richiede questi oggetti).
I think che dovrebbe essere possibile aggiungendo un'annotazione @Context, ad es. seguendo questo StackOverflow post e questo forum post.
Ma se aggiungo il tag @Context (vedere di seguito), esso viene compilato correttamente ma genera un'eccezione quando il server viene riavviato (allegato in basso).
Ecco la dichiarazione del @WebService
:
@WebService
@Path("/persons")
public interface PersonManager extends GenericManager<Person, Long> {
@Path("/")
@GET
@Produces(MediaType.APPLICATION_JSON)
List<Person> read();
...
}
Ed ecco la classe di implementazione in cui penso che chiamerei il @Context
annotazione:
@Service("personManager")
public class PersonManagerImpl extends GenericManagerImpl<Person, Long> implements PersonManager {
PersonDao personDao;
@Context ServletRequest request; // Exception thrown on launch if this is present
@Context ServletContext context; // Exception thrown on launch of this is present
...
}
Speriamo che mi manca qualcosa di semplice, sia qualcosa includere per farlo funzionare, o per rendersi conto che ottenere il ServletRequest non dovrebbe essere possibile perché .... Qualsiasi indizio sarebbe benvenuto.
Sono in esecuzione su Tomcat in IntelliJ.
=== ECCEZIONE STACK TRACE (troncata) ===
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'serviceBeans' threw exception; nested exception is java.lang.RuntimeException: java.lang.NullPointerException
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
... 37 more
Grazie mille! Anche se questo non ha funzionato esattamente come scritto, ha dato un'eccezione diversa e, oltre all'idea di fare riferimento a HttpServletRequest piuttosto che a ServletRequest, era l'indizio perfetto per capire come includerlo correttamente. Un +1 invece di un controllo appropriato? – prototype
Hmmm questo è strano. Ho effettivamente incollato il codice direttamente da un programma funzionante. Sentiti libero di pubblicare la tua soluzione come risposta in modo che possa beneficiare gli altri. – Perception
Quindi è necessario aggiungere un altro elemento alla mia lista di cose per sapere come funzionano i servizi di riposo. Sapere che è anche utile. Grazie ancora! – prototype