Je fais une application de service de repos avec JAX-RS. C'est pour un projet pour l'école. Pour ce projet, je dois utiliser des techniques suivantes: • Maven • JAX-RS • CDI • JPA - EJB • JNDI • Bean ValidationLe service de repos ne fonctionnera pas avec CDI: Service reste nul
Alors maintenant, je l'ai déjà maded mon domaine "Cafés" avec un faux DB ("CafeStub") et une vraie DB en utilisant JPA ("CafeDB"). Mon domaine fait aussi un peu usage de CDI. (@Inject dans la classe CafeService ...)
Non Je voulais créer mon service de repos, en utilisant JAX-RS. Cela a bien fonctionné:
Mon problème est quand j'essaie d'utiliser CDI à nouveau il échoue et donne une 500 exception, NullPointerException, « grave: Le RuntimeException ne pouvait pas être mis en correspondance avec une réponse, re-jeter à la HTTP récipient » pleine Stacktrace:
Je ne sais pas comment résoudre ce problème, recherche déjà depuis longtemps .. Espérons que quelqu'un peut me aider: s
Ceci est ma « classe CafeController ». La production du service de repos
Path("/cafes")
public class CafeController {
@Inject
private CafeFacade cafeFacade;
public CafeController() {
//this.cafeFacade = new CafeService();
}
@GET
@Produces("application/json")
public Response getCafes(){
try{
// test ........
ObjectMapper mapper = new ObjectMapper();
Cafe cafe = cafeFacade.getCafe(new Long(1));
String jsonInString = mapper.writeValueAsString(cafe);
return Response.status(200).entity(jsonInString).build();
}catch (JsonProcessingException jsonEx) {
System.out.println("Json Exception");
System.out.println(jsonEx.getMessage());
return null;
}
}
Celui-ci est le « CafeService » classe, celui qui a mis en œuvre « CafeFacade »
public class CafeService implements CafeFacade {
@Inject
private CafeRepository cafeRepository;
public CafeService() {
//cafeRepository = new CafeStub();
//cafeRepository = new CafeDB("CafesPU");
}
@Override
public long addCafe(Cafe cafe) {
return this.cafeRepository.addCafe(cafe);
}
@Override
public Cafe getCafe(long cafeID) {
return this.cafeRepository.getCafe(cafeID);
}
Elle vous voyez la classe « CafeStub », celui qui a mis en œuvre « CafeRepository »
public class CafeStub implements CafeRepository {
private static Map<Long, Cafe> cafes;
private static long counter = 0;
public CafeStub() {
cafes = new HashMap<Long, Cafe>();
// adding some dara
this.addSomeData();
}
@Override
public long addCafe(Cafe cafe) {
if(cafe == null){
throw new DBException("No cafe given");
}
counter++;
cafe.setCafeID(counter);
cafes.put(cafe.getCafeID(), cafe);
return cafe.getCafeID();
}
@Override
public Cafe getCafe(long cafeID) {
if(cafeID < 0){
throw new DBException("No correct cafeID given");
}
if(!cafes.containsKey(cafeID)){
throw new DBException("No cafe was found");
}
return cafes.get(cafeID);
}
Au moins ici, vous pouvez voir mon pom.xml (dépendances du projet CafeService) - web.xml (projet de CafeService) et de la structure du projet ...
<dependencies>
<dependency>
<groupId>Cafes</groupId>
<artifactId>Cafes</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.3</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19.4</version>
</dependency>
</dependencies>
Merci à l'avance ... Vive Tom