当前位置: 首页 > 知识库问答 >
问题:

当我添加新服务时,我的所有宁静 Web 服务都停止工作

韦阳辉
2023-03-14

好的,我有一个包含两个restful web服务类Login.class和Subscribe.class的包,当我将它们部署到app engine并测试它们时,它们工作了。现在,我将一个名为User s.class的新服务类添加到包中。现在,我的服务都不起作用了。当我调用它们时,我得到一个内部服务器错误。

com.sun.jersey.spi.inject.Errors processErrorMessages: The following errors and warnings have been detected with resource and/or provider classes:

严重:产生介质类型冲突。The resource Methods public javax.ws.rs.core.Response com.ppsjamaica.webservices.PPSUSERS.getUserById(java.lang.Long) 和 public javax.ws.rs.core.Response com.ppsjamaica.webservices.PPSUSERS.getUserByUsnamePassword(java.lang.String,java.lang.String) 可以生成相同的媒体类型

Uncaught exception from servlet

错误$错误消息异常在 com.sun.jersey.spi.inject.process错误消息(错误.java:170)

我的订阅类是:

   @Path ("/subscriber")
public class Subscribe {

    @GET
    @Produces (MediaType.APPLICATION_JSON)
    public Response getSubscriber (@QueryParam("email")String email)
    {
        EntityManager entityManager = EMF.getInstance ().createEntityManager ();

        /*
         * Sends back a BAD_REQUEST HTTP status
         * if email query parameter is empty
         */
        if (email.isEmpty ())
            return Response.status(Status.BAD_REQUEST).build ();

        try
        {
            Query query = entityManager.createQuery ("SELECT FROM Subscriber WHERE email= :emailParam");
            query.setParameter("emailParam", email);
            return Response.status(Status.OK).entity((Subscriber) query.getSingleResult ()).build (); 
        }
        catch (NoResultException e)
        {
            return Response.status (Status.NOT_FOUND).build ();
        }

    }//end Subscriber method
}

我的登录类是:

    @Path ("/login")
public class Login {

    @GET
    @Produces (MediaType.APPLICATION_JSON)
    public User authenticate (@QueryParam("username") String username, @QueryParam("password")String password)
    {
        User user = new User ();
        return user;
    }//end authenticate method


    @GET
    @Path ("/Subscriber")
    @Produces (MediaType.APPLICATION_JSON)
    public Response getSubsriber (@QueryParam("email") String email)
    {
        EntityManager entityManager = EMF.getInstance ().createEntityManager();

        try
        {
            Query query = entityManager.createQuery("SELECT FROM Subscriber WHERE email= :emailParam");
            query.setParameter("emailParam", email);

            Subscriber subscriber = (Subscriber)query.getSingleResult();
            return Response.status(Status.OK).entity(subscriber).build ();
        }
        catch(Exception e)
        {
            throw new RuntimeException (e);
        }
    }//end getSubsriber method
}//end Login class

我的用户类是:

@Path ("/users")
public class Users {


    /**
     * Gets all User objects from datastore. Returns
     * NOT_FOUND HTTP Response status if no result
     * found and OK HTTP Response status if it does with
     * a list of User objects. 
     * 
     * URL: domain-name/services/users/all
     * 
     * @author Mario Dennis
     * @return Response
     */
    @GET
    @Path ("/all")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllUsers ()
    {
        try
        {
            EntityManager entityManager = EMF.getInstance().createEntityManager();
            Query query = entityManager.createQuery("SELECT FROM User");

            @SuppressWarnings("unchecked")
            List<User> user = (List<User>) query.getSingleResult ();
            GenericEntity<List<User>> entity = new GenericEntity<List<User>>(user){};

            return Response.status(Status.OK).entity(entity).build ();
        }
        catch (NoResultException e)
        {
            return Response.status(Status.NOT_FOUND).build ();
        }
    }//end getAllUsers method



    /**
     * Gets User object with user name and password specified from
     * datastore. Returns NOT_FOUND HTTP Response status if no result
     * found and OK HTTP Response status if it is found and BAD_REQUEST
     * if parameter supplied is empty.
     * a list of User objects. 
     * 
     * URL: domain-name/services/users/{username}&{password}
     * 
     * @author Mario Dennis
     * @return Response
     */
    @GET
    @Produces (MediaType.APPLICATION_JSON)
    public Response getUserByUsernamePassword (@QueryParam("username")String username,@QueryParam("password") String password)
    {
        /*
         * Sends back a BAD_REQUEST HTTP status
         * if email query parameter is empty
         */
        if (username.isEmpty() || password.isEmpty())
            return Response.status(Status.BAD_REQUEST).build ();

        try
        {
            EntityManager entityManager = EMF.getInstance().createEntityManager ();
            Query query = entityManager.createQuery ("SELECT FROM User WHERE user_name= :usernameParam AND password= :passwordParam");
            query.setParameter("usernameParam", username);
            query.setParameter("passwordParam",password);
            User user = (User) query.getSingleResult ();

            return Response.status(Status.OK).entity(user).build ();
        }
        catch (NoResultException e)
        {
            return Response.status(Status.NOT_FOUND).build ();
        }
    }//end getUserByUsernamePassword method



    /**
     * Gets User object with id specified from datastore. 
     * Returns NOT_FOUND HTTP Response status if no result
     * found and OK HTTP Response status if it is found and 
     * BAD_REQUEST if parameter supplied is empty.
     * a list of User objects. 
     * 
     * URL: domain-name/services/users/{id}
     * 
     * @author Mario Dennis
     * @return Response
     */
    @GET
    @Produces (MediaType.APPLICATION_JSON)
    public Response getUserById (@QueryParam("id")Long id)
    {
        /*
         * Sends back a BAD_REQUEST HTTP status
         * if email query parameter is empty.
         */
        if (id == null)
            return Response.status(Status.BAD_REQUEST).build ();

        try
        {
            EntityManager entityManager = EMF.getInstance ().createEntityManager ();
            User user = entityManager.find(User.class,id);

            /*
             * Checks if user was found. Return a NOT_FOUND
             * HTTP status if user was not located. 
             */
            if (user == null)
                return Response.status(Status.NOT_FOUND).build ();

            else
                return Response.status(Status.OK).entity(user).build();
        }
        catch (NoResultException e)
        {
            return Response.status(Status.NOT_FOUND).build ();
        }
    }//end getUserById method




    /**
     * Save User object to database. Return NOT_MODIFIED
     * HTTP status if persisting of object failed. Otherwise
     * return OK HTTP status if it was successful.
     * 
     * URL: domain-name/services/users/{JSON}
     * 
     * @author Mario Dennis
     * @param user
     * @return Response
     */
    @POST
    @Consumes  (MediaType.APPLICATION_JSON)
    public Response saveUser (User user)
    {
        try
        {
            EntityManager entityManager = EMF.getInstance().createEntityManager();
            entityManager.getTransaction ().begin();
            entityManager.persist(user);
            entityManager.getTransaction().commit();

            return Response.status(Status.OK).build ();
        }
        catch(Exception e)
        {
            return Response.status(Status.NOT_MODIFIED).build ();
        }
    }//end saveUser method

}//end Users class

当我删除用户类并上传回去时,其他两个服务再次开始工作。这是什么原因造成的?网站.xml

 <!-- Jersey Framework mapping -->
   <servlet>
        <servlet-name>RESTful</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
          <param-name>com.sun.jersey.config.property.packages</param-name>
          <param-value>com.ppsjamaica.webservices</param-value>
        </init-param>
  </servlet>
  <servlet-mapping>
        <servlet-name>RESTful</servlet-name>
        <url-pattern>/service/*</url-pattern>
  </servlet-mapping>
    <!-- end Jersey Framework mapping -->

共有2个答案

公良光熙
2023-03-14

一种方法是创建一个从< code > WebApplicationException 继承的自定义异常;你可以在这里看到更多的细节。您不应该直接抛出< code>RuntimeException,因为容器不知道这是否是预期的行为。

另一种方法是用@ApplicationException注释您的自定义异常(直接从运行时Exception继承),尽管我不知道这是否是在JAX-RS中执行此操作的方法;仅在乙型企业银行。

程飞星
2023-03-14

请不要设计要求用户在URI中输入密码的服务。

关于失败的原因:两种方法都使用相同的URI模板(注意,它们中的每一个都注入不同的查询参数并不意味着它们被映射到不同的URI——重要的是@Path注释的值——两者都是一样的)。您必须通过将它们映射到不同的URI模板来消除它们的歧义。

 类似资料:
  • 警告:处理任务java.io.ioException时出现异常:java.lang.IllegalArgumentException:找不到[com/google/android/gms/internal/measure/zzkf](有1个已知超级类)和[com/google/android/gms/internal/measure/zzko](有1个已知超级类)的通用超级类 我的proguard

  • OSX 10.13.6 并且(在另一个终端窗口中): 根据mysql.server的MariaDB文档,这两个命令都应该工作。 目前,我正在像这样杀死服务器: 7stud 4544 0.0 0.0 4267752 880 s000 s+1:41 pm 0:00.00 grep mysqld 关闭mariadb服务器的正确方法是什么?

  • 问题内容: 这是我第一次使用Node.js,遇到了这个问题: 我已经通过IDE的插件启动了节点服务器。不幸的是,我无法使用IDE的终端。因此,我尝试从命令行运行脚本。 这是问题所在-我正在使用Express模块​​,而我的应用正在监听某个端口(8080)。当我从命令行启动应用程序时,它将引发以下错误: 即使我不太确定该错误可能是什么,我仍然认为这是因为该应用程序正在侦听已在使用的端口。所以我做了:

  • 这是我第一次使用Node.js,我遇到了这个问题: 我已经通过一个IDE的插件启动了一个节点服务器。不幸的是,我不能使用IDE的终端。所以我尝试从命令行运行脚本。 这就是问题所在--我正在使用Express模块,而我的应用程序正在监听某个端口(8080)。当我从命令行启动应用程序时,它会抛出以下错误: 尽管我不是很确定这个错误可能是什么,但我认为这是因为应用程序正在监听一个已经在使用的端口。所以我

  • 问题内容: 我已经到了秃顶几步之遥… 我正在尝试运行一项服务,该服务将检查我工作中的服务器是否正在运行。应该每5分钟执行一次。 我经历过TimerTask,ScheduledExecutorService,最后是Handler。他们都工作了好几个小时,除了一些不准确的地方外,还有1-5分钟的时间,然后突然,“计时器”就停止了发射。 现在,我已经了解到,如果Scheduler遇到未捕获的异常,它将停

  • 我有一个服务和一个交流的活动。当我点击按钮(我有galaxy s3,只有一个按钮)时,我的活动当然不满意,我的服务继续运行,但如果我点击后退(触摸)按钮,那么我的服务就被破坏了。我该如何改变这一点?我希望服务一直运行,直到活动破坏它。 活动: