У меня есть клиент веб-службы 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.
Я не знаю, что мне не хватает или в чем проблема. Есть идеи?