Як адзін наладзіць CXF генеруецца кліент для папераджальнага HTTP AUTH?

У мяне ёсць кліент, які быў створаны з дапамогай CXF з выкарыстаннем лакальнага файла WSDL. Кліент падключаецца нармальна, і я атрымліваю чаканы 401 памылка з вэб-сервера.

Праблема я сутыкнуўся не ў стане правільна наладзіць папераджальную аўтарызацыю ў кліенце.

Я паспрабаваў некалькі рэчаў, але безвынікова. Большасць прыкладаў у Інтэрнэце, здаецца, засяродзіцца на вясну, а звычайны стары Java падыход.

Я ў тым ліку асноўнай часткі кліента. Калі хто-то можа даць мне прыклад таго, як гэта павінна быць сканфігуравана, я цаню гэта. Звярніце ўвагу, што я нічога не шукаю фантазіі. Мне проста трэба, каб мець магчымасць праверыць сапраўднасць і выклік паслугі.

public final class ServiceNowSoap_ServiceNowSoap_Client {

private static final QName SERVICE_NAME = new QName(
        "http://www.service-now.com/foo",
        "ServiceNow_foo");

private ServiceNowSoap_ServiceNowSoap_Client() {
}

public static void main(String args[]) throws java.lang.Exception {
    URL wsdlURL = ServiceNowCmdbCiComm.WSDL_LOCATION;
    if (args.length > 0 && args[0] != null && !"".equals(args[0])) {
        File wsdlFile = new File(args[0]);
        try {
            if (wsdlFile.exists()) {
                wsdlURL = wsdlFile.toURI().toURL();
            } else {
                wsdlURL = new URL(args[0]);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    ServiceNowFoo ss = new ServiceNowFoo(wsdlURL,
            SERVICE_NAME);
    ServiceNowSoap port = ss.getServiceNowSoap();

    {
        System.out.println("Invoking deleteRecord...");
        java.lang.String _deleteRecord_sysId = "";
        java.lang.String _deleteRecord__return = port
                .deleteRecord(_deleteRecord_sysId);
        System.out.println("deleteRecord.result=" + _deleteRecord__return);

    }
    System.exit(0);
}

}
1

7 адказы

Іншы Падыход будзе:

import javax.xml.ws.BindingProvider;

public class CxfClientExample {

    public static void main(String[] args) throws Exception {
        String endPointAddress = "http://www.service-now.com/foo";
        ServiceNowFoo service = new ServiceNowFoo();
        ServiceNowFooPortType port = service.getServiceNowFoo();

        BindingProvider bindingProvider = (BindingProvider) port;
        bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endPointAddress);
        bindingProvider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "theusername");
        bindingProvider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "thepassword");

        String deleteRecord_return = port.deleteRecord("");
        System.out.println("deleteRecord.result=" + deleteRecord_return);    
    }
}
5
дададзена

Іншы Падыход будзе:

import javax.xml.ws.BindingProvider;

public class CxfClientExample {

    public static void main(String[] args) throws Exception {
        String endPointAddress = "http://www.service-now.com/foo";
        ServiceNowFoo service = new ServiceNowFoo();
        ServiceNowFooPortType port = service.getServiceNowFoo();

        BindingProvider bindingProvider = (BindingProvider) port;
        bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endPointAddress);
        bindingProvider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "theusername");
        bindingProvider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "thepassword");

        String deleteRecord_return = port.deleteRecord("");
        System.out.println("deleteRecord.result=" + deleteRecord_return);    
    }
}
5
дададзена

Добра, я зразумеў гэта. Даволі проста, калі справа даходзіць да яго. Спадзяюся, што гэта ратуе камусьці пару хвілін ...

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.transport.http.HTTPConduit;

private static final QName SERVICE_NAME = new QName(
        "http://www.service-now.com/foo",
        "ServiceNow_foo");

private ServiceNowSoap_ServiceNowSoap_Client() {
}

public static void main(String args[]) throws java.lang.Exception {
    URL wsdlURL = ServiceNowFoo.WSDL_LOCATION;
    if (args.length > 0 && args[0] != null && !"".equals(args[0])) {
        File wsdlFile = new File(args[0]);
        try {
            if (wsdlFile.exists()) {
                wsdlURL = wsdlFile.toURI().toURL();
            } else {
                wsdlURL = new URL(args[0]);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    ServiceNowFoo ss = new ServiceNowFoo(wsdlURL,
            SERVICE_NAME);

    ServiceNowSoap port = ss.getServiceNowSoap();

    Client client = ClientProxy.getClient(port);
    HTTPConduit http = (HTTPConduit) client.getConduit();
    http.getAuthorization().setUserName("theusername");
    http.getAuthorization().setPassword("thepassword");
4
дададзена

Вы можаце таксама выкарыстоўваць перахопнікі. Адным з пераваг выкарыстання перахопніка з'яўляецца тое, што вы можаце прымацаваць яго ўсе свае кліент, рацыяналізацыі свайго папераджальнага падыходу аўтэнтыфікацыі. Паглядзіце на:

Як я магу змяніць HTTP загалоўкі для адказу JAX-WS ў CXF?

0
дададзена

Вы можаце таксама выкарыстоўваць перахопнікі. Адным з пераваг выкарыстання перахопніка з'яўляецца тое, што вы можаце прымацаваць яго ўсе свае кліент, рацыяналізацыі свайго папераджальнага падыходу аўтэнтыфікацыі. Паглядзіце на:

Як я магу змяніць HTTP загалоўкі для адказу JAX-WS ў CXF?

0
дададзена

Прывітанне сябар вы наладзілі частка аўтэнтыфікацыі пасля выкліку вэб-сэрвісу, як гэта працуе?

Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
http.getAuthorization().setUserName("theusername");            
http.getAuthorization().setPassword("thepassword");        
0
дададзена

Прывітанне сябар вы наладзілі частка аўтэнтыфікацыі пасля выкліку вэб-сэрвісу, як гэта працуе?

Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
http.getAuthorization().setUserName("theusername");            
http.getAuthorization().setPassword("thepassword");        
0
дададзена