简体   繁体   中英

Java ee Servlet is handling AbstractMethodError

After add second servlet I am getting Exception:

java.lang.abstractmethoderror: receiver class com.sun.jersey.core.spi.factory.responseimpl does not define or inherit an implementation of the resolved method abstract getstatusinfo()ljavax/ws/rs/core/response$statustype; of abstract class javax.ws.rs.core.response.

I figure out that the problem is in dependencies in my pom.xml but I don't have any idea where. Anyway, I gonna forward you some codes. First, my servlets

    package vs.api.serlvets;

import com.sun.jersey.api.NotFoundException;
import vs.api.database.UserDBO;
import vs.api.repository.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

@WebServlet(name = "LogInServlet", urlPatterns = { "/LogInUser"})
public class LogInServlet extends HttpServlet
{
    main.java.vs.api.database.DatabaseManager databaseManager;
    UserDBO userDBO;
    HttpSession session;
    public void init() throws ServletException
    {
        databaseManager = new main.java.vs.api.database.DatabaseManager();
        try
        {
            userDBO = new UserDBO(databaseManager.dataSource.getConnection());
        }
        catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        session = request.getSession();
        session.removeAttribute("errorLogIn");
        PrintWriter out = response.getWriter();
        String email = "";
        String password = "";
        User user = new User();
        try
        {
            email = request.getParameter("inputEmail");
            password = request.getParameter("inputPassword");
            user = userDBO.get(email, password);
        }
        catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (NotFoundException e)
        {
            session.setAttribute("errorLogIn", e.getMessage());
            response.sendRedirect(request.getHeader("Referer"));
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        out.print("User: " + user.getName());
    }

    @Override
    public void destroy()
    {
        userDBO.exit();
    }
}

    package vs.api.serlvets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.jersey.api.NotFoundException;
import main.java.vs.api.database.DatabaseManager;
import vs.api.database.IDBO;
import vs.api.database.UserDBO;
import vs.api.repository.User;

@WebServlet(description = "RegistrationServlet", urlPatterns = { "/RegisterUser"})
public class RegisterUserServlet extends HttpServlet
{
    DatabaseManager databaseManager;
    IDBO userDBO;
    public RegisterUserServlet()
    {
        super();
    }

    public void init() throws ServletException 
    {
        databaseManager = new DatabaseManager();
        try 
        {
            userDBO = new UserDBO(databaseManager.dataSource.getConnection());
        } 
        catch (SQLException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        User user = new User();
        user.setName(request.getParameter("inputFirstName"));
        user.setSurname(request.getParameter("inputLastName"));
        user.setEmail(request.getParameter("inputEmail"));
        user.setPassword(request.getParameter("inputPassword"));
        try 
        {
            userDBO.add(user);
        } 
        catch (SQLException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IllegalArgumentException e)
        {
            HttpSession session = request.getSession();
            session.setAttribute("errorUserExist", e.getMessage());
            response.sendRedirect(request.getHeader("Referer"));
        }
        catch(AbstractMethodError e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void destroy()
    {
        userDBO.exit();
    }
}

And second my pom.xml

    <?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.drimtim</groupId>
  <artifactId>virtualspace</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>virtualspace Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.19</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-servlet</artifactId>
      <version>1.19</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>servlet-api</artifactId>
      <version>6.0.53</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <version>1.19</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.18</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>virtualspace</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>10</source>
          <target>10</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

In end, my web.xml

    <!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>Registration User Servlet</servlet-name>
    <servlet-class>vs.api.serlvets.RegisterUserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Registration User Servlet</servlet-name>
    <url-pattern>/RegisterUser</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>LogIn User Servlet</servlet-name>
    <servlet-class>vs.api.serlvets.RegisterUserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LogIn User Servlet</servlet-name>
    <url-pattern>/LogInUser</url-pattern>
  </servlet-mapping>

  <error-page>
    <error-code>404</error-code>
    <location>/AppExceptionHandler</location>
  </error-page>

  <error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/AppExceptionHandler</location>
  </error-page>
</web-app>

This is my all pom.xml Could you say me where is problem? Thanks in advance.

First you need to remove unnecessary dependencies for that you can use maven. Execute below commands by opening terminal in your project root directory.

  1. mvn clean
  2. mvn dependency:analyze

It will show you the unused and required dependencies.

Also you can try by changing your pom. i think you only need following dependencies.

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>

   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.18</version>
    </dependency>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM