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]