PHP Editor Strawberry di sini untuk menjawab soalan biasa: Mengapa perkhidmatan SOAP (jax-ws) berhenti selepas satu tempoh masa dan membuang WebServiceTransportException: Pengecualian tanpa kebenaran apabila menggunakannya pada sistem pengendalian Linux? Isu ini mungkin disebabkan oleh isu kebenaran. Di Linux, perkhidmatan SOAP mungkin perlu mengakses fail atau direktori tertentu, tetapi tidak mempunyai kebenaran yang mencukupi untuk mengaksesnya, menyebabkan perkhidmatan terhenti. Penyelesaian kepada masalah ini adalah untuk memastikan bahawa perkhidmatan SOAP mempunyai kebenaran yang mencukupi untuk mengakses fail dan direktori yang diperlukan. Masalah ini boleh diselesaikan dengan menukar kebenaran fail dan direktori atau memastikan perkhidmatan SOAP menggunakan pengguna dengan kebenaran yang mencukupi.
Saya telah membangunkan aplikasi sabun dan menghantar permintaan kepada perkhidmatan yang diperlukan. Masalahnya ialah selepas beberapa lama pengecualian dilemparkan:
Jejak tindanan:
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
Ciri ini berfungsi dalam windows tetapi dalam linux (linux rocky) ia berhenti berfungsi selepas beberapa ketika (5-10 minit).
Ini ialah konfigurasi saya (beberapa maklumat telah ditukar, seperti 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(); } }
Ini pelanggan saya
@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(); } }
Di sini saya tambah hartanah untuk mempercayai sijil ssl dari 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); }
Saya mengalami masalah ini beberapa tahun lalu. Dari apa yang saya faham, masalahnya adalah dengan versi JDK. Saya menukar JDK kepada versi lain (Amazon Coretto) dan semuanya berfungsi dengan baik.
Atas ialah kandungan terperinci Mengapa perkhidmatan SOAP (jax-ws) berhenti selepas beberapa ketika dan membuang WebServiceTransportException: Unauthorized ] pada sistem pengendalian Linux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!