2014-09-01 44 views
1

我试图来配置这样的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); 
     } 
    } 

什么我失踪?谢谢。

回答

2

好像你是从你的测试类失踪

@RunWith(SpringJUnit4ClassRunner.class) 

。否则,您正在使用默认的JUnit测试运行器运行,并且不涉及Spring。

+1

感谢您的输入,这真的很缺失。但是,我仍然无法运行测试。尝试自动装载WebServiceTemplate对象是正确的吗?在调试模式下,我注意到我的AccountEndpoint对象有两个对象(一个是我创建的,一个是我从WebServiceGatewaySupport继承而来的)。无论如何,在两个配置中,我都会收到一个IllegalArgumentException异常:在org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive方法中'uri'一定不能为空'异常。 – 2014-09-02 14:44:57

+1

@Pedro对不起,我不知道Spring的WS API。你可能想问一个新的问题。 – 2014-09-02 14:51:14

-1

不声明变量WebServiceTemplate。改为使用从WebServiceGatewaySupport继承的getWebServiceTemplate()。

+1

请添加标题以及您可以提供的任何支持信息;代码错误消息以及遇到错误的位置。 – 2016-04-15 13:03:59