in qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpRedirect.java [67:132]
public AmqpRedirect validate() throws Exception {
String networkHost = (String) redirect.get(NETWORK_HOST);
if (networkHost == null || networkHost.isEmpty()) {
throw new IOException("Redirection information not set, missing network host.");
}
try {
Integer.parseInt(redirect.get(PORT).toString());
} catch (Exception ex) {
throw new IOException("Redirection information contained invalid port.");
}
String sourceScheme = provider.getRemoteURI().getScheme();
String scheme = (String) redirect.get(SCHEME);
if (scheme != null && !scheme.isEmpty() && !scheme.equals(sourceScheme)) {
// Attempt to located a provider using normal scheme (amqp, amqps, etc...)
ProviderFactory factory = null;
try {
factory = ProviderFactory.findProviderFactory(scheme);
} catch (Throwable error) {
LOG.trace("Couldn't find AMQP prefixed Provider using scheme: {}", scheme);
}
if (factory == null) {
// Attempt to located a transport level redirect (ws, wss, etc...)
try {
factory = findProviderFactoryByTransportScheme(scheme);
} catch (Throwable error) {
LOG.trace("Couldn't find Provider using transport scheme: {}", scheme);
}
}
if (factory == null || !(factory instanceof AmqpProviderFactory)) {
throw new IOException("Redirect contained an unknown provider scheme: " + scheme);
}
LOG.trace("Found provider: {} for redirect: {}", factory.getName(), scheme);
AmqpProviderFactory amqpFactory = (AmqpProviderFactory) factory;
String transportType = amqpFactory.getTransportScheme();
if (transportType == null || transportType.isEmpty()) {
throw new IOException("Redirect contained an unknown provider scheme: " + scheme);
}
TransportFactory transportFactory = TransportFactory.findTransportFactory(transportType);
if (transportFactory == null) {
throw new IOException("Redirect contained an unknown provider scheme: " + scheme);
}
// Check for insecure redirect and whether it is allowed.
if (provider.getTransport().isSecure() && !transportFactory.isSecure() && !provider.isAllowNonSecureRedirects()) {
throw new IOException("Attempt to redirect to an insecure connection type: " + transportType);
}
// Update the redirect information with the resolved target scheme used to create
// the provider for the redirection.
redirect.put(SCHEME, amqpFactory.getProviderScheme());
}
// Check it actually converts to URI since we require it do so later
toURI();
return this;
}