#java #static #mule #anypoint-studio #mulesoft
Вопрос:
Итак, у меня здесь настроено приложение mule 4, я создал небольшой класс java для эмуляции броска костей и подключил его. Он компилируется, но я получаю эту ошибку, когда пытаюсь его нажать:
"Invocation of static Method 'rollDie(java.lang.String)' from Class 'objects.Dice' with arguments [java.lang.String sides] resulted in an error.
Ожидаемыми аргументами являются [java.lang.Струнные стороны]»
У меня есть небольшое перечисление под названием Die
package objects;
public enum Die {
FOUR,SIX,EIGHT,TEN,TWELVE,TWENTY,HUNDRED;
}
и мой основной java-класс с именем Dice
package objects;
import java.util.Random;
public class Dice {
private static Random rand;
public Dice()
{
rand = new Random();
}
public static int rollDie(String sides)
{
Die die = getDie(sides);
// Die die = Die.TWENTY;
switch(die)
{
case FOUR:
return rand.nextInt(4) 1;
case SIX:
return rand.nextInt(6) 1;
case EIGHT:
return rand.nextInt(8) 1;
case TEN:
return rand.nextInt(10) 1;
case TWELVE:
return rand.nextInt(12) 1;
case TWENTY:
return rand.nextInt(20) 1;
case HUNDRED:
return rand.nextInt(100) 1;
default:
return -1;
}
}
private static Die getDie(String input)
{
if(input.equals("4"))
return Die.FOUR;
else if(input.equals("6"))
return Die.SIX;
else if(input.equals("8"))
return Die.EIGHT;
else if(input.equals("10"))
return Die.TEN;
else if(input.equals("12"))
return Die.TWELVE;
else if(input.equals("20"))
return Die.TWENTY;
else if(input.equals("100"))
return Die.HUNDRED;
else
return null;
}
}
Мой поток-это просто прослушиватель в режиме реального времени со стандартным http-прослушивателем. вызов статического вызова с классом «объекты.Кости» вызывает роллЬди() и передает арг вот так
{
sides : "20"
}
Не уверен, что я здесь делаю не так. Есть какие-нибудь соображения от кого-нибудь? Мне сказали, что мне не нужно импортировать файл mule-artifact.json из-за новейшей версии mule 4, поэтому я не уверен, что еще я могу сделать, чтобы показать этому интерфейсу, что он получает правильный тип ввода… помочь?
Спасибо, Джон
Комментарии:
1. Пожалуйста, добавьте операцию статического вызова из потока как XML. Также, какие точные версии Mule 4 и модуля Java используются? Если в сообщении об ошибке есть какие-либо дополнительные строки, пожалуйста, также добавьте их в вопрос.
Ответ №1:
Ваш класс Dice полностью статичен. В экземпляре нет необходимости.
Кроме.. ваша random
переменная фактически назначается только тогда, когда вы создаете экземпляр.
Таким образом, этот класс не имеет смысла. Он предназначен для служебного класса, который полностью сломан, если вы не создадите один экземпляр, но экземпляры совершенно бесполезны. Таким образом, чтобы использовать его так, как написано, вам нужно будет создать экземпляр в какой-то момент, ровно один раз, немедленно выбросить этот экземпляр в мусор, а затем продолжить использовать статические методы.
Кроме того, ваша среда неправильно настроена — следуйте инструкциям и включите подробное ведение журнала исключений. Разработка приложения, в котором ошибка приводит к тому, что вы «не сработали», и никаких дополнительных подробностей, в буквальном смысле, в сотни раз сложнее, чем написание приложения, в котором вы получаете некоторую обратную связь.
Чтобы исправить эту конкретную проблему private static Random rand = new Random();
, а затем просто удалите конструктор , так как он бесполезен.
Комментарии:
1. Это было сделано в дикой попытке заставить что-то работать… хотя, похоже, я исправил все, что было сломано раньше, и сломал это, создав конструктор… уф. Это был долгий день. Но это действительно решило проблему, когда я удалил конструктор. Спасибо.
2. Окружающая среда-это не проблема. Эта ошибка произошла с использованием кода Java в приложении Mule. По умолчанию ошибка выводит только ошибку Mule, но в том же сообщении фактически говорится, как включить подробное ведение журнала исключений. Это даст вам полное исключение и трассировку стека, указывающую на исключение NullPointerException в rollDie(). Если это проблема, вы всегда можете сначала разработать и протестировать свой Java-код в среде Java или добавить его в качестве jar-зависимости в проект Mule. Дополнительная информация: docs.mulesoft.com/mule-runtime/4.3
3. @aled Отличный комментарий, спасибо. Я несколько обновил ответ.