Я пытаюсь интегрировать основанный на SOAP веб-сервис для анализа файлов. он принимает предопределенное сообщение SOAP с содержимым в формате base64binary.
Он отлично работает с небольшими файлами, например размером 100 КБ, но выдает ошибку при ответе для файлов большего размера с сообщением Входной текст содержит 42374 токена, превышая ограничение20000. .
вот мой код конфигурации
public WebServiceTemplate createWebServiceTemplate() throws Exception {
SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance());
WebServiceTemplate webServiceTemplate = new WebServiceTemplate(messageFactory);
messageFactory.afterPropertiesSet();
Jaxb2Marshaller marshaller = createMarshaller();
webServiceTemplate.setDefaultUri(this.properties.getUrl());
webServiceTemplate.setMarshaller(marshaller);
webServiceTemplate.setUnmarshaller(marshaller);
webServiceTemplate.setMessageSender(createMessageSender());
webServiceTemplate.afterPropertiesSet();
return webServiceTemplate;
}
@Bean
public Jaxb2Marshaller createMarshaller() throws Exception {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.xxx.client.xxx.api");
marshaller.afterPropertiesSet();
return marshaller;
}
@Bean
public HttpComponentsMessageSender createMessageSender() {
return new HttpComponentsMessageSender(createHttpClient());
}
@Bean
public HttpClient createHttpClient() {
List<Header> headers = new ArrayList<>();
String userAndPassword = String.format("%s:%s", this.properties.getUsername(), this.properties.getPassword());
String encodeUserPassword = Base64.getEncoder().encodeToString(userAndPassword.getBytes());
BasicHeader authHeader = new BasicHeader("Authorization", "Basic " + encodeUserPassword);
headers.add(authHeader);
return HttpClients.custom()
.addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor())
.addInterceptorLast(new RequestDefaultHeaders(headers))
.build();
}
вот звонок на веб-сервис
JAXBElement result = (JAXBElement) webServiceTemplate.marshalSendAndReceive(this.properties.getUrl(), parse);
parse isобъект мыла, включая содержимое как base64binary