Heim >Java >Warum stoppt der SOAP-Dienst (jax-ws) nach einiger Zeit und löst „WebServiceTransportException: Unauthorized' auf dem Linux-Betriebssystem aus?

Warum stoppt der SOAP-Dienst (jax-ws) nach einiger Zeit und löst „WebServiceTransportException: Unauthorized' auf dem Linux-Betriebssystem aus?

PHPz
PHPznach vorne
2024-02-11 20:10:081385Durchsuche

PHP Editor Strawberry ist hier, um eine häufig gestellte Frage zu beantworten: Warum stoppt der SOAP-Dienst (jax-ws) nach einer gewissen Zeit und löst eine WebServiceTransportException: Unauthorized-Ausnahme aus, wenn er auf dem Linux-Betriebssystem verwendet wird? Dieses Problem kann durch Berechtigungsprobleme verursacht werden. Unter Linux muss der SOAP-Dienst möglicherweise auf bestimmte Dateien oder Verzeichnisse zugreifen, verfügt jedoch nicht über ausreichende Berechtigungen, um darauf zuzugreifen, was dazu führt, dass der Dienst beendet wird. Die Lösung dieses Problems besteht darin, sicherzustellen, dass der SOAP-Dienst über ausreichende Berechtigungen für den Zugriff auf die erforderlichen Dateien und Verzeichnisse verfügt. Dieses Problem kann gelöst werden, indem die Berechtigungen der Dateien und Verzeichnisse geändert werden oder sichergestellt wird, dass der SOAP-Dienst einen Benutzer mit ausreichenden Berechtigungen verwendet.

Frageninhalt

Ich habe eine Seifenanwendung entwickelt und sende Anfragen an die erforderlichen Dienste. Das Problem ist, dass nach einiger Zeit eine Ausnahme ausgelöst wird:

Stack-Trace:

servlet.service() for servlet [dispatcherservlet] in context with path [/api] threw exception [request processing failed: org.springframework.ws.client.webservicetransportexception: unauthorized [401]] with root cause

org.springframework.ws.client.webservicetransportexception: unauthorized [401]
    at org.springframework.ws.client.core.webservicetemplate.handleerror(webservicetemplate.java:665) ~[spring-ws-core-4.0.2.jar!/:na]
    at org.springframework.ws.client.core.webservicetemplate.dosendandreceive(webservicetemplate.java:587) ~[spring-ws-core-4.0.2.jar!/:na]
    at org.springframework.ws.client.core.webservicetemplate.sendandreceive(webservicetemplate.java:538) ~[spring-ws-core-4.0.2.jar!/:na]
    at

Diese Funktion funktioniert unter Windows, aber unter Linux (Rocky Linux) funktioniert sie nach einiger Zeit (5-10 Minuten) nicht mehr.

Dies ist meine Konfiguration (einige Informationen wurden geändert, wie z. B. die URL):

@configuration
@requiredargsconstructor
public class customerpaymentclientconfig {

    @bean
    public jaxb2marshaller marshaller() {
        jaxb2marshaller marshaller = new jaxb2marshaller();
        marshaller.setcontextpath("com.example.wsdl");
        return marshaller;
    }

    @bean
    public webservicetemplate webservicetemplate(webservicetemplatebuilder builder, jaxb2marshaller marshaller) throws exception {

        return builder
                .setdefaulturi("https://service.example.com/webportalvc/paymentws")
                .setmarshaller(marshaller)
                .setunmarshaller(marshaller)
                .build();
    }
}

Das ist mein Kunde

@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.payment.example.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.payment.example.net/", "messageheader"), messageheader.class, null, soapheader);
                marshaller.marshal(headerelement, header.getresult());
                jaxbelement<initiatepayment> bodyelement = new jaxbelement<>(new qname("http://test.ws.payment.example.net/", "initiatepayment"), initiatepayment.class, null, initiationrequest);
                marshaller.marshal(bodyelement, soapmessage.getpayloadresult());

            } catch (exception e) {
                log.info(e.tostring());
            }
        });
        return object.getvalue();
    }
}

Hier füge ich Eigenschaften hinzu, um dem SSL-Zertifikat aus dem Truststore zu vertrauen

@Bean
public void addProperties() {
    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);
}

Lösung

Ich hatte dieses Problem vor ein paar Jahren. Soweit ich weiß, liegt das Problem bei der JDK-Version. Ich habe das JDK auf eine andere Version (Amazon Coretto) geändert und alles hat gut funktioniert.

Das obige ist der detaillierte Inhalt vonWarum stoppt der SOAP-Dienst (jax-ws) nach einiger Zeit und löst „WebServiceTransportException: Unauthorized' auf dem Linux-Betriebssystem aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen

In Verbindung stehende Artikel

Mehr sehen