弹簧自动装配Autowired在Web服务测试时不工作
问题描述:
我试图来配置这样的Web服务客户端:弹簧自动装配Autowired在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;
}
}
我创建了一个SIMPL Ë测试,以检查此运行,这是在自动装配Autowired场返回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()。
+1
请添加标题以及您可以提供的任何支持信息;代码错误消息以及遇到错误的位置。 – 2016-04-15 13:03:59
感谢您的输入,这真的很缺失。但是,我仍然无法运行测试。尝试自动装载WebServiceTemplate对象是正确的吗?在调试模式下,我注意到我的AccountEndpoint对象有两个对象(一个是我创建的,一个是我从WebServiceGatewaySupport继承而来的)。无论如何,在两个配置中,我都会收到一个IllegalArgumentException异常:在org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive方法中'uri'一定不能为空'异常。 – 2014-09-02 14:44:57
@Pedro对不起,我不知道Spring的WS API。你可能想问一个新的问题。 – 2014-09-02 14:51:14