1
ソースコードの代わりに詳しい説明を書かない限り、私はこの質問を投稿できません。だからこそ私はちょっとだけテキストを書いているだけです。ActiveMQ extends SimpleAuthenticationPluginがNullPointerExceptionを返す
私は以下のクラスを持っています。私の目標は、このプラグインを設定してBrokerServiceを保護することです。
public class Server{
private static int ackMode;
private static String messageQueueName;
private static String messageBrokerUrl;
private Session session;
private boolean transacted = false;
private MessageProducer replyProducer;
private MessageProtocol messageProtocol;
private String username ="username";
private String password ="password";
static {
messageBrokerUrl = "tcp://localhost:61616";
messageQueueName = "client.messages";
ackMode = Session.AUTO_ACKNOWLEDGE;
}
public Server() {
try {
//This message broker is embedded
BrokerService broker = new BrokerService();
broker.setPersistent(false);
broker.setUseJmx(false);
broker.addConnector(messageBrokerUrl);
// here I'm add my class as plguing
MyAuthenticationPlugin[] myAuthenticationPlugin = new
MyAuthenticationPlugin[1];
myAuthenticationPlugin[0] = new MyAuthenticationPlugin();
broker.setPlugins(myAuthenticationPlugin);
broker.start();
} catch (Exception e) {
System.out.println("Exception: "+e.getMessage());
//Handle the exception appropriately
}
}
private void setupMessageQueueConsumer() {
ActiveMQConnectionFactory connectionFactory = new
ActiveMQConnectionFactory(messageBrokerUrl);
connectionFactory.setUserName(username);
connectionFactory.setPassword(password);
Connection connection;
try {
connection = connectionFactory.createConnection(username, password);
connection.start(); // This line thows exception
this.session = connection.createSession(this.transacted, ackMode);
Destination adminQueue = this.session.createQueue(messageQueueName);
//Setup a message producer to respond to messages from clients, we will get the destination
//to send to from the JMSReplyTo header field from a Message
this.replyProducer = this.session.createProducer(null);
this.replyProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//Set up a consumer to consume messages off of the admin queue
MessageConsumer consumer = this.session.createConsumer(adminQueue);
consumer.setMessageListener(this);
// new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (JMSException e) {
System.out.println("Exception: "+e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Server();
System.out.println("I'm done. END");
}
}
主に私の目標は、ユーザー名、パスワード、アクセスグループを設定することにより、安全な私のBrokerServiceを確保することである - :私はNullPointerExceptionが例外を取得する場所は次のよう
public class MyAuthenticationPlugin extends SimpleAuthenticationPlugin {
private String username ="username";
private String password ="password";
public MyAuthenticationPlugin(){
secureME();
}
public void secureME(){
Map<String, String> map = new HashMap<String, String>();
map.put(username, password);
this.setUserPasswords(map);
}
}
は、その後、私は上記のクラスを使用しようとしました私は、BrokerServiceのユーザー名、パスワード、アクセスグループをどのようにしてより安全に設定できるのかを教えてください。スタックトレースを
アップデート: -
result = {StackTraceElement[7]@1015}
0 = {[email protected]} "org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)"
declaringClass = "org.apache.activemq.util.JMSExceptionSupport"
methodName = "create"
fileName = "JMSExceptionSupport.java"
lineNumber = 49
1 = {[email protected]} "org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1377)"
declaringClass = "org.apache.activemq.ActiveMQConnection"
methodName = "syncSendPacket"
fileName = "ActiveMQConnection.java"
lineNumber = 1377
2 = {[email protected]} "org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1481)"
declaringClass = "org.apache.activemq.ActiveMQConnection"
methodName = "ensureConnectionInfoSent"
fileName = "ActiveMQConnection.java"
lineNumber = 1481
3 = {[email protected]} "org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:516)"
declaringClass = "org.apache.activemq.ActiveMQConnection"
methodName = "start"
fileName = "ActiveMQConnection.java"
lineNumber = 516
4 = {[email protected]} "com.ma.home.Server.setupMessageQueueConsumer(Server.java:57)"
declaringClass = "com.ma.home.Server"
methodName = "setupMessageQueueConsumer"
fileName = "Server.java"
lineNumber = 57
5 = {[email protected]} "com.ma.home.Server.<init>(Server.java:46)"
declaringClass = "com.ma.home.Server"
methodName = "<init>"
fileName = "Server.java"
lineNumber = 46
6 = {[email protected]} "com.ma.home.Server.main(Server.java:84)"
declaringClass = "com.ma.home.Server"
methodName = "main"
fileName = "Server.java"
lineNumber = 84
スタックトレースはありますか? – Logan
更新された質問のスタックトレースを確認してください。また、例外を再現するために、与えられたコードを実行することができます。ありがとう! – masiboo