2015-01-14 21 views
6

我遇到問題,我的休息服務的兩個方法在部署時帶來了錯誤,即沒有注入源。在jaxrs的休息服務中沒有找到注入源

我的服務是這樣的:

@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(); 
} 

蒙山問題的類別如下:

@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; 
} 
} 

而我得到的錯誤是:

[[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=[[email protected]]}, 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=[]}']]] 

能你告訴我這個班有什麼問題。我也不明白,爲什麼sendMessage()方法不會帶來同樣的問題。

+0

您使用的是哪種JSON提供程序? –

回答

20

我發現問題是,我輸入了錯誤的@PathParam註釋。

+1

Eclipse在'javax.ws.rs.PathParam'之前建議'javax.websocket.server.PathParam' ...但是必須選擇第二個。 –

+0

感謝您發佈您的答案。我不能告訴你我浪費了多少時間尋找那個,哈哈 – user489041

2

添加此答案可爲問題/接受的答案增加更多上下文。

由於Daniel Müssig在他的回答中描述,我也使用了錯誤的@PathParam註釋(我使用的是javax.websocket.server中的一個,但顯然它應該是javax.ws.rs中的一個)。

下面是我遇到的一些更多的錯誤消息,可能希望幫助一些Google員工!

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]