NoSuchMethodError при входе в систему, но отлично работает на другом ПК - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть работающее Java-приложение, развернутое в WebSphere.

Но после автоматического обновления из Windows я получаю NoSuchMethodError .Я смог направить на страницу входа приложения.Но каждый раз, когда я вхожу, это дает мне эту ошибку.

Вот полная ошибка.

Error Message: javax.servlet.ServletException: java.lang.NoSuchMethodError: org/springframework/web/util/WebUtils.getNativeResponse(Ljavax/servlet/ServletResponse;Ljava/lang/Class;)Ljava/lang/Object;
Error Code: 500
Target Servlet: com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor
Error Stack: 
java.lang.NoSuchMethodError: org/springframework/web/util/WebUtils.getNativeResponse(Ljavax/servlet/ServletResponse;Ljava/lang/Class;)Ljava/lang/Object; 
     at org.springframework.security.web.context.HttpSessionSecurityContextRepository.saveContext(HttpSessionSecurityContextRepository.java:109) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:93) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
     at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025) 
     at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3761) 
     at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) 
     at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:976) 
     at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 
     at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:283) 
     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
     at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) 
     at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
     at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
     at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
     at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
     at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
     at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
     at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1862) 
  

Я попытался развернуть файл war на другом компьютере, и он работает нормально.Я даже скопировал его папку .ear и заменил папку .ear, но все равно не повезло.

Я сравнил свою версию java, версии jar и версию websphere, и все они одинаковые.

Я не знаюУ меня нет других идей, чтобы это исправить.Пожалуйста, помогите!

Спасибо!

ОБНОВЛЕНИЕ

Я использовал IP моего коллеги в качестве имени хоста в моем источнике данных вместо localhost, и я смогвойти в систему без каких-либо ошибок.Кроме того, я не знаю, связано ли это с моей проблемой, когда я пытаюсь отладить приложение, я получаю Не удалось подключиться к удаленной виртуальной машине.Время соединения истекло. , но когда я снова использую IP-адрес моего коллеги в качестве имени хоста, я могу отладить.Может ли быть проблема в моем ноутбуке?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Ваше приложение почти наверняка содержит два отдельных несовместимых jar-файла Spring в каталоге WEB-INF / lib.Содержимое этого каталога не упорядочено в соответствии со спецификацией, и сервер просто помещает их в путь к классу WAR в любом порядке, в котором он получает список из файловой системы.Скорее всего, отказавшая система изначально возвращает список файлов в этом каталоге в другом порядке, чем в рабочей системе, и этот порядок приводит к «неправильной» копии jar-файла, обнаруженного ранее в пути к классам.

Простое решение состоит в том, чтобы просто избавиться от этой неправильной версии - Java не позволяет загружать два класса с одним и тем же именем из одного загрузчика классов, поэтому буквально невозможно использовать несколько версий класса, упакованных вWAR.Невозможно использовать несколько несовместимых версий одной технологии в одном модуле WAR.

Если у вас возникли проблемы с определением, какие JAR-файлы правильные, вы можете проверить, из каких JAR-классов приходят классы.включив многословную загрузку классов (это флажок на панели конфигурации JVM сервера) и выполнив поиск native_stderr.log, чтобы увидеть, из каких jar-классов приходят классы, - важными классами являются org.springframework.web.util.WebUtils и org.springframework.security.web.context.HttpSessionSecurityContextRepository.Spring, как правило, хорош в том, что на его банках есть строки версий, поэтому, надеюсь, вы сможете очень легко увидеть из этого вывода, какие версии у вас в игре и какие вам нужно удалить.

0 голосов
/ 17 декабря 2018

По ссылке, как показано ниже, управляйте родительским приложением первой и последней конфигурацией загрузчика классов.Выполните команды процедуры в ссылке для вашего приложения.Вы можете встретить исключение «нет такого метода» во время выполнения, когда класс WebUtils расположен как для внутренних библиотек WAS, так и для библиотеки вашего уха.Поэтому, если метод getNativeResponse не находится в загруженном внутреннем классе WebUtils.Вы получите это исключение времени выполнения.Вы можете управлять своими банками для WebUtils.getNativeResponse и его сигнатур в WAS libs и Ear's libs.В соответствии с этим случаем выберите родительский последний или первый конфиг для загрузчика классов.

https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/trun_classload_server.html

...