D'où viennent les objets @Context
J'ai cherché partout, mais n'arrive pas à trouver de réponse claire...
Quel est le mécanisme par lequel un serveur (glassfish pour mon problème) injecte réels objets qui sont annotés avec @Contexte? Plus précisément, si je voulais écrire une classe qui fait quelque chose comme:
@Path("/")
public class MyResource {
@GET
public String doSomething(@Context MyObject obj) {
//...
}
}
alors comment aurais-je le faire? Où est-ce que le Monobjet est instanciée, qui le fait, et comment?
Edit: j'ai vu des trucs comme suit:
À l'aide de @Contexte, @Fournisseur et ContextResolver de JAX-RS
http://jersey.576304.n2.nabble.com/ContextResolver-confusion-td5654154.html
Cependant, ce n'est pas d'équerre avec ce que j'ai vu, par exemple dans le constructeur de org.neo4j.serveur.le repos.web.RestfulGraphDatabase, qui a la signature suivante:
public RestfulGraphDatabase(
@Context UriInfo uriInfo,
@Context Database database,
@Context InputFormat input,
@Context OutputFormat output,
@Context LeaseManager leaseManager )
source d'informationauteur Kricket
Vous devez vous connecter pour publier un commentaire.
Vous pouvez écrire vos propres injection de fournisseur et de la prise en Jersey - regarder SingletonTypeInjectableProvider et PerRequestTypeInjectableProvider - étendre l'une de ces classes (en fonction du cycle de vie que vous voulez pour l'injectable objet) et enregistrer votre mise en œuvre en tant que fournisseur de votre application web.
Par exemple, quelque chose comme ceci:
Pour inclure le fournisseur de votre application web, vous avez plusieurs options:
Je pense que j'ai peut-être quelque chose...et si cela fonctionne, Martin devrait obtenir un crédit partiel. 🙂
Il semble que l' @Fournisseur de classe doit implémenter l' com.soleil.jersey.le spi.injecter.Injectable<T> interface. Cependant, je ne suis pas sûr que cela soit suffisant pour avoir l' @Contexte être injecté. Ce qui est absent, c'est que nous devons dire la ResourceConfig objet de l'application web sur le @Fournisseur. Dans le contexte de ce que je suis en train de faire, et de prendre des conseils de neo4j-serveur, le reste des travaux se résume à:
Je ne pense pas que vous pouvez utiliser
@Context
avec un type défini par l'utilisateur commeMyObject
. Il est pour l'injection types de jax-ws comprend déjà. Il est mentionné ici.Vous voudrez probablement utiliser quelque chose comme
@FormParam
ou@PathParam
à la place. Voir la section 2.3 de la spec pour une description. Voici votre réponse, copié à partir de cette section de la spécification:Voir les chapitres 5 à 6 de JAX-RS spec. Cela devrait vous dire tout ce que vous devez savoir à ce sujet.