2017-11-30 19 views
0

私は春の新機能です。だから私は下のコードに何があるのか​​理解できませんでした。私には2つのクラスがあります。 @Bean Channelを定義していて、次のクラスでそのBeanをオートワイヤリングしています。私はオートワイヤリングのアノテーションを使用しています。私が "System.out.println(externalChannel.toString());" NULL値を取得し、例外のNULLポインタ例外がスローされます。オートワイヤリングによって@bean値を別のクラスに渡すことができませんでした。

@Configuration 
public class MessagingConfig 
{ 
    @Value("${service.name}") 
    private String queueName; // NOSONAR 

    @Value("${${user}") 
    private String schema; 

    @Value("${Owner}") 
    private String owner; 

    @Bean 
    public Channel externalChannel() 
    { 
     EventsProvider eventsProvider = new EventsProvider(); 
     eventsProvider.setOwner(owner); 
     System.out.println("-------Cost And Events Channel-------"+eventsProvider.getEventsChannel()); 
     return eventsProvider.getEventsChannel(); 
    }  
} 

、別のクラスは

@Component 
@LoggedService 
@Monitored(useActualType = true) 
public class MessagePublish { 

    @Autowired 
    private MessagingService messageService; 

    @Autowired 
    private Channel externalChannel; 

    public void publishTPSMessage(SourceTransaction sourceTransaction) 
    { 
     TPSEvent event = new TPSEvent(ContextHolder.getContextId(), new Date(), GuidUtils.generateGuid(),sourceTransaction); 
     Message<TPSEvent> message = new Message<TPSEvent>(event); 

     message.getHeader().setMessageType(TPSEvent.class.getName()); 
     message.getHeader().setPayloadEncodingType(SystemCodecs.XML.name()); 
     System.out.println(message.toString()); 

     System.out.println(externalChannel.toString()); 
     messageService.publish(externalChannel, message); 
    } 
} 

詳細です

public Channel getEventsChannel() { 
     return Channel.builder() 
     .setName("necessarySources") 
     .setConnectionName("defaultConnection") 
     .setType(ChannelType.Topic) 
     .setConnectionData(AqSqlConnectionData.buildString(this.owner, "Safi")) 
     .setSubscriberNames(new String[]{"Safi_Autowire"}) 
     .build(); 
    } 

メインクラス

public class TPSHandler { 
    public static void main(String[] args) { 
     BatchExport batchExportBean=getBatchExportASJAXBElement(); 
     System.out.println(" batchExportBean Trans Description : " + batchExportBean.getDueDate()); 
     for(Pay pay :batchExportBean.getPay()) { 
      SourceTransaction sourceTransaction=mapPayBatchToSourceTransaction(pay,batchExportBean); 
      String sourceTraString = getSourceTransactionASXML(sourceTransaction); 
      System.out.println(" sourceTraString : \n" + sourceTraString); 
      MessagePublish messagePublish= new MessagePublish(); 
      //SourceTransaction sourceTransaction= new SourceTransaction(); 
      messagePublish.publishTPSMessage(sourceTransaction); 
     } 
    } 
} 

マイServlet.xml

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
     xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd 
     http://cxf.apache.org/jaxws 
     http://cxf.apache.org/schemas/jaxws.xsd 
     http://cxf.apache.org/jaxrs 
     http://cxf.apache.org/schemas/jaxrs.xsd"> 

    <import resource="classpath:config-properties.xml" /> 
    <import resource="classpath:datasource.xml" /> 
    <import resource="classpath:transaction-manager.xml" /> 
    <import resource="classpath:jmx.xml" /> 

    <context:component-scan base-package="com.imosAdapter" /> 
    <bean class="com.oasis.services.messaging.config.MessagingServicesConfig" /> 
    <bean class="com.oasis.services.messaging.config.DefaultMessagingConnectorsConfig" /> 
    <bean class="com.oasis.services.messaging.config.LoaderConfig" /> 
    <context:annotation-config /> 
    <bean 
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <value>/config/oasis-component.properties</value> 
     </property> 
    </bean> 
</beans> 

スローされた例外:

Exception in thread "main" java.lang.NullPointerException 
at com.imosAdapter.tps.events.MessagePublish.publishTPSMessage(MessagePublish.java:46) 
at com.imosAdapter.tps.TPSHandler.main(TPSHandler.java:64) 

こっちの問題は何ですか?誰も私にこれを助けることができますか?私はここで何が欠けているのですか?

+0

メインクラスよりも上位のレベルの 'MessagingConfig'ファイルはありますか? '@ ComponentScan'アノテーションを使用すると、そのアノテーションを持つクラスの同じまたはより低いレベルにあるパッケージだけをスキャンします。私が記述したようなものであれば、 '@Import(MessagingConfig.class)'を試してみるか、 '@ ComponentScan'が見るところのどこかに' MessagingConfig'ファイルを置いてください。 (PS:Spring Bootを使用する場合、デフォルトで@ @ ComponentScanを使用しています) –

+0

@ er-han ComponentScanが読むことができるどこかでMessagingConfigを追加しようとしました。しかし、まだNULLポインタの例外が発生しています。私は春のブートを使用していません –

+0

@MohamedSafiはこれが誤字です: '@Value(" $ {$ {user} ")'? –

答えて

0

サーブレットを作成せずにサーバーとして実行する場合は、アプリケーションの開始時にSpringコンテキストを初期化する必要があります。

Using Spring in a standalone application

関連する問題