Tôi đang cố gắng lồng ghép chú thích động sẽ thêm chú thích @XmlElement vào mọi trường trong một lớp bằng cách sử dụng lập trình meta và AST. Tôi đang gặp sự cố khi tạo chú thích và áp dụng chúng cho các trường đúng cách.Groovy AST - Thêm chú thích khi biên dịch
Mã tôi có được định dạng ở đây: 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
}
Am i tiếp cận này hoàn toàn sai? Lý do tôi làm điều này là tôi có một tên miền mà vẫn còn trong việc tạo ra và tôi muốn chỉ cần đi vào và áp dụng các chú thích cho tất cả các lĩnh vực. Không thể tìm thấy bất kỳ ví dụ về chú thích nào được thêm vào trong quá trình biên dịch. Điều này là không thể?
Bạn đang nói rằng bạn áp dụng chú thích cho tên miền. Có phải các lớp miền Grails không? Ý tôi là bạn sẽ sử dụng chú thích của mình trong môi trường Grails? – chanwit
Có, tôi sẽ sử dụng một số chú thích XML JAXB để tạo ra một dịch vụ SOAP. Những gì tôi muốn là có chú thích WebresourceAnnotation sẽ đi qua mọi trường trong đối tượng miền và thêm chú thích XmlElement đơn giản. – Elotin