[英]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.