3

Я столкнулся с проблемой блокировки с моей установкой (JDK 1.7). В принципе у меня есть следующий NPE:NullPointerException, созданный Charset.availableCharsets из-за нашего драйвера Sybase JDBC

10:19:17.548 [main] ERROR o.s.t.w.s.TestDispatcherServlet - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1007) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:953) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:289) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.createDefaultStrategy(DispatcherServlet.java:810) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.getDefaultStrategies(DispatcherServlet.java:779) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.initHandlerAdapters(DispatcherServlet.java:587) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.initStrategies(DispatcherServlet.java:444) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServlet.java:432) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:525) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) [spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) [tomcat-servlet-api-7.0.37.jar:3.0.FR] 
    at org.springframework.test.web.servlet.MockMvcBuilderSupport.createMockMvc(MockMvcBuilderSupport.java:53) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder.build(DefaultMockMvcBuilder.java:207) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at com.mycompany.ui.controller.ConnectionInfosControllerTest.setup(ConnectionInfosControllerTest.java:41) [test-classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_21] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_21] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_21] 
    at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_21] 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) [junit-4.11.jar:na] 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.11.jar:na] 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) [junit-4.11.jar:na] 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) [junit-4.11.jar:na] 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) [junit-4.11.jar:na] 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) [junit-4.11.jar:na] 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) [junit-4.11.jar:na] 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) [junit-4.11.jar:na] 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) [junit-4.11.jar:na] 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) [junit-4.11.jar:na] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) [spring-test-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) [.cp/:na] 
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1000) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    ... 44 common frames omitted 
Caused by: java.lang.NullPointerException: null 
    at java.nio.charset.Charset.put(Charset.java:550) ~[na:1.7.0_21] 
    at java.nio.charset.Charset.access$300(Charset.java:276) ~[na:1.7.0_21] 
    at java.nio.charset.Charset$4.run(Charset.java:593) ~[na:1.7.0_21] 
    at java.nio.charset.Charset$4.run(Charset.java:585) ~[na:1.7.0_21] 
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_21] 
    at java.nio.charset.Charset.availableCharsets(Charset.java:584) ~[na:1.7.0_21] 
    at org.springframework.http.converter.StringHttpMessageConverter.<init>(StringHttpMessageConverter.java:66) ~[spring-web-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.http.converter.StringHttpMessageConverter.<init>(StringHttpMessageConverter.java:56) ~[spring-web-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.<init>(AnnotationMethodHandlerAdapter.java:201) ~[spring-webmvc-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_21] 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.7.0_21] 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_21] 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) ~[na:1.7.0_21] 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ~[spring-beans-3.2.3.RELEASE.jar:3.2.3.RELEASE] 
    ... 46 common frames omitted 

Я сильно подозреваю, что это связано со следующей ошибкой: see report here

Я отчаянно ищет обходной путь. Обратите внимание, что я не коснулся установки jdk. Я не добавил или не удалил любую кодировку ...

Может кто-нибудь помочь?

редактировать 1: Смотрите другие сообщения об ошибке here и обратите внимание на «почему» ...

редактировать 2: У меня есть дополнительная информация относительно вышеуказанного вопроса: Я добавил следующий тест, в отдельном проекте:

package pack; 

import java.nio.charset.Charset; 
import java.util.Iterator; 
import java.util.Set; 

public class TestCase { 
    public static void main(String[] args) { 
     Set set = Charset.availableCharsets().keySet(); 
     for (Iterator iterator = set.iterator(); iterator.hasNext();) { 
      String s = (String) iterator.next(); 
      System.out.println(s); 
     } 
    } 
} 

Я заметил, что в тесте пробегов без ошибок!

Теперь, когда я добавить тот же самый тест, к нашему проекту (построен с Maven), я бегу в то же NPE:

Exception in thread "main" java.lang.NullPointerException 
    at java.nio.charset.Charset.put(Charset.java:550) 
    at java.nio.charset.Charset.access$300(Charset.java:276) 
    at java.nio.charset.Charset$4.run(Charset.java:593) 
    at java.nio.charset.Charset$4.run(Charset.java:585) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.nio.charset.Charset.availableCharsets(Charset.java:584) 
    at pack.TestCase.main(TestCase.java:9) 

поэтому я подозреваю, что это может быть связано с нашим конфиг maven. У любого есть какая-либо подсказка о том, что может вызвать эту проблему с Charset в конфигурации 0max-maven?

Редактировать 3: Эффективный POM слишком длинный. Вот Pastebin для него: pastebin here

редактировать 4: мне удалось определить проблемную зависимость. Вот оно:

<dependency> 
    <groupId>com.sybase</groupId> 
    <artifactId>jconn4</artifactId> 
    <version>7.07.GA</version> 
    <scope>runtime</scope> 
</dependency> 

Удалив эту зависимость, то TestCase выполняет правильно и выводит все доступные кодировки. Однако нам нужен драйвер базы данных для нашего приложения. Кто-нибудь знает, что происходит с драйвером sybase jdbc?

+0

Если вы сильно подозреваете, что это может быть связано с вашей конфигурацией maven, возможно, стоит посмотреть нам, как выглядит этот конфиг. – rimero

+0

Кроме того, это помогло бы, если бы вы могли предоставить исходный код для весеннего компонента (по крайней мере, конструктор, который не работает). Вы уверены, что правильно насмехаетесь над зависимостями? – Vegard

+0

@rimero Я добавил пастабин из эффективного пом. – balteo

ответ

1

Ошибка в драйвере Sybase JDBC как можно видеть here. Цитирую недовольный пользователь драйвера Sybase JDBC из приведенной выше ссылке:

Ничто не должно удивить меня, хотя, как текущий драйвер Sybase является сокрушается, и вот уже более года! Он содержит CharsetProvider, который возвращает нулевой итератор, вызывающий Charset.availableCharsets(), чтобы выбросить исключение nullpointer. Множество фреймов , таких как Spring, вызывает Charset.availableCharsets().

Я не знаю, как сообщить об этой ошибке в Sybase/SAP, хотя ...

+0

Если у вас есть контракт на поддержку Sybase, вы можете сообщить об ошибке, вызвав поддержку. –

+0

Спасибо, Майкл. – balteo

+0

Если это помогает кому-то, я получаю ошибку с jconn4 7.07, но не jconn4 7.0. – Paul

0

Не уверен, что если кто-то до сих пор ищет ответ или нет ... Но да, это ошибка в Sybase ящик для водителя. Существует обсуждение и решение в рамках этой ссылки Discussion of NPE with jconn4.jar in SAP. Я просто столкнулся с той же проблемой и получил разрешение путем замены на более новую банку (оказалось, что мы использовали очень старый).

Смежные вопросы