如果您对在Tomcat6中部署Spring4.0的AbstractMethodError和tomcat部署spring项目感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在Tomcat6中部署S
如果您对在Tomcat 6中部署Spring 4.0的AbstractMethodError和tomcat部署spring项目感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在Tomcat 6中部署Spring 4.0的AbstractMethodError的各种细节,并对tomcat部署spring项目进行深入的分析,此外还有关于AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databind...、android Mockito 升级2.0 发生 AbstractMethodError 异常、android – 在Retrofit 2上使用RxJavaCallAdapterFactory时的AbstractMethodError、ByteBuddy:设置拦截器时的AbstractMethodError的实用技巧。
本文目录一览:- 在Tomcat 6中部署Spring 4.0的AbstractMethodError(tomcat部署spring项目)
- AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databind...
- android Mockito 升级2.0 发生 AbstractMethodError 异常
- android – 在Retrofit 2上使用RxJavaCallAdapterFactory时的AbstractMethodError
- ByteBuddy:设置拦截器时的AbstractMethodError
在Tomcat 6中部署Spring 4.0的AbstractMethodError(tomcat部署spring项目)
我在Tomcat 6.0.37中部署Spring 4.0.1应用程序时遇到以下异常:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0'': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065) at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)Caused by: java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:191) at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:176) at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.configureParameterNameProviderIfPossible(LocalValidatorFactoryBean.java:276) at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:245) at org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean.afterPropertiesSet(OptionalValidatorFactoryBean.java:40) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) ... 36 more
在build.gradle中添加了以下相关依赖项:
dependencies {providedCompile "javax.servlet:servlet-api:2.5"providedCompile "javax.servlet.jsp:jsp-api:2.2"providedCompile "javax.el:el-api:2.2"compile "javax.servlet.jsp.jstl:jstl-api:1.2"compile "org.glassfish.web:jstl-impl:1.2"compile "org.slf4j:jcl-over-slf4j:1.7.6"compile "org.slf4j:slf4j-api:1.7.6"compile ("org.hibernate:hibernate-validator:4.3.1.Final") {exclude group: "javax.xml.bind", module: "jaxb-api"exclude group: "com.sun.xml.bind", module: "jaxb-impl"}compile "javax.validation:validation-api:1.1.0.Final"// Spring 4.0.1 and other dependencies below....}
是由于spring-beans和spring-webmvc而导致的错误,取决于EL 2.2.4版本,而Tomcat 6随附EL 2.1。如果是这样,如何解决呢?另外,我无权更新Tomcat目录中的库。
答案1
小编典典该错误与EL无关。它与javax.validationapi
和hibernate有关。
java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider
Hibernate验证器4.3.x
是javax.validation1.0
(JSR-303)的实现。但是,你包括1.1 API版本。降级包含的javax.validation
版本或将hibernate验证器升级到5.0.x。
AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databind...
混淆导致的数据绑定库错误
问题摘要
AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databinding.DataBinderMapper.getDataBinder(androidx.databinding.DataBindingComponent, android.view.View, int)"
堆栈如下:
java.lang.AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databinding.DataBinderMapper.getDataBinder(androidx.databinding.DataBindingComponent, android.view.View, int)"
at androidx.databinding.MergedDataBinderMapper.getDataBinder(MergedDataBinderMapper.java:74)
at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:199)
at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:130)
at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:95)
at cn.sintoon.common.adapter.SinRecyclerViewBaseAdapter.onCreateViewHolder(Unknown Source:11)
at cn.sintoon.common.adapter.SinRecyclerViewBaseAdapter.onCreateViewHolder(Unknown Source:0)
at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3336)
at android.view.View.measure(View.java:23454)
at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:403)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:726)
at android.view.View.measure(View.java:23454)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:847)
at android.view.View.measure(View.java:23454)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2954)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1753)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2041)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
at android.view.Choreographer.doCallbacks(Choreographer.java:893)
at android.view.Choreographer.doFrame(Choreographer.java:812)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
at android.os.Handler.handleCallback(Handler.java:907)
出现场景
封装了一个类库,向外提供一个封装好的 RecyclerAdapter,使用 DataBinding 。生成类库时开启了混淆,在使用时,抛出异常。
问题原因
将 androidx.databinding.DataBindingComponent
混淆掉了。
如何修复
修改混淆规则。不混淆这个类。
-keep class androidx.databinding.DataBindingComponent {*;}
排查过程
根据错误堆栈看,是找不到这个方法,初步怀疑就是被混淆掉了方法,然后直接使用不混淆的测试,的确没有异常了。确认是混淆的问题。
然后在 /build/outputs/mapping/ 目录下查看 mapping.txt 文件,发现果然是将这类混淆掉了。
# compiler: R8
# compiler_version: 1.4.77
# min_api: 1
androidx.databinding.DataBindingComponent -> a.a.a:
mapping.txt 这个文件提供混淆前后类、方法、类成员等的对照表。
总结
在基础类库中使用了数据绑定库要配置混淆规则。
参考 Proguard 混淆规则
android Mockito 升级2.0 发生 AbstractMethodError 异常
android Mockito 升级2.0 发生 AbstractMethodError 异常
最近在研究android单元测试,没想到第一步进坑里了!!!在测试mvp之model的时候使用Mockito mock对象,在初始化一直发生AbstractMethodError异常.不说了先上异常环境.
androidTestImplementation "org.mockito:mockito-core:2.25.0"
androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
再上异常:
java.lang.AbstractMethodError: abstract method "org.mockito.plugins.MockMaker$TypeMockability org.mockito.plugins.MockMaker.isTypeMockable(java.lang.class)"
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:240)
at org.mockito.internal.creation.MockSettingsImpl.build(MockSettingsImpl.java:228)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:61)
at org.mockito.Mockito.mock(Mockito.java:1907)
....
###初始化方式1:
@RunWith(MockitoJUnitRunner.class)
public class LoginFrgModelTest {
@Mock
List testList;
@Test
public void doLoginByMsg() {
Mockito.when(testList.get(0)).thenReturn("ssdf");
String o = (String) testList.get(0);
Assert.assertEquals(o, "ssdf");
}
}
###初始化方式2:
public class LoginFrgModelTest {
@Mock
List testList;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void doLoginByMsg() {
Mockito.when(testList.get(0)).thenReturn("ssdf");
String o = (String) testList.get(0);
Assert.assertEquals(o, "ssdf");
}
}
###初始化方式3:
public class LoginFrgModelTest {
@Test
public void doLoginByMsg() {
List testList = mock(List.class);
Mockito.when(testList.get(0)).thenReturn("ssdf");
String o = (String) testList.get(0);
Assert.assertEquals(o, "ssdf");
}
}
各种姿势玩遍,都报AbstractMethodError异常.都怀疑我是不是合适玩测试了.最后还是上大谷歌了,果然查到了一丝猫腻,Dexmaker已经不适合在Mockito 2.0版本了!!!
Dexmaker does not support Mockito 2.0 since the deFinition of
MockMaker has changed.
##解决bug
果断怀疑以下两个库有问题了
androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
继续google发现有人写了个兼容Mockito 2.0,果断替换.it worked.
androidTestImplementation "org.mockito:mockito-core:2.25.0"
//androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
//androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.25.0'
#完
ps:
网上有说2.0方式二不好用了.没有验证,因为懒…
android – 在Retrofit 2上使用RxJavaCallAdapterFactory时的AbstractMethodError
FATAL EXCEPTION: main E/AndroidRuntime: java.lang.AbstractMethodError: abstract method not implemented at retrofit.RxJavaCallAdapterFactory.get(RxJavaCallAdapterFactory.java) at retrofit.Retrofit.nextCallAdapter(Retrofit.java:189) at retrofit.Retrofit.callAdapter(Retrofit.java:175) at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:45) at retrofit.MethodHandler.create(MethodHandler.java:26) at retrofit.Retrofit.loadMethodHandler(Retrofit.java:151) at retrofit.Retrofit$1.invoke(Retrofit.java:132) at $Proxy0.getPosts(Native Method)
在尝试使用RxJavaCallAdapterFactory进行改造时.我正在使用com.squareup.retrofit:retrofit:2.0.0-beta1和com.squareup.retrofit:adapter-rxjava:2.0.0-beta1.
这是我创建api接口的方法:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(FORUM_SERVER_URL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); mForumApi = retrofit.create(ForumApi.class);
FORUM_SERVER_URL是
private static final String FORUM_SERVER_URL =“http://jsonplaceholder.typicode.com”;
我的界面方法是:
@GET("/posts") public Observable<List<Post>> getPosts();
我叫它通过:
mForum.getApi() .getPosts() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<Post>>() { @Override public void onCompleted() {} @Override public void onError(Throwable e) {} @Override public void onNext(List<Post> posts) { mView.displayPosts(posts); } }); }
getApi返回mForumApi
getPosts是错误发生的地方,它是API调用
解决方法
改变(注意beta1):
compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2' compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
到(现在beta2)
compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2' compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
让它适合我.
愚蠢的错误,但是……
ByteBuddy:设置拦截器时的AbstractMethodError
Package-private方法被覆盖,但是如果将子类加载到其他类加载器上,则JVM将不会动态分派它们。如果将方法声明为public,则应解决该问题。或者,将类注入到目标类加载器中。
今天关于在Tomcat 6中部署Spring 4.0的AbstractMethodError和tomcat部署spring项目的分享就到这里,希望大家有所收获,若想了解更多关于AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databind...、android Mockito 升级2.0 发生 AbstractMethodError 异常、android – 在Retrofit 2上使用RxJavaCallAdapterFactory时的AbstractMethodError、ByteBuddy:设置拦截器时的AbstractMethodError等相关知识,可以在本站进行查询。
本文标签: