Будет ли работать этот фрагмент кода с использованием Beanshell? ⇐ JAVA
-
Anonymous
Будет ли работать этот фрагмент кода с использованием Beanshell?
Итак, У меня возникла проблема с определенным фрагментом кода. В коде используется интерпретатор bean-shell (bsh.Interpeter) для динамического присвоения значений предложению запроса, которое импортируется из текстового файла. Я не разбираюсь в bean-shell, а также Evalerror, который выдает ошибку при возникновении ошибки, не имеет особого смысла. Публикуем сценарий запроса и фрагмент кода.
Скрипт:
Stat = "Имя:{1} И Дата рождения: {2}"; SetValue(1,Person.getName()); Setvalue(2,Person.getDob()); Теперь они передают весь этот сценарий в виде одной строки интерпретатору для оценки, а перед этим они передают Java-объект Person, который содержит имя, dob и другие переменные, используя «set». Идея заключается в создании динамических предложений запроса. используя сценарии текстовых файлов, подобные приведенному выше, где значения запросам будут присваиваться динамически с помощью setvalue и вызова установщиков из объекта. Объект заранее заполняется всей информацией.
Фрагмент кода:
Интерпретатор i=new Interpreter(); пытаться{ i.set("Человек",p); //p — объект человека с предварительно заполненными данными. i.eval(query);//запрос содержит приведенный выше скрипт String s=(String)i.get("Stat"); System.out.print(s); } поймать (EvalError е) { System.out.println(e); } Теперь при выполнении возникает какая-то ошибка, и ошибка Evalerror выдает что-то вроде команды не найдена, setvalue(....), похоже, что setvalue либо не поддерживается во время выполнения, либо существует какой-то неправильный синтаксис. Это было бы будет полезно, если доступна какая-то помощь, будет ли этот код работать или его нужно будет сделать каким-то другим способом.
Изменить: Как подсказывают люди, Я добавляю ошибку, которая обнаруживается блоком catch после выполнения инструкции «eval».
Ошибка:
Исходный файл: встроенная оценка: ''Stat = "Name:{1) AND DOB: {2}; SetValue(1,Person.getN.....'': Команда не найдена: SetValue(int, java.lang.String): в строке: 3: в файле: встроенная оценка: ''Stat = "Name:{1) AND DOB: {2}; SetValue(1,Person.getN.....'' : SetValue(1, Person.getName())
Мне показалось, что либо Setvalue не поддерживается во время оценки интерпретатором, либо есть какая-то проблема с синтаксисом. Поэтому я попробовал другой способ поиска, вместо использования SetValue попробовал использовать $ для присвоения значений непосредственно из Java object.So изменил скрипт на
Stat = "Имя:{$Person.getName()} И Дата рождения: {$Person.getName()}"; Теперь он не выдал никакой ошибки, но не смог заменить значения из объекта Java, вместо этого вернул предложение запроса как есть:
Имя:{$Person.getName()} И Дата рождения: {$Person.getName()}
Значит, этот подход не сработал, поэтому застрял на этом.
Итак, У меня возникла проблема с определенным фрагментом кода. В коде используется интерпретатор bean-shell (bsh.Interpeter) для динамического присвоения значений предложению запроса, которое импортируется из текстового файла. Я не разбираюсь в bean-shell, а также Evalerror, который выдает ошибку при возникновении ошибки, не имеет особого смысла. Публикуем сценарий запроса и фрагмент кода.
Скрипт:
Stat = "Имя:{1} И Дата рождения: {2}"; SetValue(1,Person.getName()); Setvalue(2,Person.getDob()); Теперь они передают весь этот сценарий в виде одной строки интерпретатору для оценки, а перед этим они передают Java-объект Person, который содержит имя, dob и другие переменные, используя «set». Идея заключается в создании динамических предложений запроса. используя сценарии текстовых файлов, подобные приведенному выше, где значения запросам будут присваиваться динамически с помощью setvalue и вызова установщиков из объекта. Объект заранее заполняется всей информацией.
Фрагмент кода:
Интерпретатор i=new Interpreter(); пытаться{ i.set("Человек",p); //p — объект человека с предварительно заполненными данными. i.eval(query);//запрос содержит приведенный выше скрипт String s=(String)i.get("Stat"); System.out.print(s); } поймать (EvalError е) { System.out.println(e); } Теперь при выполнении возникает какая-то ошибка, и ошибка Evalerror выдает что-то вроде команды не найдена, setvalue(....), похоже, что setvalue либо не поддерживается во время выполнения, либо существует какой-то неправильный синтаксис. Это было бы будет полезно, если доступна какая-то помощь, будет ли этот код работать или его нужно будет сделать каким-то другим способом.
Изменить: Как подсказывают люди, Я добавляю ошибку, которая обнаруживается блоком catch после выполнения инструкции «eval».
Ошибка:
Исходный файл: встроенная оценка: ''Stat = "Name:{1) AND DOB: {2}; SetValue(1,Person.getN.....'': Команда не найдена: SetValue(int, java.lang.String): в строке: 3: в файле: встроенная оценка: ''Stat = "Name:{1) AND DOB: {2}; SetValue(1,Person.getN.....'' : SetValue(1, Person.getName())
Мне показалось, что либо Setvalue не поддерживается во время оценки интерпретатором, либо есть какая-то проблема с синтаксисом. Поэтому я попробовал другой способ поиска, вместо использования SetValue попробовал использовать $ для присвоения значений непосредственно из Java object.So изменил скрипт на
Stat = "Имя:{$Person.getName()} И Дата рождения: {$Person.getName()}"; Теперь он не выдал никакой ошибки, но не смог заменить значения из объекта Java, вместо этого вернул предложение запроса как есть:
Имя:{$Person.getName()} И Дата рождения: {$Person.getName()}
Значит, этот подход не сработал, поэтому застрял на этом.
Мобильная версия