簡體   English   中英

測試時Web Service中的Spring Autowired無法正常工作

[英]Spring Autowired in Web Service not working when tested

我正在嘗試像這樣配置Web服務客戶端:

@EnableSwagger
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableWebMvc
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

使用第二個WS的配置類:

@Configuration
@ComponentScan(basePackages = {"org.myco.myproj.core.endpoints"})
public class WebServiceConfig {

    @Bean
    public Jaxb2Marshaller marshaller() throws Exception {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("org.myco.myproj.core.webservices");
        return marshaller;
    }

    @Bean
    public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);
        webServiceTemplate.setDefaultUri("http://localhost:11000/ws/");
        return webServiceTemplate;
    }

    @Bean
    public AccountEndpoint accountEndpoint(Jaxb2Marshaller marshaller, WebServiceTemplate webServiceTemplate) {
        AccountEndpoint client = new AccountEndpoint(webServiceTemplate);
        client.setDefaultUri("http://localhost:11000/ws");
        client.setMarshaller(marshaller);
        client.setUnmarshaller(marshaller);
        return client;
    }
}

我已經使用JABX從WSDL生成了域類,並創建了一個服務端點,如下所示:

@Service
public class AccountEndpoint extends WebServiceGatewaySupport {

    private static final Logger logger = Logger.getLogger(String.valueOf(AccountEndpoint.class));

    private WebServiceTemplate webServiceTemplate;

    public AccountEndpoint(WebServiceTemplate webServiceTemplate) {
        this.webServiceTemplate = webServiceTemplate;
    }

    public GetAccountResponse getAccount(long accountAgency, long accountNumber) {
        GetAccountRequest request = new GetAccountRequest();
        request.setAccountAgency(accountAgency);
        request.setAccountNumber(accountNumber);

        GetAccountResponse response = (GetAccountResponse)
                webServiceTemplate.marshalSendAndReceive(request);

        return response;
    }
}

我創建了一個簡單的測試來檢查它是否正在運行,該測試在自動裝配字段返回NullPointerException

 @ContextConfiguration("org.myco.myproj.config.WebServiceConfig")
    public class AccountEndpointTest extends TestCase {

        @Autowired
        private AccountEndpoint accountEndpoint;

        public void setUp() throws Exception {
            super.setUp();
        }

        @Test
        public void testGetAccount() throws Exception {

            GetAccountResponse response = accountEndpoint.getAccount(12, 16);

            assertNotNull(response);
        }
    }

我想念的是什么? 謝謝。

好像你失蹤了

@RunWith(SpringJUnit4ClassRunner.class)

從您的測試班。 否則,您將使用默認的JUnit測試運行程序運行,並且不涉及Spring。

不要聲明變量WebServiceTemplate。 改用從WebServiceGatewaySupport繼承的getWebServiceTemplate()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM