Rumah > Java > Mengapa perkhidmatan SOAP (jax-ws) berhenti selepas beberapa ketika dan membuang WebServiceTransportException: Unauthorized ] pada sistem pengendalian Linux?

Mengapa perkhidmatan SOAP (jax-ws) berhenti selepas beberapa ketika dan membuang WebServiceTransportException: Unauthorized ] pada sistem pengendalian Linux?

PHPz
Lepaskan: 2024-02-11 20:10:08
ke hadapan
1413 orang telah melayarinya

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.

Kandungan soalan

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
Salin selepas log masuk

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();
    }
}
Salin selepas log masuk

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();
    }
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

Penyelesaian

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan