GVKun编程网logo

在Tomcat 6中部署Spring 4.0的AbstractMethodError(tomcat部署spring项目)

16

如果您对在Tomcat6中部署Spring4.0的AbstractMethodError和tomcat部署spring项目感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在Tomcat6中部署S

如果您对在Tomcat 6中部署Spring 4.0的AbstractMethodErrortomcat部署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项目)

在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.xjavax.validation1.0(JSR-303)的实现。但是,你包括1.1 API版本。降级包含的javax.validation版本或将hibernate验证器升级到5.0.x。

AbstractMethodError: abstract method

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 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

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调用

解决方法

对我来说,事实证明我正在使用不同的beta版本的组件

改变(注意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

ByteBuddy:设置拦截器时的AbstractMethodError

Package-private方法被覆盖,但是如果将子类加载到其他类加载器上,则JVM将不会动态分派它们。如果将方法声明为public,则应解决该问题。或者,将类注入到目标类加载器中。

今天关于在Tomcat 6中部署Spring 4.0的AbstractMethodErrortomcat部署spring项目的分享就到这里,希望大家有所收获,若想了解更多关于AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databind...、android Mockito 升级2.0 发生 AbstractMethodError 异常、android – 在Retrofit 2上使用RxJavaCallAdapterFactory时的AbstractMethodError、ByteBuddy:设置拦截器时的AbstractMethodError等相关知识,可以在本站进行查询。

本文标签: