Я использую Spring Boot для вызова веб-службы SOAP и отправляю файл в конверте.Я использую JAXB для создания XML.Когда я отправляю запрос на сервер, он возвращает ошибку, которая, я думаю, не приходит с конечной точки:
Ошибка запуска ApplicationContext.Чтобы отобразить отчет об условиях, перезапустите приложение с включенной отладкой.2018-12-05 09:57:47 |ОШИБКА |главная |work.boot.SpringApplication: 858 |Сбой при запуске приложенияspringframework.boot..varengold.cdl.mvp.MvpApplication.main (MvpApplication.java:21) Причина: org.springframework.ws.soap.client.SoapFaultClientException: ошибка: данные HTTP должны быть сжаты; Content-Encoding должен быть установлен в gzip
Как установить кодировку содержимого в gzip?
Это мой код:
@SpringBootApplication
@Slf4j
public class MvpApplication {
public static void main(String[] args) {
SpringApplication.run(MvpApplication.class, args);
}
@Bean
CommandLineRunner lookup(SOAPConnector soapConnector , Config config) {
return args -> {
SubmitDATTRA request = new SubmitDATTRA();
FileDataSource ds = new FileDataSource(config.getReportFilePath() );
request.setDatei(new DataHandler(ds));
SubmitDATTRAResponse response =(SubmitDATTRAResponse) soapConnector.callWebService(Config.TEST_URL, request);
};
}
}
тип содержимого (sysout): приложение / октет-поток.Файл представляет собой файл gzip.Я думаю, что я близок к решению, но я не знаю, как сказать Spring, что он должен использовать content-Encoding = gzip
Вот SOAPConnector
import javax.jws.WebService;
import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
public class SOAPConnector extends WebServiceGatewaySupport {
public Object callWebService(String url, Object request){
return getWebServiceTemplate().marshalSendAndReceive(url, request);
}
}
Мой класс конфигурации:
@Configuration
@Getter
public class Config {
public static final String PROD_URL = "https://portal.mvp.bafin.de:444/services/ws/a26mifir";
public static final String TEST_URL = "https://portal.mvp.bafin.de:444/services/ws/t_a26mifir";
@Value("${report.file.path}")
private String reportFilePath;
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("de.acme.ws");
return marshaller;
}
@Bean
public SOAPConnector soapConnector(Jaxb2Marshaller marshaller) {
SOAPConnector client = new SOAPConnector();
client.setDefaultUri(TEST_URL);
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}
}
Я читал и вдохновлялся этой статьей: https://howtodoinjava.com/spring-boot/spring-soap-client-webservicetemplate/