2017-04-04 3 views
0

Ich habe eine XML-Beschreibung der Klassen I enthalten, mit der Geschwindigkeit erzeugen möchten, in dieser Form:Unerwarteter Fehler in Apache Velocity Template-Datei

<Class name="name"> 
    <Attribute name="name" type="typeName"/> 
    ... 
    <Method name="name" type="typeName"/> 
</Class> 

der Vorlage Code ist:

public class $class.Name implements NodeIface { 

#foreach($att in $class.Attributes) 
    private $att.Type $att.name; 

    public $att.Type get$utility.firstToUpperCase($att.Name)() { 
    return this.$att.Name; 
    } 

    public void set$utility.firstToUpperCase($att.Name)($att.Type $att.Name) { 
    this.$att.Name = $att.Name; 
    } 
#end 

#foreach($mtd in $class.Methods) 
    if($class.Name == "name") { 
    public $mtd.Name() { 
     this.$att.Name = new $att.Type(Constants.SERVER_PORT, classNameHandler.class); //here lies the error 
    } 

    @Override 
     public $mtd.Type $mtd.Name() throws TException { 
     TSocket $att.Name = new TSocket("localhost", Constants.SERVER_PORT); 
     TBinaryProtocol $att.Name = new TBinaryProtocol($att.Name); 
     managementClient = new ManagementService.Client($att.Name); 
     this.setDispatcher(new OperationDispatcher($att.Name)); 
     arithmeticServerTransport.open(); 
     $att.Name.start(); 
       $att.Name = new $att.Type($att.Name); 
     PortNegotiator negotiator = new PortNegotiator($att.Name); 
     negotiator.negotiate($att.Type, $att.Name); 
    } 

    @Override 
    public $mtd.Type $mtd.Name() { 
     $att.Name.stop(); 
    } 
    } 
    else if ($class.Name == "GreetingsNode") { 
    public $mtd.Name(); 
     this.$att.Name = new $att.Type((Constants.SERVER_PORT, GreetingsServiceHandler.class)); 
    } 

    #Override 
    public $mtd.Type $mtd.Name() throws TException { 
     TSocket $att.Name = new TSocekt("localhost", Constants.SERVER_PORT); 
     TBinaryProtocol $att.Name = new TBinaryProtocol($att.Name); 
     $att.Name = new ManagementService.Client($att.Name); 
     this.SetUser(new User($att.Name); 
     this.setMessenger(new MessageDispatcher($att.Name)); 
     $att.Name.open() 

     $att.Name = new $att.Type($att.Name); 
     PortNegotiator negotiator = new PortNegotiator($att.Name); 
     negotiator.negotiate($att.Type, $att.Name); 
    } 

    @Override 
    public $mtd.Type $mtd.Name() { 
     $att.Name.stop(); 
    } 

#End 

Der Velocity-Texteditor von Eclipse teilt mir mit, dass ein Fehler mit dieser Nachricht vorliegt: "Encountered"); \ r \ n \ t \ t} \ r \ n \ t \ t \ r \ n \ t \ t @ Überschreiben \ r \ n \ t \ tpublic "at Class.vm [line 23, column 86] Erwartete eines von: " ["... " , "... ") "... ..."

Was bedeutet das?

+0

Sie haben eine Methode in einer if-Anweisung und ein Override über nichts –

+0

nur den restlichen Teil des Codes hinzugefügt, sorry – Gaspare79

Antwort

1

Es ist ein Fall, in dem Sie verwenden müssen die formal reference notation:

 this.$att.Name = new ${att.Type}(Constants.SERVER_PORT, classNameHandler.class); 

sonst der Velocity-Parser wird denken, dass Sie eine Methode auf das $att.Type Objekt aufzurufen versuchen.

+0

Danke, das hat es behoben. Ich hätte das Wiki sorgfältiger lesen sollen – Gaspare79