Spring Autowired в веб-сервисе не работает при тестировании

1

Я пытаюсь настроить клиента веб-службы следующим образом:

@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;
    }
}

Я создал классы домена из WSDL с помощью JABX и создал конечную точку службы следующим образом:

@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);
        }
    }

Что мне не хватает? Благодарю.

Теги:
spring
web-services

2 ответа

2
Лучший ответ

Кажется, вы не хватает

@RunWith(SpringJUnit4ClassRunner.class)

из вашего тестового класса. В противном случае вы работаете со стандартным тестовым бегуном JUnit, и Spring не задействован.

  • 1
    Спасибо за вклад, который действительно отсутствовал. Тем не менее, я все еще не могу выполнить тест еще. Правильно ли пытаться автоматически подключить объект WebServiceTemplate ? В режиме отладки я заметил, что у моего объекта AccountEndpoint есть два объекта этого класса (один я создаю, а другой унаследован от предполагаемого WebServiceGatewaySupport ). В любом случае, в обеих конфигурациях я получаю исключение IllegalArgumentException: 'uri' must not be empty исключением at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive методе at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive .
  • 1
    @Pedro Извините, я не знаю Spring API WS. Вы можете задать новый вопрос.
-2

Не объявляйте переменную WebServiceTemplate. Вместо этого используйте getWebServiceTemplate(), унаследованный от WebServiceGatewaySupport.

  • 1
    Пожалуйста, добавьте название, а также любую вспомогательную информацию, которую вы можете предоставить; код сообщения об ошибках и где произошла ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню