我試圖動態地創建一個註解,它將動態地向使用元編程和AST的類中的每個字段添加@XmlElement註釋。我在創建註釋並將它們正確應用於字段時遇到了問題。Groovy AST-在編譯時添加註釋
的代碼,我在這裏格式:http://pastebin.com/60DTX5Ya
import javax.xml.bind.annotation.XmlElement
@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
class WebserviceAnnotationModifier implements ASTTransformation {
@Override
void visit(ASTNode[] astNodes, SourceUnit sourceUnit) {
if (!astNodes) return
if (!astNodes[0] || !astNodes[1]) return
if (!(astNodes[0] instanceof AnnotationNode)) return
if (!(astNodes[1] instanceof ClassNode)) return
ClassNode node = (ClassNode)astNodes[1]
List fields = node.getFields()
fields.each {FieldNode field ->
field.addAnnotation(ClassHelper.make(new XmlElement.DEFAULT()));
}
}
}
@Retention(RetentionPolicy.SOURCE)
@Target([ElementType.TYPE])
@GroovyASTTransformationClass(classes =[WebserviceAnnotationModifier])
public @interface WebresourceAnnotation{}
@WebresourceAnnotation
class TestPerson{
String name;
String lastName;
int Age
}
我是接近這一切都錯了嗎?我這樣做的原因是我有一個域仍在製作中,我想進入並將註釋應用於所有字段。找不到在編譯過程中添加的任何註釋示例。這不可能嗎?
你是說你將註釋應用到域。它是Grails域的類嗎?我的意思是你要在Grails環境中使用你的註釋嗎? – chanwit
是的,我將使用一些JAXB XML註釋來生成SOAP服務。我想要的是讓WebresourceAnnotation註釋將通過域對象中的每個字段並添加一個普通的XmlElement註釋。 – Elotin