No injection source found for a parameter in rest-service with jaxrs

24,618

Solution 1

I found out that the problem was, that I imported the wrong @PathParam Annotation.

Solution 2

Adding this answer to add a bit more context to the question / accepted answer.

As Daniel Müssig described in his answer, I too used the wrong @PathParam annotation (I was using the one from javax.websocket.server, but obviously it should be the one from javax.ws.rs).

Here are some more error messages that I ran into, that might hopefully help some googlers out there!

org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type [... more specific method data on this line]
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:553) ~[jersey-server-2.21.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:182) ~[jersey-server-2.21.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:348) ~[jersey-server-2.21.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:345) ~[jersey-server-2.21.jar:na]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.21.jar:na]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[jersey-common-2.21.jar:na]
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255) ~[jersey-common-2.21.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:345) ~[jersey-server-2.21.jar:na]
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:390) ~[jersey-container-servlet-core-2.21.jar:na]
Share:
24,618
Daniel Müssig
Author by

Daniel Müssig

Mostly working with Java, HTML5/JS and recently also with Python.

Updated on July 09, 2022

Comments

  • Daniel Müssig
    Daniel Müssig almost 2 years

    I have the problem, that two methods of my rest service bring the error on deploy, that there is no injection source.

    My Service looks like this:

    @Path("/chatservice")
    public class ChatServiceImpl implements ChatService{
    
    @POST
    @Path("/registerToServer")
    @Consumes(MediaType.APPLICATION_JSON)
    @Override
    public Response registerToServer(User user) {
    
        UserList userListObject = getAllChatableUsers(user);
    
        return Response.status(200).entity(userListObject).build();
    }
    
    @POST
    @Path("/sendMessage")
    @Consumes(MediaType.APPLICATION_JSON)
    @Override
    public Response sendMessage(Message message) {
        boolean isSuccess = putMessageIntoDatabase(message);
    
        return Response.status(200).build();
    }
    
    @POST
    @Path("/getAllMessagesForUser")
    @Consumes(MediaType.APPLICATION_JSON)
    @Override
    public Response getAllMessagesForUser(UserWithRecipient userWithRecipient) {
    
        return Response.status(200).build();
    }
    
    @POST
    @Path("/getAllMessagesForUser/{numberOfMessages}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Override
    public Response getMessagesForUser(@PathParam("numberOfMessages") int numberOfMessages, UserWithRecipient userWithRecipient) {
    
        return Response.status(200).build();
    }
    

    The Class whith the Problem is the following:

    @XmlSeeAlso(User.class)
    @XmlRootElement
    public class UserWithRecipient {
    
    private User user;
    private User recipient;
    
    public UserWithRecipient() {
    }
    
    public User getUser() {
        return user;
    }
    
    public void setUser(User user) {
        this.user = user;
    }
    
    public User getRecipient() {
        return recipient;
    }
    
    public void setRecipient(User recipient) {
        this.recipient = recipient;
    }
    }
    

    And the error I get is the following:

     [[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response de.hszg.fei.ws.service.ChatServiceImpl.getMessagesForUser(int,de.hszg.fei.ws.model.UserWithRecipient) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[application/json], producedTypes=[], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class de.hszg.fei.ws.service.ChatServiceImpl, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@6da34189]}, definitionMethod=public javax.ws.rs.core.Response de.hszg.fei.ws.service.ChatServiceImpl.getMessagesForUser(int,de.hszg.fei.ws.model.UserWithRecipient), parameters=[Parameter [type=int, source=numberOfMessages, defaultValue=null], Parameter [type=class de.hszg.fei.ws.model.UserWithRecipient, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']]]
    

    Can you tell me what is the problem with this class. I also don't understand, why the sendMessage() method doesn't brings the same problem.

  • ROMANIA_engineer
    ROMANIA_engineer over 8 years
    Eclipse suggests javax.websocket.server.PathParam before javax.ws.rs.PathParam ... but the second one has to be chosen.