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.
Has anyone worked in Katharsis ? Please share how to integrate katharsis with servlets