groovy - StreamingMarkupBuilder.out evalutes 'it' as a namespace prefix -


i'm trying generate pom custom artifact groovy class using following code:

def outputbuilder = new streamingmarkupbuilder()      list<artifact> artifacts = []     artifacts << new artifact(groupid: "g", artifactid: "a", version: "v")     artifacts << new artifact(groupid: "g1", artifactid: "a1", version: "v1")      def pom = {         project() {             modelversion("4.0.0")             groupid("gi")             artifactid("ai")             version("007")             packaging("pom")             dependencymanagement() {                 out <<                         artifacts.each {                             dependency {                                 groupid(it.groupid)                             }                         }             }         }     }      println outputbuilder.bind(pom) } 

running simple example yields error:

exception in thread "main" groovy.lang.groovyruntimeexception: namespace prefix: groupid not bound uri @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method) @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:39) @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:27) @ java.lang.reflect.constructor.newinstance(constructor.java:513) @ org.codehaus.groovy.reflection.cachedconstructor.invoke(cachedconstructor.java:77) @ org.codehaus.groovy.reflection.cachedconstructor.doconstructorinvoke(cachedconstructor.java:71) @ org.codehaus.groovy.runtime.callsite.constructorsite$constructorsitenounwrap.callconstructor(constructorsite.java:81) @ org.codehaus.groovy.runtime.callsite.callsitearray.defaultcallconstructor(callsitearray.java:57) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callconstructor(abstractcallsite.java:182) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callconstructor(abstractcallsite.java:190) @ groovy.xml.streamingmarkupbuilder$_closure6.docall(streamingmarkupbuilder.groovy:130) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ org.codehaus.groovy.reflection.cachedmethod.invoke(cachedmethod.java:90) @ groovy.lang.metamethod.domethodinvoke(metamethod.java:233) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:272) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.closure.call(closure.java:411) @ groovy.xml.streamingmarkupsupport.basemarkupbuilder$document.invokemethod(basemarkupbuilder.java:148) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:423) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ org.codehaus.groovy.runtime.callsite.pogometaclasssite.callcurrent(pogometaclasssite.java:66) @ org.codehaus.groovy.runtime.callsite.callsitearray.defaultcallcurrent(callsitearray.java:49) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callcurrent(abstractcallsite.java:133) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callcurrent(abstractcallsite.java:141) 

once change groupid(it.groupid) groupid("xxx") pom printed fine.

how can "trick groovy" evaluate iterator variable groupid instead of evaluating missing namespace prefix. groupid("$it.groupid") , such didn't work.

cheers

it implicit variable of surrounding closure. in case, it represents implicit variable closure dependency{} incorrect. mean it variable representing each artifact artifacts.

solution, use below:

.... artifacts.each{ar ->      dependency{         groupid(ar.groupid)     } } ...... 

Comments