2013-04-03 6 views
2

Я получаю следующее сообщение об ошибке - groovy.lang.MissingMethodException: Нет подписи метода: Script64 $ _run_closure5_closure7_closure8_closure9_closure10_closure11.doCall() применяется для типов аргументов: (java.lang. String): Возможные значения решения: doCall (java.lang.Object, java.lang.Object), isCase (java.lang.Object), isCase() ошибка в строке java.lang.Object:groovy.lang.MissingMethodException: Нет подписи метода

Code - EDIT 
import groovy.xml.* 


List tempList = [] 
List listgenerated = [] 

def count = 0 
for (a in 0..totalCount-1) 
{ 

    //nameList and valueList lists will have all the contents added as below commented pseudo code 
    /*for (b in 0..50) 
    { 
     nameList.add(b,number)  // number is some calculated value 
     valueList.add(b,number) 
     e.g. nameList=[name1, name2, name3,name4, name5] 
      valueList =[val1, val2, val3, , val5] 

      listgenerated should be = [[name1:val1, name2:val2], [name3:val3, name4: , name5:val5]]       
    } */ 


     tempList = [] 

     for (j in count..nameList.size()) 
     { 
       count = j        
       def nameKey = nameList[j] 
       def value 
       if (nameKey != null) 
       { 
        value = valueList[j] 
        tempList << [(nameKey) : value] 

       }        
     }  
      count = count 
      listgenerated.putAt(a,tempList) 
      number = number +1 
} 

def process = { binding, element, name -> 
    if(element[ name ] instanceof Collection) { 
    element[ name ].each { n -> 
     binding."$name"(n) 
    } 
    } 
    else if(element[ name ]) { 
    binding."$name"(element[ name ]) 
    } 
} 

class Form { 
    List fields 
} 



def list = [[ name:'a', val:'1' ], [ name:'b', val :'2', name2:4, xyz:'abc', pqr:'']] //Edited list 
f = new Form(fields: list)   //Works fine 
f = new Form(fields: listgenerated) //Gives the above error 

String xml = XmlUtil.serialize(new StreamingMarkupBuilder().with { builder -> 
    builder.bind { binding -> 
    data { 
     f.fields.each { fields -> 
     item { 
      fields.each { name, value -> 
      process(binding, fields, name) 
      } 
     } 
     } 
    } 
    } 
}) 

Если при создании «генерируемых списком» одинарные кавычки добавляются вокруг значений, они воспринимают его как символ, а при печати оба списка кажутся разными. Я не могу понять, что именно происходит. Любая помощь приветствуется. Благодарю. Ref - Groovy: dynamically create XML for collection of objects with collections of properties

ответ

0

Я считаю, где вы:

//some loop to add multiple values to the list 
listgenerated << name+":"+value 

Вам нужно сделать:

//some loop to add multiple values to the list 
listgenerated << [ (name): value ] 

И добавить карту в список, а не String. Трудно сказать, что, поскольку ваш пример кода не работает без изменений, и я не знаю, являются ли это изменениями, которые решают проблему.

+0

Спасибо за быстрый ответ Тим. Но когда я добавляю карту в список, она генерируется как listgenerated = [[[name1: val1], [name2: val2]], [[name3: val3]]] , и я получаю там же ошибку. Если мой список сгенерирован как - listgenerated = [[name1: val1], [name2: val2], [name3: val3]] он отлично работает, но мое требование равно listgenerated = [[name1: val1, name2: val2], [имя3: val3]]. Как я могу сгенерировать первый список, добавив карту в список, как указано выше. – user2239090

+0

@ user2239090 Вы можете изменить свой вопрос, чтобы ваш код действительно делал то, что вы говорите? Я не могу запустить выше, поскольку вещи не хватает –

+0

Привет, Тим, я отредактировал мой вопрос, чтобы добавить недостающий код. Спасибо за вашу помощь. – user2239090