L'éditeur PHP Strawberry est là pour répondre à une question courante : pourquoi le service SOAP (jax-ws) s'arrête-t-il après un certain temps et lève-t-il une WebServiceTransportException : exception non autorisée lors de son utilisation sur le système d'exploitation Linux ? Ce problème peut être dû à des problèmes d'autorisation. Sous Linux, le service SOAP peut avoir besoin d'accéder à certains fichiers ou répertoires, mais ne dispose pas des autorisations suffisantes pour y accéder, ce qui entraîne l'arrêt du service. La solution à ce problème consiste à garantir que le service SOAP dispose des autorisations suffisantes pour accéder aux fichiers et répertoires requis. Ce problème peut être résolu en modifiant les autorisations des fichiers et des répertoires ou en garantissant que le service SOAP utilise un utilisateur disposant des autorisations suffisantes.
J'ai développé une application savon et j'envoie les demandes aux services requis. Le problème est qu'après un certain temps, une exception est levée :
Trace de pile :
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
Cette fonctionnalité fonctionne sous Windows mais sous Linux (rocky linux), elle cesse de fonctionner après un certain temps (5 à 10 minutes).
Voici ma configuration (certaines informations ont été modifiées, comme l'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(); } }
Voici mon client
@service @requiredargsconstructor public class gpppaymentclient extends webservicegatewaysupport { private final webservicetemplate webservicetemplate; private final jaxb2marshaller marshaller; public initiatepaymentresponse initiatepayment(messageheader messageheader, initiatepayment initiationrequest) { jaxbelement object = (jaxbelement) 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 headerelement = new jaxbelement<>(new qname("http://services.ws.payment.example.net/", "messageheader"), messageheader.class, null, soapheader); marshaller.marshal(headerelement, header.getresult()); jaxbelement 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(); } }
Ici, j'ajoute des propriétés pour faire confiance au certificat SSL du truststore
@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); }
J'ai eu ce problème il y a quelques années. D'après ce que j'ai compris, le problème vient de la version JDK. J'ai changé le JDK vers une autre version (Amazon Coretto) et tout a bien fonctionné.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
css désactiver l'événement de clic
Que faire si Linux demande Aucun fichier ou répertoire de ce type lors de l'exécution d'un fichier
Sur quelle touche dois-je appuyer pour récupérer lorsque je ne parviens pas à taper sur le clavier de mon ordinateur ?
Mot de passe par défaut du routeur
Classement des prestataires de services CDN étrangers
Comment résoudre la violation d'accès
Résumé du plug-in du navigateur Firefox
erreur MySQL 10060