HTTP 503 получен с помощью клиента, созданного с помощью Spring WS - PullRequest
0 голосов
/ 03 августа 2020

У меня есть клиент веб-службы SOAP, созданный с помощью Spring внутри WAR, развернутый в Tomcat 8.0.48, который работает нормально.

public class AlfrescoClient extends WebServiceGatewaySupport
{

    private static final Logger LOGGER = LoggerFactory.getLogger(AlfrescoClient.class);

    @Value("${alfresco.user}")
    private String username;

    @Value("${alfresco.password}")
    private String password;

    @Value("${alfresco.system}")
    private String system;

    public ReturnDTO saveFile(String fileName, String content, String metadata)
    {

        SaveFile request = new SaveFile();
        request.setUsername(username);
        request.setPassword(password);
        request.setSystem(system);
        request.setName(fileName);
        request.setContent(content);
        request.setMetadata(metadata);

        LOGGER.info("saveFile {}", fileName);
        JAXBElement<SaveFileResponse> response = (JAXBElement<SaveFileResponse>) getWebServiceTemplate().marshalSendAndReceive(request);
        ReturnDTO returnDto = response.getValue().getReturn();
        if(returnDto.getIdError() != null)
        {
            LOGGER.error("On alfresco operation. Code {} {}", returnDto.getIdError(), returnDto.getDescription());
            throw new AlfrescoException("Alfresco " + returnDto.getDescription());
        }
        return returnDto;
    }
}

@Configuration
public class WSConfiguration
{

    @Value("${alfresco.url.wsdl}")
    private String urlAlfresco;

    @Bean
    public AlfrescoClient alfrescoClient(Jaxb2Marshaller marshaller)
    {

        AlfrescoClient client = new AlfrescoClient();
        client.setDefaultUri(urlAlfresco);
        client.setMarshaller(marshaller);
        client.setUnmarshaller(marshaller);
        return client;
    }

    @Bean
    public Jaxb2Marshaller marshaller()
    {

        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setPackagesToScan("es.cic.apl.model.alfresco");
        return marshaller;
    }
}

Однако URL-адрес конечной точки, где я отправка сообщений изменилась, поэтому я изменил свойство alfresco.url.wsdl, и теперь я получаю ошибку HTTP 503:

31-07-2020 07:00:14 [AplScheduler-3] ERROR es.cic.apl.service.incidences.impl.AnomalyLetterSentServiceImpl - Error uploading card 814307.xml.pdf to alfresco
org.springframework.ws.client.WebServiceTransportException: Service Temporarily Unavailable [503]
      at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:699)
      at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:609)
      at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
      at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)
      at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:383)
      at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:373)
      at es.cic.viesgo.apl.ws.client.AlfrescoClient.saveFile(AlfrescoClient.java:69)
      at es.cic.viesgo.apl.service.incidences.impl.AnomalyLetterSentServiceImpl.sendAnomalyLetterToAlfresco(AnomalyLetterSentServiceImpl.java:79)
      at sun.reflect.GeneratedMethodAccessor407.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:497)
      at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
      at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
      at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
      at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
      at com.sun.proxy.$Proxy809.sendAnomalyLetterToAlfresco(Unknown Source)
      at es.cic.viesgo.apl.integrator.scheduler.SchedulerLetterGenerator.uploadLetterToAlfresco(SchedulerLetterGenerator.java:78)
      at es.cic.viesgo.apl.integrator.scheduler.SchedulerLetterGenerator.runScheduler(SchedulerLetterGenerator.java:42)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:497)
      at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
      at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
      at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)

Я предположил, что проблема была на сервере (чего я не есть контроль), но я отправил запрос с сервера, на котором установлен мой клиент (с помощью curl), и он работал нормально. Отправленный мной запрос был похож на запрос, отправленный Spring:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
        <ns1:saveFile xmlns:ns1="http://alfresco.model.apl.cic.es/">
            <usuario>WS_APL</usuario>
            <clave>WS_APL_PRE</clave>
            <nombre>test_carta.xml.pdf</nombre>
            <contenido>test</contenido>
            <sistema>SAPL</sistema>
            <metadatos>test_carta</metadatos>
        </ns1:saveFile>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Команда curl, которую я использовал, была следующей:

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction:saveFile" --data @request_alfresco.xml https://10.112.130.231/WS_ALF_APP/WS_ALF_APP

Я запутался, потому что странно, что все сработало отлично, отправив запрос с помощью curl и отправив аналогичный запрос с клиентом Spring. Я получаю ошибку HTTP 503.

Я не знаю, что мне не хватает или в чем проблема. Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...