java – Jersey:com. sun. jersey. spi. inject. Errors $ErrorMessagesException
I'm having trouble using the Jersey (1.8), Maven and hibernate
I received this error (full log)
INFO: Scanning for root resource and provider classes in the packages: de.tum.fml.idp.backend.rest Dez 04,2013 2:29:40 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Root resource classes found: class de.tum.fml.idp.backend.rest.PlayerWebService class de.tum.fml.idp.backend.rest.RestSample Dez 04,2013 2:29:40 PM com.sun.jersey.api.core.ScanningResourceConfig init INFO: No provider classes found. Dez 04,2013 2:29:41 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate INFO: Initiating Jersey application,version 'Jersey: 1.8 06/24/2011 12:17 PM' Dez 04,2013 2:29:42 PM com.sun.jersey.spi.inject.Errors processErrorMessages SEVERE: The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayerIDs() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWebService.createUser() can produce the same media type SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayers() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWe bService.createUser() can produce the same media type 2013-12-04 14:29:42.010:WARN:/0.1-SNAPSHOT:unavailable com.sun.jersey.spi.inject.Errors$ErrorMessagesException at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:766) at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:488) at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318) at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556) at javax.servlet.GenericServlet.init(GenericServlet.java:241) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:477) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:293) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:730) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:254) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1240) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:689) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:482) at org.eclipse.jetenter code herety.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) at org.eclipse.jetty.server.Server.doStart(Server.java:281) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.codehaus.cargo.container.jetty.internal.JettyExecutorThread.run(JettyExecutorThread.java:69) 2013-12-04 14:29:42.022:INFO:oejw.WebInfConfiguration:Extract jar:file:/C:/Users/Stefan/Drop@R_835_2419@/Studium/TUM/IDP/repo/backend/backend/target/cargo/configurations/jetty7x/cargocpc.war!/ to C:\Users\Stefan\AppData\Local\Temp\jetty-0.0.0.0-8080-cargocpc.war-_cargocpc-any-\webapp 2013-12-04 14:29:42.052:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/cargocpc,file:/C:/Users/Stefan/AppData/Local/Temp/jetty-0.0.0.0-8080-cargocpc.war-_cargocpc-any-/webapp/},C:\Users\Stefan\Drop@R_835_2419@\Studium\TUM\IDP\repo\backend\backend\target\cargo\configurations\jetty7x\cargocpc.war 2013-12-04 14:29:42.108:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
This is the code I used:
package de.tum.fml.idp.backend.rest; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import de.tum.fml.idp.backend.rest.interfaces.PlayerManagment; import de.tum.fml.idp.gamelog.backend.beans.Player; @Path("/players") public class PlayerWebService implements PlayerManagment { @Override @GET public Player createUser() { // TODO Auto-generated method stub return new Player(); } @Override @POST public Player updatePlayer(Player player) { // TODO Auto-generated method stub return new Player(); } @Override @GET @Path("/getPlayer/{param}") public Player getPlayer(@PathParam("param") int id) { // TODO Auto-generated method stub Player bla = new Player(); bla.setId(-1); return bla; } @Override @GET public List<Player> getPlayers() { // TODO Auto-generated method stub return null; } @Override @GET public List<Integer> getPlayerIDs() { // TODO Auto-generated method stub return null; } }
And player classes
package de.tum.fml.idp.gamelog.backend.beans; import java.util.ArrayList; import java.util.List; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.xml.bind.annotation.XmlRootElement; import org.hibernate.annotations.Entity; //@XmlRootElement public class Player { // @Id // @GeneratedValue private int id; private String name; private String password; Avatar avatar; private PlayerProperties properties; private int tempId; private int availablePropertyPoints; private int totalPropertyPoints; // @OneToMany private ArrayList<AchievedAchievment> achievments; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String string) { this.name = string; } public String getpassword() { return password; } public void setPassword(String password) { this.password = password; } public Avatar getAvatar() { return avatar; } public void setAvatar(Avatar avatar) { this.avatar = avatar; } public PlayerProperties getProperties() { return properties; } public void setProperties(PlayerProperties properties) { this.properties = properties; } public int getTempId() { return tempId; } public void setTempId(int tempId) { this.tempId = tempId; } public int getAvailablePropertyPoints() { return availablePropertyPoints; } public void setAvailablePropertyPoints(int availablePropertyPoints) { this.availablePropertyPoints = availablePropertyPoints; } public int getTotalPropertyPoints() { return totalPropertyPoints; } public void setTotalPropertyPoints(int totalPropertyPoints) { this.totalPropertyPoints = totalPropertyPoints; } public List<AchievedAchievment> getAchievments() { if(achievments == null) achievments = new ArrayList<AchievedAchievment>(); return achievments; } public void setAchievments(ArrayList<AchievedAchievment> achievments) { this.achievments = achievments; } public void addAchievment(AchievedAchievment aa1) { if(achievments == null) achievments = new ArrayList<AchievedAchievment>(); if(aa1.getPlayer() != this) throw new RuntimeException("Player: Achievment was already given to another user"); else achievments.add(aa1); } }
Who knows why this doesn't work? I've tried to comment on almost everything, several different Maven dependencies, but it won't start to work
"Toy sample" works properly...: –/
I hope you can help me,
KR,
Solution
The error message tells you what's wrong (you must look for a line beginning with sever):
This means that you have multiple get endpoints with the same path (defined in the class' annotation ("/ players") to produce the same media type:
@GET public List<Player> getPlayers() @GET public Player createUser() @GET public List<Integer> getPlayerIDs()
When sending a get request to a player, Jersey cannot determine which one you want to call You need to define separate paths for some of these endpoints
If your intention is actually to make them have the same path, you need to add the @ produces annotation with different media types, so Jersey can choose the correct method according to the accept header If the request body is requested, you can also use the @ consumers annotation Otherwise, you need to add a @ path comment or change the request type of the method to avoid this conflict