Spring Boot send Request to Soap client: client.WebServiceTransportException: Unauthorized [401]

27 views Asked by At

I send self-signed certificate in soap client header, I set certificate to java cacerts folder because java doesn't recognize certificates which signed by unknown author or self-signed. I to run project in intellij idea in windows server, then request will be successfull. But when I deploy tomcat and send request the same API, throw client: client.WebServiceTransportException: Unauthorized [401]. And another interesting thing is that I run project in Linux server, requests will be successfully approximately 5-10 minutes, then throw client.WebServiceTransportException: Unauthorized [401].

@Configuration
@RequiredArgsConstructor
public class AppConfig {

    @Value("${app.ex.ws.keystore-location}")
    private String keyStoreLocation;
    @Value("${app.ex.ws.keystore-password}")
    private String keyStorePassword;
    @Value("${app.ex.ws.cacert-location}")
    private String cacertLocation;
    @Value("${app.ex.ws.cacert-password}")
    private String cacertPassword;

    @Bean
    public void cert() {
        System.setProperty("javax.net.ssl.keyStore", keyStoreLocation);
        System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
        System.setProperty("javax.net.ssl.trustStore", cacertLocation);
        System.setProperty("javax.net.ssl.trustStorePassword", cacertPassword);
    }
}

@Slf4j
@Configuration
@RequiredArgsConstructor
public class GPPPaymentClientConfig {

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.ex.ex.exawsdl");
        return marshaller;
    }

    @Bean
    public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder, Jaxb2Marshaller marshaller) throws Exception {

        return builder
                //        setDefaultUri("https://services.ex.az/WebPortalVC/GPPEx***");
                .setDefaultUri("https://testservices.ex.az/WebPortalVC/GPPEx***")
                .setMarshaller(marshaller)
                .setUnmarshaller(marshaller)
                .build();
    }
}
@Slf4j
@Service
@RequiredArgsConstructor
public class GPPPaymentClient extends WebServiceGatewaySupport {
    private final WebServiceTemplate webServiceTemplate;
    private final Jaxb2Marshaller marshaller;

    public InitiatePaymentResponse InitiatePayment(MessageHeader messageHeader, InitiatePayment InitiationRequest) {

        JAXBElement<InitiatePaymentResponse> object = (JAXBElement<InitiatePaymentResponse>) webServiceTemplate.marshalSendAndReceive(InitiationRequest, webServiceMessage -> {
            try {
                String namespaceSer = "http://services.ws.ex.sinam.net/";
                SoapMessage soapMessage = (SoapMessage) webServiceMessage;
                SoapHeader header = soapMessage.getSoapHeader();
                header.addNamespaceDeclaration("ser", namespaceSer);

                ObjectFactory objectFactory = new ObjectFactory();
                MessageHeader soapHeader = objectFactory.createMessageHeader();
                soapHeader.setUserID(messageHeader.getUserID());
                soapHeader.setReceiverID(messageHeader.getReceiverID());
                soapHeader.setTransactionID(messageHeader.getTransactionID());
                soapHeader.setMessageDateTime(messageHeader.getMessageDateTime());
                JAXBElement<MessageHeader> headerElement = new JAXBElement<>(new QName("http://services.ws.ex.sinam.net/", "messageHeader"), MessageHeader.class, null, soapHeader);
                marshaller.marshal(headerElement, header.getResult());
                JAXBElement<InitiatePayment> bodyElement = new JAXBElement<>(new QName("http://vircab.portal.ws.ex.sinam.net/", "InitiatePayment"), InitiatePayment.class, null, InitiationRequest);
                marshaller.marshal(bodyElement, soapMessage.getPayloadResult());

            } catch (Exception e) {
                log.info(e.toString());
            }
        });

        System.out.println(object.getValue());
        log.info(object.getValue() + "");
        return object.getValue();
    }
}
2024-02-01T22:39:02.007+04:00 ERROR 13272 --- [io-8585-exec-12] o.s.b.w.servlet.support.ErrorPageFilter  : Forwarding to error page from request [/payment/ex] due to exception [Unauthorized [401]]

org.springframework.ws.client.WebServiceTransportException: Unauthorized [401]
    at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:666) ~[spring-ws-core-4.0.10.jar:na]
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:588) ~[spring-ws-core-4.0.10.jar:na]
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:539) ~[spring-ws-core-4.0.10.jar:na]
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:391) ~[spring-ws-core-4.0.10.jar:na]
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:385) ~[spring-ws-core-4.0.10.jar:na]
    at com.ex.ex.cabinetwsdl.client.ExPaymentClient.InitiatePayment(ExPaymentClient.java:38) ~[classes/:0.0.1-SNAPSHOT]
    at com.ex.ex.invoice.service.impl.InvoiceServiceImpl.initatePayment(InvoiceServiceImpl.java:63) ~[classes/:0.0.1-SNAPSHOT]
    at com.ex.ex.invoice.controller.PaymentController.sendEx(PaymentController.java:25) ~[classes/:0.0.1-SNAPSHOT]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-6.0.16.jar:6.0.16]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[servlet-api.jar:6.0]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.16.jar:6.0.16]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[servlet-api.jar:6.0]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[catalina.jar:10.1.18]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-websocket.jar:10.1.18]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[catalina.jar:10.1.18]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.16.jar:6.0.16]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.16.jar:6.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[catalina.jar:10.1.18]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.16.jar:6.0.16]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.16.jar:6.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[catalina.jar:10.1.18]
    at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:124) ~[spring-boot-3.1.8.jar:3.1.8]
    at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:99) ~[spring-boot-3.1.8.jar:3.1.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.16.jar:6.0.16]
    at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:117) ~[spring-boot-3.1.8.jar:3.1.8]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[catalina.jar:10.1.18]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.16.jar:6.0.16]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.16.jar:6.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[catalina.jar:10.1.18]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[catalina.jar:10.1.18]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[catalina.jar:10.1.18]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673) ~[catalina.jar:10.1.18]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:10.1.18]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) ~[catalina.jar:10.1.18]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-coyote.jar:10.1.18]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-coyote.jar:10.1.18]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-coyote.jar:10.1.18]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-coyote.jar:10.1.18]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-coyote.jar:10.1.18]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-util.jar:10.1.18]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-util.jar:10.1.18]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:10.1.18]
    at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]

0

There are 0 answers