2015-10-20 1 views
1

Это вопрос до this и использует this в качестве ссылки.Что я делаю неправильно, вводя эти весенние бобы? Использование Autowiring

Вот мой модифицированный spring-context.xml

<bean id="sampleApacheConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" lazy-init="true"> 
    <property name="brokerURL" value="tcp://localhost:61616"/> 
    <property name="userName" value=“kodeseeker"/> 
    <property name="password" value=“mypassword"/> 

</bean> 

<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
     <constructor-arg ref="sampleApacheConnectionFactory" /> 
    </bean> 

    <!-- Default Destination Queue Definition--> 
    <bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue"> 
     <constructor-arg index="0" value="test.Foo"/> 
    </bean> 

    <!-- JmsTemplate Definition --> 
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
     <property name="connectionFactory" ref="connectionFactory" /> 
     <property name="defaultDestination" ref="defaultDestination" /> 
    </bean> 

    <!-- Message Sender Definition --> 
    <bean id="messageSender" class="com.mypackage.Publisher2"> 
    </bean> 

<!-- Message Receiver Definition --> 
    <bean id="messageReceiver" class="com.mypackage.Listener"> 

    </bean> 
     <bean class="org.springframework.jms.listener.SimpleMessageListenerContainer"> 
     <property name="connectionFactory" ref="connectionFactory" /> 
     <property name="destinationName" value="test.Foo" /> 
     <property name="messageListener" ref="messageReceiver" /> 
    </bean> 
<context:component-scan base-package="com.mypackage" /> 
    <bean name=“publisher" class=“com.mypackage.Publisher2"/> 
     <bean name="updateHandler" class="com.mypackage.UpdateHandlerImpl”/>  

</beans> 

и входящий класс, который первым получает запрос.

package com.mypackage 

@ComponentScan 
@Controller 
@Path("/") 
public class BaseApiImpl { 

….. 
    @Context 
    HttpHeaders headers; 
    @Autowired 
    UpdateHandlerImpl updateHandler; 


    @PUT 
    @Path("v1/“) 
    @Consumes("application/json") 
    @Produces({ "application/json" }) 
    public PutTransactionsResponse updateTransactions(
      UpdateTransactionsRequest entity) 
      throws Exception { 
    // @formatter:on 
     LOGGER.entry(); 
     try { 
     //updateHandler is always Null! 
       return updateHandler.handle(new UpdateTransactionsMessage(headers.getRequestHeaders(), entity)); 

     } catch (Exception e) { 
      LOGGER.catching(e); 
        } finally { 
      LOGGER.exit(); 
     } 

    } 

Однако, несмотря на аннотирования класс с @Controller и объявить бобы в файле контекста. Я считаю, что updateHandler всегда равно нулю. Что именно я делаю неправильно здесь?

+0

Обработчик обновление боб внутри который находится внутри другого тега ... Может быть, это вопрос – Nadir

+0

Да ваш контекст перепутались. Вы должны отформатировать его. – Stefan

+0

Ваш фасоль - это фасоль JAX-RS, а не фасоль. У вас будет 2 экземпляра, которыми управляет одна весна, и один компонент jax-rs. Используйте правильную интеграцию для используемой структуры или используйте Spring MVC, чтобы разоблачить конечную точку отдыха. Также '@ ComponentScan' не будет работать над этим классом, что полезно только для классов' @ Configuration'. –

ответ

0

Создайте класс конфигурации Джерси и зарегистрируйте его как фасоль и удалите @Component и @ComponentScan на BaseApiImpl класс, надеюсь, он должен работать, в моем случае я использую Spring boot.

import org.glassfish.jersey.server.ResourceConfig; 
import javax.ws.rs.ApplicationPath; 

@ApplicationPath(value = "/<contextpath>") 
public class JerseyConfig extends ResourceConfig{ 

    public JerseyConfig() { 
    packages(true, "<your @Path classes package>"); 
    } 
} 
Смежные вопросы