SPRING-WS Маршаллер не зарегистрирован.Вызвано SPRING IOC - PullRequest
0 голосов
/ 08 июня 2018

У меня есть клиентский сервис SOAP, который работает нормально.Заголовки SOAP и запрос обрабатываются в SOAPConnector class.

public class SOAPConnector extends WebServiceGatewaySupport {

    public Object callWebService(String url, Object request) {
        // CREDENTIALS and REQUEST SETTINGS...
        return getWebServiceTemplate().marshalSendAndReceive(url, request, new SetHeader(requestHeader));
    }
}

. Я получаю запрошенные данные, как только вызываю службу (SoapConnector) в main Class.

@SpringBootApplication
public class SpringSoapSecurityDemoApplication {

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

    @Bean
    public CommandLineRunner lookup(SOAPConnector soapConnector) {
        return args -> {
            String hotelCode = "****";
            FutureBookingSummaryRequest request = new FutureBookingSummaryRequest();
            FetchBookingFilters additionalFilters = new FetchBookingFilters();
           // Some additionalFilters settings
            request.setAdditionalFilters(additionalFilters);
            FutureBookingSummaryResponse response = (FutureBookingSummaryResponse) soapConnector
                    .callWebService("MY WSDL URL", request);
            System.err.println(response.getHotelReservations());
        };
    }
}
*.1008 * ТАК ЧТО ЭТО РАБОТАЕТ В КАЧЕСТВЕ.

Затем я попытался создать отдельный сервис для предыдущего запроса.BookingService.java

public class BookingService extends WebServiceGatewaySupport {
    @Autowired
    SOAPConnector soapConnector;

    public String getReservations() {
        String hotelCode = "****";
        FutureBookingSummaryRequest request = new FutureBookingSummaryRequest();
        FetchBookingFilters additionalFilters = new FetchBookingFilters();
       // Some additionalFilters settings
        request.setAdditionalFilters(additionalFilters);
        FutureBookingSummaryResponse response = (FutureBookingSummaryResponse) soapConnector
                .callWebService("MY WSDL URL", request);
        System.err.println(response.getHotelReservations());
    };}

Чтобы добавить SOAPCONNECTOR, я добавил @Service к классу SOAPCONNECTOR и @Autowired SOAPConnector soapConnector к сервису, вызывающему его
Теперь, когда я вызываю созданный BookingService в основном классе

@SpringBootApplication
public class SpringSoapSecurityDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringSoapSecurityDemoApplication.class, args);
        BookingService bookingService = new BookingService();
        bookingService.getReservations();
    } 
}

SOAPCONNECTOR перестает работать и я получаю следующую ошибку:

Маршаллер не зарегистрирован.Проверьте конфигурацию WebServiceTemplate.

Я почти уверен, что эта проблема связана с SPRING IOC, внедрением зависимостей .. Поскольку служба SOAP хорошо настроена и работает ..

ПримечаниеЯ проверил этот похожий вопрос Использование ошибки веб-службы SOAP (маршаллер не зарегистрирован. Проверьте конфигурацию WebServiceTemplate) , но @Autowired не решил проблему.Любая помощь?

1 Ответ

0 голосов
/ 08 июня 2018

В случае, если кто-то столкнулся с той же проблемой, оказалось, что я пропустил аннотацию @Configuration в классе конфигурации beans.Правильный должен выглядеть следующим образом:

    @Configuration
public class ConsumerConfig {

    private String ContextPath = "somePackage";
    private String DefaultUri = "someWsdlURI";

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        // this package must match the package in the <generatePackage> specified in
        // pom.xml
        marshaller.setContextPath(ContextPath);
        return marshaller;
    }

    @Bean
    public SOAPConnector checkFutureBookingSummary(Jaxb2Marshaller marshaller) {
        SOAPConnector client = new SOAPConnector();
        client.setDefaultUri(DefaultUri);
        client.setMarshaller(marshaller);
        client.setUnmarshaller(marshaller);
        return client;
    }
...