jlindenberg
I'm new here

sebst definierten Classen in ein Beanshell-Script

Jump to solution

Hallo Community,

ich habe das folgendes Beanshell-Problem, es lassen kleine sebst definierten classen in ein Beanshell-Script verwenden.

die Fehlermelgung ist die foldende,

Target exception: bsh.InterpreterError: unable to get instance initializer: bsh.UtilTargetError: Security Exception while searching fields of: class MyClass

hat es jemand gelöst ?

Danke und Grüße

0 Kudos
1 Solution

Accepted Solutions

Ich würde raten, keine Klassen über Beanshell zu erzeugen. Beanshell ist eine Skriptsprache und die Erzeugung von Klassen ist dort mehr eine Notlösung.

Es gibt aber alternative Ansätze, der ähnlich wie JavaScript-Prototypen funktioniert. Hier mal dein Beispiel darauf umgeschrieben:

MyClass(param) {
   attribute;

   doSomething() {
        print("hello " + attribute + "!");
   }

   attribute = param;
   return this; // fixed
}

o = MyClass("a");
o.doSomething();

Korrektur: Fehlendes "return this" ergänzt.

Peter

View solution in original post

0 Kudos
5 Replies
Peter_Jodeleit
Crownpeak employee

Es könnte sein, das es am Skript liegt. Bitte mal kontrollieren, ob da korrekte Methoden-Namen verwendet werden bzw. ob die angesprochenen Felder und Methoden zugreifbar sind (als "public" definiert).

Wenn das nicht weiterhilft wäre der Trace hilfreich, ich hab 'nen guten Draht zum BeanShell-Maintainer Smiley Wink

Peter
0 Kudos

Hier der Script,

erstaunlicherweise passiert es in einem Projekt und in andere Projekt nicht. Zusätzlichen Modulen habe ich deinstalliert.

Hier der Snippet

public class myClass {

public Object attribute;

public myClass(Object param){ this.attribute = param; }

}

o = new myClass("a");

hier die Trace

bsh % // Error: // Uncaught Exception: Object constructor : at Line: 1 : in file: <unknown file> : new myClass ( "a" )

Target exception: bsh.InterpreterError: unable to get instance initializer: bsh.UtilTargetError: Security Exception while searching fields of: class myClass

bsh.InterpreterError: unable to get instance initializer: bsh.UtilTargetError: Security Exception while searching fields of: class myClass

at bsh.ClassGeneratorUtil.getConstructorArgs(Unknown Source)

at myClass.<init>(BeanShell Generated via ASM (www.objectweb.org))

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at bsh.Reflect.constructObject(Unknown Source)

at bsh.BSHAllocationExpression.constructObject(Unknown Source)

at bsh.BSHAllocationExpression.objectAllocation(Unknown Source)

at bsh.BSHAllocationExpression.eval(Unknown Source)

at bsh.BSHPrimaryExpression.eval(Unknown Source)

at bsh.BSHPrimaryExpression.eval(Unknown Source)

at bsh.BSHAssignment.eval(Unknown Source)

at bsh.Interpreter.run(Unknown Source)

at java.lang.Thread.run(Unknown Sourcebsh % )

Dake und Grüße.

0 Kudos

Ich würde raten, keine Klassen über Beanshell zu erzeugen. Beanshell ist eine Skriptsprache und die Erzeugung von Klassen ist dort mehr eine Notlösung.

Es gibt aber alternative Ansätze, der ähnlich wie JavaScript-Prototypen funktioniert. Hier mal dein Beispiel darauf umgeschrieben:

MyClass(param) {
   attribute;

   doSomething() {
        print("hello " + attribute + "!");
   }

   attribute = param;
   return this; // fixed
}

o = MyClass("a");
o.doSomething();

Korrektur: Fehlendes "return this" ergänzt.

Peter
0 Kudos

es fehlt ein "return this;", aber hat es funktioniert, Danke !!!

MyClass(param) {

   attribute;

   doSomething() {

        print("hello " + attribute + "!");

   }

   attribute = param;

  return this;

}

o = MyClass("a");

o.doSomething();

0 Kudos

Stimmt, das hatte ich vergessen. Habe ich ergänzt, damit nichs falsches kopiert wird. Danke!

Peter
0 Kudos