我是春季启动和ne04j的新蜜蜂。我正在开发包含2个模块web和核心的项目.Web(包作为战争)模块包含spring控制器和Core(包作为jar)模块包含neo4j存储库和.Web模块包括作为jar的Core模块。当我使用java -jar web / target / my-project-1.0-SNAPSHOT.war运行项目时,它抛出NullPointerException。
Spring Boot版本:1.3.0.RELEASE Neo4j:4.0.0.RELEASE
以下是日志
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是java.lang.NullPointerException 在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在javax.servlet.http.HttpServlet.service(HttpServlet.java:622)〜[tomcat-embed-core-8.0.28.jar!/:8.0.28] 在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在javax.servlet.http.HttpServlet.service(HttpServlet.java:729)〜[tomcat-embed-core-8.0.28.jar!/:8.0.28] 在org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)〜[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1669)〜[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)〜[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)〜[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)〜[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)〜[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)[jetty-security-9.2.14.v20151106.jar!/:9.2.14.v20151106] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)[jetty-servlet-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.server.Server.handle(Server.java:499)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)[jetty-server-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.io.AbstractConnection $ 2.run(AbstractConnection.java:544)[jetty-io-9.2.14.v20151106.jar!/:9.2.14.v20151106] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[jetty-util-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:555)[jetty-util-9.2.14.v20151106.jar!/:9.2.14.v20151106] 在java.lang.Thread.run(Thread.java:745)[na:1.7.0_79] 引起:java.lang.NullPointerException:null 在org.neo4j.ogm.metadata.MetaData.entityType(MetaData.java:231)〜[neo4j-ogm-1.1.2.jar!/:na] 在org.neo4j.ogm.session.Neo4jSession.entityType(Neo4jSession.java:451)〜[neo4j-ogm-1.1.2.jar!/:na] 在org.neo4j.ogm.session.delegates.LoadByTypeDelegate.loadAll(LoadByTypeDelegate.java:55)〜[neo4j-ogm-1.1.2.jar!/:na] 在org.neo4j.ogm.session.delegates.LoadByTypeDelegate.loadAll(LoadByTypeDelegate.java:99)〜[neo4j-ogm-1.1.2.jar!/:na] 在org.neo4j.ogm.session.Neo4jSession.loadAll(Neo4jSession.java:119)〜[neo4j-ogm-1.1.2.jar!/:na] 在org.springframework.data.neo4j.repository.GraphRepositoryImpl.findAll(GraphRepositoryImpl.java:123)〜[spring-data-neo4j-4.0.0.RELEASE.jar!/:na] 在org.springframework.data.neo4j.repository.GraphRepositoryImpl.findAll(GraphRepositoryImpl.java:118)〜[spring-data-neo4j-4.0.0.RELEASE.jar!/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.7.0_79] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)〜[na:1.7.0_79] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.7.0_79] 在java.lang.reflect.Method.invoke(Method.java:606)〜[na:1.7.0_79] 在org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:475)〜[spring-data-commons-1.11.0.RELEASE.jar!/:na] 在org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:460)〜[spring-data-commons-1.11.0.RELEASE.jar!/:na] 在org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:432)〜[spring-data-commons-1.11.0.RELEASE.jar!/:na] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:99)〜[spring-tx-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)〜[spring-tx-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)〜[spring-tx-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)〜[spring-tx-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在com.sun.proxy。$ Proxy60.findAll(Unknown Source)〜[na:na] 在com.ng.adm.neo.serviceImpl.TaskServiceImpl.tasks(TaskServiceImpl.java:22)〜[adm-core-1.0-SNAPSHOT.jar!/:1.0-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.7.0_79] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)〜[na:1.7.0_79] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.7.0_79] 在java.lang.reflect.Method.invoke(Method.java:606)〜[na:1.7.0_79] 在org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:99)〜[spring-tx-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)〜[spring-tx-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)〜[spring-tx-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)〜[spring-aop-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在com.sun.proxy。$ Proxy73.tasks(未知来源)〜[na:na] 在com.ng.adm.web.controllers.TaskApiController.tasks(TaskApiController.java:34)〜[classes!/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.7.0_79] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)〜[na:1.7.0_79] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.7.0_79] 在java.lang.reflect.Method.invoke(Method.java:606)〜[na:1.7.0_79] 在org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)〜[spring-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE] 在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)〜[spring-webmvc-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
以下是来自网络模块(战争内部)的控制器
enter code here
@Controller("")
public class TaskApiController {
@Autowired
TaskService taskService;
@Autowired
TaskRepository repository;
@ResponseBody
@RequestMapping(value = "api/tasks", method= RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public List<Task> tasks(@RequestParam(value = "limit",required = false) Integer limit) {
return taskService.tasks(limit == null ? 100 : limit);
}
}
以下是Core模块中的Neo4j域(jar内)
enter code here
Configuration
@ConfigurationProperties(prefix = "neo4j")
@EnableNeo4jRepositories("com.ng.adm.neo")
public class Neo4jConfig extends Neo4jConfiguration{
private String protocol;
private String host;
private String port;
private String userName;
private String password;
private String url;
private String domainPackage;
@Bean
public Neo4jServer neo4jServer() {
return new RemoteServer(this.protocol+this.host+":"+this.port,this.userName,this.password);
}
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory(this.domainPackage);
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDomainPackage() {
return domainPackage;
}
public void setDomainPackage(String domainPackage) {
this.domainPackage = domainPackage;
}
}
以下是Core模块的Neo4j配置(jar内)
enter code here
@JsonIdentityInfo(generator=JSOGGenerator.class)
@NodeEntity
public class Task {
@GraphId Long id;
String taskName;
String taskDescription;
String taskPriority;
String taskStatus;
int taskArchived = 0;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getTaskArchived() {
return taskArchived;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public String getTaskDescription() {
return taskDescription;
}
public void setTaskDescription(String taskDescription) {
this.taskDescription = taskDescription;
}
public String getTaskPriority() {
return taskPriority;
}
public void setTaskPriority(String taskPriority) {
this.taskPriority = taskPriority;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
public int isTaskArchived() {
return taskArchived;
}
public void setTaskArchived(int taskArchived) {
this.taskArchived = taskArchived;
}
@Override
public String toString() {
return "Task [id=" + id + ", taskName=" + taskName
+ ", taskDescription=" + taskDescription + ", taskPriority="
+ taskPriority + ",taskStatus=" + taskStatus + "]";
}
}
enter code here
Below is my repository from Core module (inside Jar)
enter code here
@RepositoryRestResource(collectionResourceRel = "tasks", path = "tasks")
public interface TaskRepository extends GraphRepository<Task> {
List<Task> findByTaskArchived(@Param("archivedfalse") int taskArchivedFalse);
List<Task> findByTaskStatus(@Param("status") String taskStatus);
/*Student findByFirstName(@Param("firstName") String fname);
@Query("MATCH (n:Student) RETURN n LIMIT {limit}")
List<Map<String,Object>> students(@Param("limit") int limit);*/
}
以下是来自Core模块(jar内)的服务类
enter code here
@Service
@Transactional
public class TaskServiceImpl implements TaskService{
@Autowired TaskRepository taskRepository;
@Override
public List<Task> tasks(int limit) {
Iterable<Task> result = taskRepository.findAll();
return (List<Task>) AppUtils.makeCollection(result);
}
}
当我从mvn spring-boot:run命令运行项目但从命令java -jar web / target / my-project-1.0-SNAPSHOT.war获取异常时,它正在工作。
请帮助我找到问题。
提前致谢。
答案 0 :(得分:3)
我遇到了同样的错误,这是因为我的域包在SessionFactory bean中不正确。
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory("com.make.sure.this.is.right");
}
注意,您可以传入多个包参数。
答案 1 :(得分:1)
认为此问题已修复 - 请将neo4j-ogm依赖版本升级到1.1.4