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
Freigeben: 2024-02-11 20:10:08
nach vorne
1417 Leute haben es durchsucht

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
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage