1

私はこの問題で立ち往生しており、何が間違っているのかわかりません。私はSOAPWSを消費しています&そのWebサービスを呼び出すと例外が発生します&WebServiceTemplateオブジェクトがnullであることを確認しましたが、コンストラクターで初期化されました. sendNpsReminder 操作に入った時点で、null に設定されます。理由がわからない。誰か助けてください。

Pom.Xml

        <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-core</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>

Java クラス:

 public class ManageCustomerService extends WebServiceGatewaySupport {

    private static final CDLoggerInterface logger = CDLogger
            .getLogger(ManageCustomerService.class);

    private WebServiceTemplate manageContactsWSTemplate;



    public ManageCustomerService()
    {

    }
    public  ManageCustomerService(WebServiceTemplate manageContactsWSTemplateObj) {
        this.manageContactsWSTemplate = manageContactsWSTemplateObj;
            logger.debug("Constructor Setting the WebServieTemplte "+manageContactsWSTemplate);
    }



public SendNPSReminderResponseType sendNpsReminder()    {

    logger.debug("Calling now with new JOB="+manageContactsWSTemplate);

    SendNPSReminderRequestType sendNPSReminderRequest = new SendNPSReminderRequestType();
        Contact Contact = new Contact();                    
        Contact.setPhone(new BigInteger("XYZ"));  
        sendNPSReminderRequest.setCountryCode(ABC); 
        sendNPSReminderRequest.setContact(Contact);
        sendNPSReminderRequest.setCustomerNumber("23239220");

        if(manageContactsWSTemplate != null)
        {
            SendNPSReminderResponseType response = (SendNPSReminderResponseType)manageContactsWSTemplate.marshalSendAndReceive("http://tsi-vip-osbdev.canaldigital.com:7111//GSD_ManageCustomer_v2/ProxyService/Proxy/GSD_ManageCustomer_PS?wsdl", sendNPSReminderRequest, new SoapActionCallback("http://canaldigital.com/tsi/Schema/GSD/GSD_ManageCustomer/v2/GSD_ManageCustomer_SendNPSReminder"));  
            logger.info("Response for SendNpsReminder is : "+response.getResponseCode());
        }
        else{
            logger.debug("manageContactsWSTemplate is null");   
        }
    return xyz; 
}

ApplicationContext.xml

<oxm:jaxb2-marshaller id="manageContactMarshaller"
    contextPath="packagename" />
<oxm:jaxb2-marshaller id="manageContactUnmarshaller"
    contextPath="packagename" />

<bean name="manageContactsWSTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory" />
     <property name="defaultUri" value="http://tsi.com:7111/GSD_ManageCustomer_v1?WSDL" />  
    <property name="marshaller" ref="manageContactMarshaller" />
    <property name="unmarshaller" ref="manageContactUnmarshaller" />

</bean> 

<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">

</bean>
<bean id="manageContactService" class="com.canaldigital.tsi.managecontacts.serviceprovider.ManageCustomerService">

    <constructor-arg ref="manageContactsWSTemplate" />

</bean> 
<bean id="CDCommonTasksJob"
    class="com.canaldigital.tsi.managecontacts.serviceprovider.ManageCustomerService">
</bean>

<!-- Scheduler -->
<task:scheduled-tasks>
    <task:scheduled ref="CDCommonTasksJob" method="sendNpsReminder"
        cron="0 0/2 * * * *" />
</task:scheduled-tasks>
4

1 に答える 1

1

spring-context .xml から、同じクラス :ManageCustomerService の 2 つの Bean を要求しているように見えます。最初の 1 つはコンストラクターを介して呼び出され、有効な Spring Bean を WebServiceTemplate として持ちますが、2 つ目 (CDCommonTasksJob)デフォルトのコンストラクターで呼び出されるため、WebServiceTemplate への参照は null になります。したがって、タスクスケジューラで、 webServiceTemplate インスタンスを持たない Bean を自動配線します

問題は、同じクラスの 2 つの Bean を作成する理由です。

それでも 2 つの Bean が必要な場合は、行を置き換えるだけです

<bean id="CDCommonTasksJob" class="com.canaldigital.tsi.managecontacts.serviceprovider.ManageCustomerService"> </bean>

と :

<bean id="CDCommonTasksJob" class="com.canaldigital.tsi.managecontacts.serviceprovider.ManageCustomerService"> <constructor-arg ref="manageContactsWSTemplate" /> </bean>

于 2015-11-13T11:50:01.717 に答える