首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NullPointer对ApplicationListener处理ContextClosedEvent的警告

NullPointer对ApplicationListener处理ContextClosedEvent的警告
EN

Stack Overflow用户
提问于 2017-05-11 20:11:11
回答 1查看 1.5K关注 0票数 4

我有一个应用程序。它运行得很好。但是,每当我关闭应用程序时,我都会从处理ApplicationListener的ContextClosedEvent中得到一个关于空指针的警告。它看起来可能与Apache总线有关。

代码语言:javascript
复制
11:10:24.728 INFO  [Thread-10][AnnotationConfigEmbeddedWebApplicationContext] Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@39b667c3: startup date [Thu May 11 11:09:48 PDT 2017]; root of context hierarchy
11:10:24.738 WARN  [Thread-10][AnnotationConfigEmbeddedWebApplicationContext] Exception thrown from ApplicationListener handling ContextClosedEvent
java.lang.NullPointerException: null
    at java.util.concurrent.ConcurrentHashMap.replaceNode(ConcurrentHashMap.java:1106)
    at java.util.concurrent.ConcurrentHashMap.remove(ConcurrentHashMap.java:1097)
    at org.apache.cxf.transport.http.DestinationRegistryImpl.removeDestination(DestinationRegistryImpl.java:63)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.deactivate(AbstractHTTPDestination.java:961)
    at org.apache.cxf.transport.AbstractObservable.setMessageObserver(AbstractObservable.java:65)
    at org.apache.cxf.endpoint.ServerImpl.stop(ServerImpl.java:174)
    at org.apache.cxf.endpoint.ServerImpl.destroy(ServerImpl.java:180)
    at org.apache.cxf.bus.managers.ServerRegistryImpl.preShutdown(ServerRegistryImpl.java:90)
    at org.apache.cxf.bus.managers.CXFBusLifeCycleManager.preShutdown(CXFBusLifeCycleManager.java:97)
    at org.apache.cxf.bus.extension.ExtensionManagerBus.shutdown(ExtensionManagerBus.java:326)
    at org.apache.cxf.bus.extension.ExtensionManagerBus.shutdown(ExtensionManagerBus.java:313)
    at org.apache.cxf.bus.spring.SpringBus.onApplicationEvent(SpringBus.java:109)
    at org.apache.cxf.bus.spring.SpringBus$1.onApplicationEvent(SpringBus.java:58)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:382)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:336)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:989)
    at org.springframework.context.support.AbstractApplicationContext$2.run(AbstractApplicationContext.java:923)
11:10:24.780 INFO  [Thread-10][AnnotationMBeanExporter] Unregistering JMX-exposed beans on shutdown

这是我写的一个类,我认为错误可能是由,但我不确定。

代码语言:javascript
复制
import javax.xml.ws.Endpoint;
import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;


@Configuration
public class EndpointConfig {

    @Autowired
    private Bus bus;

    @Autowired
    private AmazonS3 s3client;

    @Bean
    public Endpoint endpoint() {
      EndpointImpl endpoint = new EndpointImpl(bus,
            new AcmeWebServiceImpl(s3client));
      endpoint.publish();
      return endpoint;
  }

  @Bean 
  public AmazonS3 amazonS3(){
     AmazonS3 amazonS3 = AmazonS3ClientBuilder.defaultClient();
     return amazonS3;
  }
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-29 11:54:07

我张贴这个作为一个答案,也许它也有助于其他人。

是的,我确实修好了…在试用…3天之后这更像是一种解决办法,也许修复太多了,因为修复应该在cxf代码…中完成。实际上,我们的堆栈跟踪有点不同,我把它附在下面。类似的,直到某一点,所以,也许我们如何解决它可能会对你有所帮助。下面是:

我们注意到的是,在DestinationRegistryImpl- removeDestination方法的第63行中,从ConcurrentHashmap中删除的路径为null,这来自于上一级的ConcurrentHashmap。在我们的例子中,我们使用了一个ServletDestination实例(AbstractHTTPDestination的一个子实例),它继承了受保护的变量路径,并通过其构造函数(ServletDestination构造函数)在ServletDestination- #33中设置了这个变量,其中EndpointInfo实例的地址被设置为路径。我们所要做的就是为我们的端点(JAXRSServerFactoryBean)设置一个地址,并将其转换为不再为null的路径,然后去掉NPE。

我为它的传奇感到抱歉,希望它是有意义的…我们花了整整3天的时间调试和查看cxf框架的代码,这不是很好。

我们增加了第74行,取消了NPE:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43924705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档