मैं गतिशील रूप से एक एनोटेशन को क्रेट करने की कोशिश कर रहा हूं जो गतिशीलता मेटाप्रोग्रामिंग और एएसटी का उपयोग कर कक्षा में प्रत्येक फ़ील्ड में @XmlElement एनोटेशन जोड़ देगा। मुझे एनोटेशन बनाने और उन्हें खेतों में सही तरीके से लागू करने में समस्याएं आ रही हैं।ग्रोवी एएसटी - संकलन में एनोटेशन जोड़ना
कोड मैं यहाँ स्वरूपित है: 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
हां मैं एक एसओएपी सेवा उत्पन्न करने के लिए कुछ जेएक्सबी एक्सएमएल एनोटेशन का उपयोग करूँगा। मैं चाहता हूं कि WebresourceAnnotation एनोटेशन है जो डोमेन ऑब्जेक्ट में प्रत्येक फ़ील्ड के माध्यम से जाएगा और एक सादा XmlElement एनोटेशन जोड़ें। – Elotin