keine Injektion Quelle gefunden " - Fehler, wenn mehrere @PathParams in Erholsamen Ressource mit Jersey
Arbeite ich an einer einfachen Restful-web-service mit Rest /Jersey mit Tomcat 7. Die Dinge funktionieren nur gut, wenn alle meine Pfade mit einem einzigen parameter. Wenn ich auch eine mit mehr als einem parameter, stoße ich auf die "No-Injektion Quelle gefunden" - Fehler, wenn ich versuche, drücken Sie eine der Ressourcen-Pfade unterstützt, indem Sie meine Ressource-Klasse - auch diejenigen, die arbeiteten, vor. Wenn ich kommentiere das jeweilige Stück code, alle meine anderen Pfade funktionieren wie erwartet. Aber wenn ich die Auskommentierung aus diesem Stück code kann ich nicht verwenden Sie eine der meine Pfade.
Hier ist ein Ausschnitt von meinem code:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
//get all the information about a specific item
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public String getItem(@PathParam("id") String itemId)
{
String answer = "{";
answer += "\"itemid\":\"" + itemId + "\",";
answer += "\"type\":0,";
answer += "\"sector\":322948,";
answer += "\"created\":53249098220";
answer += "}";
return answer;
}
//if I comment out this method, all is fine;
//if I leave it in, error is thrown when I make any restful call
//query to see if there is a new item for user
@Path("/loc/{userid}/{xloc}/{yloc}")
@Produces(MediaType.APPLICATION_JSON)
public String getNewitem(@PathParam("userid") String userId,
@PathParam("xloc") Number xLoc,
@PathParam("yloc") Number yLoc)
{
String answer = "{\"itemid\":\"abcdefgh\"}";
return answer;
}
Hier ist der error-trace:
javax.servlet.ServletException: Servlet.init() for servlet Jersey REST Service threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
root cause
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 public java.lang.String com.drunkware.geobijous.resources.GBBijouResource.getNewBijou(java.lang.String,java.lang.Number,java.lang.Number) at index 1.; source='ResourceMethod{httpMethod=GET, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.drunkware.geobijous.resources.GBBijouResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@757bdd3c]}, definitionMethod=public java.lang.String com.drunkware.geobijous.resources.GBBijouResource.getNewBijou(java.lang.String,java.lang.Number,java.lang.Number), parameters=[Parameter [type=class java.lang.String, source=userid, defaultValue=null], Parameter [type=class java.lang.Number, source=latitude, defaultValue=null], Parameter [type=class java.lang.Number, source=longitude, defaultValue=null]], responseType=class java.lang.String}, nameBindings=[]}']
org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:467)
org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:163)
org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:323)
org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:320)
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:285)
org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Irgendwelche Vorschläge, um dieses problem zu beheben? Ich bin mit jersey 2.12. Ist das ein bekannter bug?
@GET
- Anmerkung für die zweite Funktion?InformationsquelleAutor vpitts | 2014-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den injection-Fehler, den Sie erhalten ist verursacht durch
Number
Parameter. Da komplexe Objekte, wie etwa die Anzahl nicht unterstützt @PathParam Umsetzung. Man könnte leicht dieses Problem beheben, indem Sie den folgenden code (auch die @GET)Gibt es viele Möglichkeiten, die Arbeit mit komplexen Objekten, im Fall Sie mehr Informationen benötigen als
int
können Sie liefern. Aber dann müssen Sie ändern die Art und Weise, Sie zu erhalten, da@PathParam
ist ganz einfach.Für mehr details über die komplexe Nutzung, überprüfen Sie Jackson, um Ihnen zu helfen, mit dem Objekt - /json-Konvertierung. Wahrscheinlich haben Sie so etwas wie dieses:
Klasse
MyLocalization
ist ein pojo, die Sie erstellen, bearbeitet von jackson-Bibliotheken mit folgenden Abhängigkeit:InformationsquelleAutor Marcio Jasinski