我使用由Maven 3构建的gucie-servlet框架用Java编写的Web应用程序.当我在Tomcat 7容器上部署它并尝试使用浏览器访问它时,Tomcat回复404状态代码.这是来自Tomcat的日志:
Apr 4, 2013 11:39:50 AM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Apr 4, 2013 11:39:50 AM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()
Apr 4, 2013 11:39:55 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class ru.hive.webserver.config.HiveServletConfig
java.lang.NoClassDefFoundError: ru/hive/base/db/modules/DatabaseModule
at ru.hive.webserver.config.HiveServletConfig.getInjector(HiveServletConfig.java:24)
at com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:45)
at ru.hive.webserver.config.HiveServletConfig.contextInitialized(HiveServletConfig.java:19)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Caused by: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的Android应用中单独测试演示者.方法我试图测试看起来像这样:
@Override
public boolean loadNextPage() {
if (!mIsLoading) {
mIsLoading = true;
if (mViewReference.get() != null) {
mViewReference.get().showProgress();
}
mService.search(mSearchQuery, ++mCurrentPage)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(itemsPage -> {
mIsLoading = false;
mTotalPages = itemsPage.getPagination().getTotalPages();
if (mViewReference.get() != null) {
mViewReference.get().showMovies(itemsPage.getItems());
}
},
error -> {
mIsLoading = false;
Log.d(LOG_TAG, error.toString());
});
}
return mTotalPages == 0 || mCurrentPage < mTotalPages;
}
Run Code Online (Sandbox Code Playgroud)
mService是Retrofit接口和mService.search()方法返回RxJava的Observable<SearchResults>.我的单元测试代码如下所示:
package mobi.zona.presenters;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.List;
import …Run Code Online (Sandbox Code Playgroud) 我有以下查询方法定义:
@Query("SELECT * FROM box_jobs")
fun getAll(): Maybe<List<BoxJob>>
Run Code Online (Sandbox Code Playgroud)
我想返回此查询的结果,如果它不为空,否则返回REST API调用的结果.这是我的逻辑代码:
override fun loadTasks(): Maybe<List<Task>> {
Log.d(TAG, "Searching tasks in database")
return boxJobDao.getAll()
.map { boxJobs -> boxJobMapper.entityListToTaskList(boxJobs) }
.switchIfEmpty(syncTasks())
}
private fun syncTasks(): Maybe<List<Task>> {
Log.d(TAG, "Loading tasks from server")
return api.boxJobs(DEVICE_ID)
.doOnSuccess({ boxJobDtoList ->
Log.d(TAG, "${boxJobDtoList.size} box jobs loaded from server")
saveToDb(boxJobDtoList)
})
.doOnError({ error -> Log.d(TAG, "Error during tasks loading", error) })
.map { boxJobDtoList -> boxJobMapper.dtoListToTaskList(boxJobDtoList) }
.toMaybe()
}
Run Code Online (Sandbox Code Playgroud)
问题是,总是使用空调用Maybe返回空数据库,因此运算符不起作用.getAll()onSuccess()List<BoxJob>switchIfEmpty()
我认为这是不正确的行为.我是对的还是我做错了什么?这个问题有解决方法吗?