鍍金池/ 問(wèn)答/Java  PHP/ spring整合JMS報(bào)ClassNotFoundException的錯(cuò)誤

spring整合JMS報(bào)ClassNotFoundException的錯(cuò)誤

spring整合JMS報(bào)java.lang.ClassNotFoundException: javax.jms.ConnectionFactory的錯(cuò)誤。以下是我的配置。

clipboard.png

import com.pb.listener.SpittleAlertHandler;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.apache.activemq.pool.PooledConnectionFactory;
import org.apache.activemq.ActiveMQConnectionFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.jms.connection.SingleConnectionFactory;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
import org.springframework.jms.listener.adapter.MessageListenerAdapter;
import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;


@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.pb.controller","com.pb.listener","com.pb.ServiceImp"})
public class WebMVCConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/webapp/WEB-INF/js/");
    }

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
       configurer.defaultContentType(MediaType.APPLICATION_JSON);
    }

    @Bean
    public ViewResolver viewResolver(ContentNegotiationManager cnm)
    {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Bean
    public ActiveMQConnectionFactory targetconnectionFactory(){
        ActiveMQConnectionFactory ac =  new ActiveMQConnectionFactory();
        ac.setBrokerURL("tcp://localhost:61616");
        return ac;
    }

    @Bean
    public PooledConnectionFactory poolconnectionFactory(ActiveMQConnectionFactory targetconnectionFactory) {
        PooledConnectionFactory ac = new PooledConnectionFactory();
        ac.setMaxConnections(10);
        ac.setConnectionFactory(targetconnectionFactory);
        return ac;
    }

    @Bean
    public SingleConnectionFactory connectionFactory(PooledConnectionFactory poolconnectionFactory){
        SingleConnectionFactory ac =  new SingleConnectionFactory();
        ac.setTargetConnectionFactory(poolconnectionFactory);
        return ac;
    }

    @Bean
    public ActiveMQTopic topic(){
        ActiveMQTopic ac = new ActiveMQTopic("spitter.topic");
        /*ConnectionFactory factory = new ActiveMQConnectionFactory();
        try {
            Connection connection = factory.createConnection();
            Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
            MessageProducer producer = session.createProducer(new ActiveMQQueue());


        } catch (JMSException e) {
            e.printStackTrace();
        }*/
        return ac;

    }
    @Bean
    public MappingJackson2MessageConverter messageConverter(){
        return new MappingJackson2MessageConverter();
    }

    @Bean
    public JmsTemplate jmsTemplate(SingleConnectionFactory factory, ActiveMQQueue queue,MessageConverter convert){
        JmsTemplate jmsTemplate = new JmsTemplate(factory);
        jmsTemplate.setDefaultDestination(queue);
        jmsTemplate.setMessageConverter(convert);
        return jmsTemplate;
    }

    @Bean
   public ActiveMQQueue queue(){
        ActiveMQQueue ac = new ActiveMQQueue("spitter.queue");
        return ac;
    }

    @Bean
    public MessageListenerAdapter adapter(SpittleAlertHandler handler){
        MessageListenerAdapter adapter = new MessageListenerAdapter();
        adapter.setDefaultListenerMethod("handlerMessage");
        adapter.setDelegate(handler);
        return adapter;
    }
    @Bean
    public DefaultMessageListenerContainer listenerContainer(SingleConnectionFactory connectionFactory,MessageListenerAdapter adapter,ActiveMQQueue queue){
        DefaultMessageListenerContainer listenerContainer = new DefaultMessageListenerContainer();
        listenerContainer.setConnectionFactory(connectionFactory);
        listenerContainer.setMessageListener(adapter);
        listenerContainer.setDestination(queue);
        return listenerContainer;
    }


}

報(bào)的錯(cuò)誤:

 org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.pb.mvc.WebMVCConfig]; nested exception is java.lang.IllegalStateException: Failed to introspect annotated methods on class com.pb.mvc.WebMVCConfig
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:181)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:308)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:272)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:92)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:540)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:171)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:795)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Failed to introspect annotated methods on class com.pb.mvc.WebMVCConfig
    at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:163)
    at org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata(ConfigurationClassParser.java:380)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:314)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
    ... 30 more
Caused by: java.lang.NoClassDefFoundError: javax/jms/ConnectionFactory
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
    at java.lang.Class.getDeclaredMethods(Class.java:1868)
    at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:152)
    ... 35 more
Caused by: java.lang.ClassNotFoundException: javax.jms.ConnectionFactory
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    ... 39 more
回答
編輯回答
檸檬藍(lán)

檢查一下有沒(méi)有g(shù)eronimo-jms_1.1_spec-1.1.1.jar這種jar包?

2018年3月6日 07:15