简体   繁体   English

zk +弹簧数据NullPointerException

[英]zk + spring data NullPointerException

I am creating my first application with zk and spring . 我正在用zk and spring创建我的第一个应用程序。 I described simple dao layer and services. 我描述了简单的dao层和服务。 The problem is that the my service is always null in viewmodel. 问题在于my服务在viewmodel中始终为null。 What am I doing wrong? 我究竟做错了什么?

Thanks. 谢谢。

stacktrace 堆栈跟踪

23:54:53.687 [http-bio-8080-exec-3] ERROR org.zkoss.bind.impl.ParamCall - java.lang.NullPointerException: null
at ru.hostco.ced.viewmodel.TaskListViewModel.refreshTasks(TaskListViewModel.java:46) ~[classes/:na]
at ru.hostco.ced.viewmodel.TaskListViewModel.init(TaskListViewModel.java:39) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_60]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_60]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_60]
at org.zkoss.bind.impl.ParamCall.call(ParamCall.java:148) ~[zkbind-8.0.0-Eval.jar:8.0.0]
at org.zkoss.bind.impl.AbstractAnnotatedMethodInvoker.invokeMethod(AbstractAnnotatedMethodInvoker.java:90) [zkbind-8.0.0-Eval.jar:8.0.0]
at org.zkoss.bind.impl.BinderImpl.init(BinderImpl.java:336) [zkbind-8.0.0-Eval.jar:8.0.0]
at org.zkoss.bind.AnnotateBinder.init(AnnotateBinder.java:57) [zkbind-8.0.0-Eval.jar:8.0.0]
at org.zkoss.bind.BindComposer.doBeforeComposeChildren(BindComposer.java:166) [zkbind-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.doBeforeComposeChildren(UiEngineImpl.java:981) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:920) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:923) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:923) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:923) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:822) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:771) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:452) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:358) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:217) [zk-8.0.0-Eval.jar:8.0.0]
at org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:136) [zk-8.0.0-Eval.jar:8.0.0]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) [servlet-api.jar:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) [servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.64]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.64]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat7-websocket.jar:7.0.64]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.64]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.64]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.64]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.64]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) [catalina.jar:7.0.64]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [catalina.jar:7.0.64]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.64]
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) [catalina.jar:7.0.64]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.64]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) [catalina.jar:7.0.64]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) [tomcat-coyote.jar:7.0.64]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) [tomcat-coyote.jar:7.0.64]
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) [tomcat-coyote.jar:7.0.64]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_60]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.64]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_60] окт 26, 2015 11:54:53 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [zkLoader] in context with path [/ced] threw exception java.lang.NullPointerException
at ru.hostco.ced.viewmodel.TaskListViewModel.refreshTasks(TaskListViewModel.java:46)
at ru.hostco.ced.viewmodel.TaskListViewModel.init(TaskListViewModel.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.zkoss.bind.impl.ParamCall.call(ParamCall.java:148)
at org.zkoss.bind.impl.AbstractAnnotatedMethodInvoker.invokeMethod(AbstractAnnotatedMethodInvoker.java:90)
at org.zkoss.bind.impl.BinderImpl.init(BinderImpl.java:336)
at org.zkoss.bind.AnnotateBinder.init(AnnotateBinder.java:57)
at org.zkoss.bind.BindComposer.doBeforeComposeChildren(BindComposer.java:166)
at org.zkoss.zk.ui.impl.UiEngineImpl.doBeforeComposeChildren(UiEngineImpl.java:981)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:920)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:923)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:923)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:923)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:877)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:748)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:822)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:771)
at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:709)
at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:452)
at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:358)
at org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:217)
at org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

applicationContext.xml applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.2.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

<context:component-scan base-package="ru.hostco.ced"></context:component-scan>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver"></property>
    <property name="url"
        value="jdbc:postgresql://host:port/db"></property>
    <property name="username" value="user"></property>
    <property name="password" value="pass"></property>
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="ru.hostco.ced.spring.entity"></property>
    <property name="dataSource" ref="dataSource"></property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.default_schema">ced</prop>
        </props>
    </property>
    <property name="persistenceProvider">
        <bean class="org.hibernate.jpa.HibernatePersistenceProvider"></bean>
    </property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<jpa:repositories base-package="ru.hostco.ced.spring.repository"></jpa:repositories>

TaskRepository.java TaskRepository.java

public interface TaskRepository extends ReadOnlyRepository<Task, Integer> { 
@Query(value = "select * from ced.findtask("
        + "cast(:userLogin as text), "
        + "cast(:dueDate as timestamp), "
        + "cast(:group as text), "
        + "cast(:subjectIds as text))", nativeQuery = true)
public Set<Task> findByUserLoginAndDueDateAndGroupAndSubjects(
        @Param("userLogin") String userLogin,
        @Param("dueDate") String dueDate,
        @Param("group") String group,
        @Param("subjectIds") String subjectIds);
}

TaskServiceImpl.java TaskServiceImpl.java

@Transactional @Service("taskService") public class TaskServiceImpl implements TaskService {
@Autowired
private TaskRepository taskRepository;  

public Set<Task> findByFilters(String userLogin, Date dueDate, TaskGroup group,
        Set<Integer> subjectIds) {
    return taskRepository.findByUserLoginAndDueDateAndGroupAndSubjects(
            userLogin, 
            new SimpleDateFormat("yyyy-MM-dd").format(dueDate), 
            group.toString(), 
            subjectIds.toString().substring(1, subjectIds.toString().length() - 1).replace(" ", ""));
}

public Task findById(Integer id) {
    return taskRepository.findOne(id);
}

public TaskRepository getTaskRepository() {
    return taskRepository;
}

public void setTaskRepository(TaskRepository taskRepository) {
    this.taskRepository = taskRepository;
}   
}

ViewModel.java ViewModel.java

@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class) public class TaskListViewModel { @WireVariable
private TaskServiceImpl taskService;
private Set<Task> tasks;
private Date selectedDate;
private TaskGroup selectedGroup;
private Set<Integer> subjectIds;

/**
 * 
 */
@Init
public void init() {
    selectedGroup = TaskGroup.ASSIGN_TO_ME;
    subjectIds = new HashSet<Integer>();
    subjectIds.add(TaskSubject.ALL_TASKS_SUBJECT.getId());      
    refreshTasks();
}

@NotifyChange("tasks")
@Command
public void refreshTasks() {
    tasks = new HashSet<Task>();
    tasks.addAll(taskService.findByFilters(User.TEST_USER_LOGIN, 
            selectedDate, selectedGroup, subjectIds));
}

public Set<Task> getTasks() {
    return tasks;
}

public void setTasks(Set<Task> tasks) {
    this.tasks = tasks;
}

public Date getSelectedDate() {
    return selectedDate;
}

@GlobalCommand
public void setSelectedDate(@BindingParam("selectedDate") Date selectedDate) {
    System.err.println(selectedDate.toString());
    this.selectedDate = selectedDate;
}

public TaskGroup getSelectedGroup() {
    return selectedGroup;
}

@GlobalCommand
public void setSelectedGroup(@BindingParam("selectedGroup")     
    TaskGroup selectedGroup) {
    System.err.println(selectedGroup.toString());
    this.selectedGroup = selectedGroup;
}

public Set<Integer> getSubjectIds() {
    return subjectIds;
}

public void setSubjectIds(Set<Integer> subjectIds) {
    this.subjectIds = subjectIds;
}

public TaskServiceImpl getTaskService() {
    return taskService;
}

public void setTaskService(TaskServiceImpl taskService) {
    this.taskService = taskService;
}   
}

The spring services are not being known by Zk, you need to add: Zk不知道spring服务,您需要添加:

<zksp:zk-config>
</zksp:zk-config>

To your applicationContext.xml. 到您的applicationContext.xml。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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