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

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>