Maison> Java> le corps du texte

Pourquoi le service SOAP (jax-ws) s'arrête-t-il après un certain temps et renvoie WebServiceTransportException : Unauthorized ] sur le système d'exploitation Linux ?

PHPz
Libérer: 2024-02-11 20:10:08
avant
1251 Les gens l'ont consulté

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.

Contenu des questions

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
Copier après la connexion

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(); } }
Copier après la connexion

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(); } }
Copier après la connexion

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); }
Copier après la connexion

Solution

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!