| 

.NET C# Java Javascript Exception

MarkupBuilder

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


MarkupBuilder

MadFool - 14.10.2008 14:50
Hi,

ich fange gerade an mich in groovy einzuarbeiten, folgendes verstehe ich einfach nicht, vielleicht kann mir das jemand erklären:

        StringWriter writer = new StringWriter()
        MarkupBuilder xml = new MarkupBuilder(writer)

        xml.truck(id:'ABC123') {
            box(country:'Australia') {
                box(country:'Australia', state:'QLD') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for VBA Macro writers')
                }
                box(country:'Australia', state:'NSW') {
                    box(country:'Australia', state:'NSW', city:'Sydney') {
                        book(title:'Groovy in Action', author:'Dierk König et al')
                        book(title:'Groovy for COBOL Programmers')
                    }
                    box(country:'Australia', state:'NSW', suburb:'Albury') {
                        book(title:'Groovy in Action', author:'Dierk König et al')
                        book(title:'Groovy for Fortran Programmers')
                    }
                }
            }
            box(country:'USA') {
                box(country:'USA', state:'CA') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for Ruby programmers')
                }
            }
            box(country:'Germany') {
                box(country:'Germany', city:'Berlin') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for PHP Programmers')
                }
            }
            box(country:'UK') {
                box(country:'UK', city:'London') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for Haskel Programmers')
                }
            }
        }

        println writer.toString()

So möchte ich XML erzeugen und ausgeben, das ist aus einem Beispiel aus dem Netz. Innerhalb eines Skriptes funktioniert das wunderbar, sobald ich diesen code aber versuche innerhalb einer Methode auszuführen kommt folgende für mich nicht wirklich aussagekräftige Fehlermeldung:

Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: testing.EnterpriseManager.getEnterpriseConcept() is applicable for argument types: () values: {}
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:60)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:172)
        at testing.EnterpriseManager.invokeMethod(EnterpriseManager.groovy)
        at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:784)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:758)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:170)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethod0(ScriptBytecodeAdapter.java:198)
        at testing.Testing.run(Testing.groovy:21)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:86)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:230)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:912)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:756)
        at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:778)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:758)
        at org.codehaus.groovy.runtime.InvokerHelper.runScript(InvokerHelper.java:401)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:86)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:230)
        at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1105)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:749)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:170)
        at testing.Testing.main(Testing.groovy)

testing.EnterpriseManager.getEnterpriseConcept() ist dabei die Methode in die das ganze eingebunden werden soll...

Warscheinlich stehe ich nur auf dem Schlauch, bin gespannt...

Gruß,
D.


Re: MarkupBuilder

MadFool - 14.10.2008 17:20
Hi,

hmm... ich kann dir ehrlich gesagt nicht ganz folgen, ja, so sieht meine Klasse aus:

package businessObjects

import groovy.sql.Sql
import groovy.xml.MarkupBuilder

class EnterpriseManager {

    Sql sql
        
    EnterpriseManager() {
        DB db = new DB()
        sql = db.getSql()
    }

    public getEnterpriseConcept() {

        StringWriter writer = new StringWriter()
        MarkupBuilder xml = new MarkupBuilder(writer)

        xml.truck(id:'ABC123') {
            box(country:'Australia') {
                box(country:'Australia', state:'QLD') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for VBA Macro writers')
                }
                box(country:'Australia', state:'NSW') {
                    box(country:'Australia', state:'NSW', city:'Sydney') {
                        book(title:'Groovy in Action', author:'Dierk König et al')
                        book(title:'Groovy for COBOL Programmers')
                    }
                    box(country:'Australia', state:'NSW', suburb:'Albury') {
                        book(title:'Groovy in Action', author:'Dierk König et al')
                        book(title:'Groovy for Fortran Programmers')
                    }
                }
            }
            box(country:'USA') {
                box(country:'USA', state:'CA') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for Ruby programmers')
                }
            }
            box(country:'Germany') {
                box(country:'Germany', city:'Berlin') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for PHP Programmers')
                }
            }
            box(country:'UK') {
                box(country:'UK', city:'London') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for Haskel Programmers')
                }
            }
        }

        println writer.toString()

    }
    
}

Wenn ich die Methode durch solch einen closure ersetze, dann meckert der Compiler schon beim erstellen...

    def getEnterpriseConcept {
        // ...
    }

Unexpected token getEnterpriseConcept @ line ...

Ich gebe zu um diese Closures habe ich mich bisher ein wenig herumgedrückt, aber damit scheint es ja auch nicht zu funktionieren, warum sollte es denn deiner Meinung nach an der Methode ligen, btw. wenn ich den Part mit XML-Builder auskommentiere läuft die Methode astrein...

Gruß,
D.


Re: MarkupBuilder

MadFool - 14.10.2008 19:25
Ja, sicher. Sorry ist mir beim Copy&Paste verloren gegangen...

Hier nochmal die Komplette Klasse:

package testing

class EnterpriseManager {

    Sql sql
        
    EnterpriseManager() {
        DB db = new DB()
        sql = db.getSql()
    }

    public getEnterprise(int id) {
        
        String query = "SELECT * FROM \"T_UNTERNEHMEN\" WHERE \"ID\"=" + id
        
        return sql.firstRow(query)
    }
    
    public getAllEnterprises() {
        
        String query = "SELECT * FROM \"T_UNTERNEHMEN\""

        return sql.rows(query)
    }

    def getEnterpriseConcept {

        StringWriter writer = new StringWriter()
        MarkupBuilder xml = new MarkupBuilder(writer)

        xml.truck(id:'ABC123') {
            box(country:'Australia') {
                box(country:'Australia', state:'QLD') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for VBA Macro writers')
                }
                box(country:'Australia', state:'NSW') {
                    box(country:'Australia', state:'NSW', city:'Sydney') {
                        book(title:'Groovy in Action', author:'Dierk König et al')
                        book(title:'Groovy for COBOL Programmers')
                    }
                    box(country:'Australia', state:'NSW', suburb:'Albury') {
                        book(title:'Groovy in Action', author:'Dierk König et al')
                        book(title:'Groovy for Fortran Programmers')
                    }
                }
            }
            box(country:'USA') {
                box(country:'USA', state:'CA') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for Ruby programmers')
                }
            }
            box(country:'Germany') {
                box(country:'Germany', city:'Berlin') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for PHP Programmers')
                }
            }
            box(country:'UK') {
                box(country:'UK', city:'London') {
                    book(title:'Groovy in Action', author:'Dierk König et al')
                    book(title:'Groovy for Haskel Programmers')
                }
            }
        }

        println writer.toString()

    }
    
}

Und hier die Instanziierung und der Aufruf:

package testing

import businessObjects.*
import groovy.xml.MarkupBuilder

EnterpriseManager em = new EnterpriseManager()

row = em.getEnterprise(121)
println(row.NAME_AFX + " : " + row.NAME_OFFIZIELL)

rows = em.getAllEnterprises()
for (row in rows) {
    println(row.NAME_AFX + " :: " + row.NAME_OFFIZIELL)
}

em.getEnterpriseConcept()

Ich hoffe ich hab nicht wieder was vergessen...

Gruß,
D.


Re: MarkupBuilder

MadFool - 14.10.2008 20:25
Vielen Dank, nun lässt es sich komplilieren, beim ausführen kommt allerdings der gleiche Fehler wie in meinem Eingangspost...

Gruß,
D.


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "MarkupBuilder" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.