NullPointerException in KatharsisServlet - How to Troubleshoot?

29 Views Asked by At

Exception

javax.servlet.ServletException: Katharsis invocation failed.
    io.katharsis.servlet.legacy.AbstractKatharsisServlet.service(AbstractKatharsisServlet.java:68)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
Root Cause

java.lang.NullPointerException
    org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast(SystemUtils.java:1311)
    org.apache.commons.lang3.ClassUtils.isAssignable(ClassUtils.java:558)
    org.apache.commons.lang3.reflect.TypeUtils.isAssignable(TypeUtils.java:131)
    org.apache.commons.lang3.reflect.TypeUtils.isAssignable(TypeUtils.java:80)
    org.apache.commons.lang3.reflect.TypeUtils.isAssignable(TypeUtils.java:65)
    io.katharsis.core.internal.exception.ExceptionMapperRegistryBuilder.getGenericType(ExceptionMapperRegistryBuilder.java:42)
    io.katharsis.core.internal.exception.ExceptionMapperRegistryBuilder.registerExceptionMapper(ExceptionMapperRegistryBuilder.java:31)
    io.katharsis.core.internal.exception.ExceptionMapperRegistryBuilder.addKatharsisDefaultMappers(ExceptionMapperRegistryBuilder.java:27)
    io.katharsis.core.internal.exception.ExceptionMapperRegistryBuilder.build(ExceptionMapperRegistryBuilder.java:19)
    io.katharsis.core.internal.exception.ExceptionMapperRegistryBuilder.build(ExceptionMapperRegistryBuilder.java:15)
    io.katharsis.invoker.internal.legacy.KatharsisInvokerBuilder.buildExceptionMapperRegistry(KatharsisInvokerBuilder.java:174)
    io.katharsis.invoker.internal.legacy.KatharsisInvokerBuilder.build(KatharsisInvokerBuilder.java:150)
    io.katharsis.servlet.legacy.AbstractKatharsisServlet.createKatharsisInvoker(AbstractKatharsisServlet.java:99)
    io.katharsis.servlet.legacy.AbstractKatharsisServlet.getKatharsisInvoker(AbstractKatharsisServlet.java:81)
    io.katharsis.servlet.legacy.AbstractKatharsisServlet.service(AbstractKatharsisServlet.java:63)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

Resource

package resources;

import io.katharsis.resource.annotations.JsonApiId;
import io.katharsis.resource.annotations.JsonApiResource;

@JsonApiResource(type="resource")
public class SimpleResource  {
@JsonApiId
private Long id;
private String name;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
}

Repository

package repository;

import java.util.HashMap;

import io.katharsis.queryspec.QuerySpec;
import io.katharsis.repository.ResourceRepositoryBase;
import io.katharsis.resource.list.ResourceList;
import resources.SimpleResource;

public class SimpleRepository extends ResourceRepositoryBase\<SimpleResource,Long\>{

    private static HashMap<Integer,SimpleResource> names = new HashMap<>();
    static{
    
        names.put(1, new SimpleResource());
        names.put(2, new SimpleResource());
        names.get(1).setName("HAri");
        names.get(2).setName("Sri");
    }
    protected SimpleRepository(Class<SimpleResource> resourceClass) {
        super(resourceClass);
    }
    
    
    @Override
    public ResourceList<SimpleResource> findAll(QuerySpec querySpec) {
        // TODO Auto-generated method stub
        return querySpec.apply(names.values()) ;
    }

}

Servlet

package controllers;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.katharsis.core.properties.KatharsisProperties;
import io.katharsis.invoker.internal.legacy.KatharsisInvokerBuilder;
import io.katharsis.legacy.locator.JsonServiceLocator;
import io.katharsis.legacy.locator.SampleJsonServiceLocator;
import io.katharsis.servlet.legacy.AbstractKatharsisServlet;

@WebServlet(value = "/api/v2/*", initParams = {
@WebInitParam(name="katharsis.config.core.resource.package",value="resources"),
@WebInitParam(name = "katharsis.config.core.resource.domain",value = "http://localhost:8080/resource-repository")
} )
public class SimpleServlet extends AbstractKatharsisServlet{
private String resourceSearchPackage;
private String resourceDefaultDomain;
private static Logger log = LoggerFactory.getLogger(SimpleServlet.class.getSimpleName());

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        log.info("Katharsis Servlet Initialized");
        super.init(servletConfig);
        log.info(servletConfig.getServletContext().getServerInfo());
        resourceSearchPackage = servletConfig
            .getInitParameter(KatharsisProperties.RESOURCE_SEARCH_PACKAGE);
        resourceDefaultDomain = servletConfig
            .getInitParameter(KatharsisProperties.RESOURCE_DEFAULT_DOMAIN);
    }
    
    @Override
    protected KatharsisInvokerBuilder createKatharsisInvokerBuilder() {
        log.info("Servlet Loaded");
        return new KatharsisInvokerBuilder()
            .resourceSearchPackage(resourceSearchPackage)
            .resourceDefaultDomain(resourceDefaultDomain)
            .jsonServiceLocator(new SampleJsonServiceLocator());
    
            
    }

}
  • I've tried to trace the issue back to my code, but I'm having difficulty identifying the root cause. The exception occurs during the execution of methods in the Katharsis package.

  • Dependencies: I've ensured that all dependencies and libraries are of compatible versions.

  • Code: I've reviewed the code around the mentioned lines but can't find where the NullPointerException is originating.

  • Katharsis Project Repo

  • Has anyone worked in Katharsis ? Please share how to integrate katharsis with servlets

0

There are 0 best solutions below