Hi Emmanuel

You are correct, this was changed by QPID-3415.  This change was made
to allow the 0-10 code path (when utilised by the Qpid client) to load
SASL callback handers using the same mechanism as 0-8..0-9-1.   You
are also correct, yours was not an anticipated/tested use-case.

If you don't want to use the Qpid client JAR, you'll need to implement
your own ClientDelegate, overridding only the createSaslClient()
method to create a SaslClient and set up the callback handlers.

 The following works for me (tested against the Java Broker).

Hope this helps

Keith,


        Connection conn = new Connection();

        ConnectionSettings connSettings = new ConnectionSettings();

        connSettings.setUsername("guest");

        connSettings.setPassword("guest");

        connSettings.setVhost("test");

        connSettings.setUseSSL(false);

        connSettings.setSaslMechs("PLAIN");



        conn.setConnectionDelegate(new ClientDelegate(connSettings)

        {

            protected javax.security.sasl.SaslClient
createSaslClient(List<Object> brokerMechs) throws ConnectionException,

            javax.security.sasl.SaslException

            {
                Map<String,Object> saslProps = new HashMap<String,Object>();


                javax.security.auth.callback.CallbackHandler cbh = new
javax.security.auth.callback.CallbackHandler()

                {

                    public void handle(final
javax.security.auth.callback.Callback[] callbacks)

                            throws IOException,
javax.security.auth.callback.UnsupportedCallbackException

                    {

                        for (int i = 0; i < callbacks.length; i++)

                        {

                            javax.security.auth.callback.Callback cb =
callbacks[i];

                            if (cb instanceof
javax.security.auth.callback.NameCallback)

                            {


((javax.security.auth.callback.NameCallback)cb).setName(getConnectionSettings().getUsername());

                            }

                            else if (cb instanceof
javax.security.auth.callback.PasswordCallback)

                            {


((javax.security.auth.callback.PasswordCallback)cb).setPassword(getConnectionSettings().getPassword().toCharArray());

                            }

                            else

                            {

                                throw new
javax.security.auth.callback.UnsupportedCallbackException(cb);

                            }

                    }



                    }

                };

                final javax.security.sasl.SaslClient sc =
javax.security.sasl.Sasl.createSaslClient(new String[] {"PLAIN"},
null,


getConnectionSettings().getSaslProtocol(),


getConnectionSettings().getSaslServerName(),

                                                            saslProps, cbh);

                return sc;

            }



        });

        conn.connect(connSettings);

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to