rabbitmq-tutorials/java/EmitLogDirect.java
Paul Muriel Biya-Bi 4d50239ceb Avoid ArrayIndexOutOfBoundsException in EmitLogDirect
It is true that the EmitLogDirect.getMessage() method only calls the
EmitLogDirect.joinStrings() method when the length of the strings array
argument is at least 2. However, it is safe make our method more robust
by avoiding the ArrayIndexOutOfBoundsException exception as much as we
can. Who knows? Maybe the EmitLogDirect.joinStrings() method could be
extracted in a utility class and used in cases where the startIndex
could potentially be equal to the length of the passed array.
2019-03-30 20:16:03 -04:00

49 lines
1.6 KiB
Java

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class EmitLogDirect {
private static final String EXCHANGE_NAME = "direct_logs";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
String severity = getSeverity(argv);
String message = getMessage(argv);
channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes("UTF-8"));
System.out.println(" [x] Sent '" + severity + "':'" + message + "'");
}
}
private static String getSeverity(String[] strings) {
if (strings.length < 1)
return "info";
return strings[0];
}
private static String getMessage(String[] strings) {
if (strings.length < 2)
return "Hello World!";
return joinStrings(strings, " ", 1);
}
private static String joinStrings(String[] strings, String delimiter, int startIndex) {
int length = strings.length;
if (length == 0) return "";
if (length <= startIndex) return "";
StringBuilder words = new StringBuilder(strings[startIndex]);
for (int i = startIndex + 1; i < length; i++) {
words.append(delimiter).append(strings[i]);
}
return words.toString();
}
}