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.
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); }
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!