메타 프로그래밍 및 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
예 SOAP 서비스를 생성하기 위해 일부 JAXB XML 주석을 사용합니다. 내가 원하는 것은 도메인 객체의 모든 필드를 거쳐 일반 XmlElement 주석을 추가하는 WebresourceAnnotation 주석을 갖는 것입니다. – Elotin