Spring WebServiceTemplate: превышен предел входного токена при ответе - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь интегрировать основанный на 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

...