如何在外部类中获取IdentificationCluster的@Path注解
问题:无法通过反射获取字段的@Path注解
我尝试在Main类中获取N2Composition类里identification字段的@Path注解,但使用常规的getAnnotation()方法始终无法成功,调用时直接报错。
相关代码
N2Composition类
package org.example.n2composition; import com.nedap.archie.rm.archetyped.FeederAudit; import com.nedap.archie.rm.generic.Participation; import com.nedap.archie.rm.generic.PartyIdentified; import com.nedap.archie.rm.generic.PartyProxy; import java.lang.String; import java.time.temporal.TemporalAccessor; import java.util.List; import javax.annotation.processing.Generated; import org.ehrbase.client.annotations.Archetype; import org.ehrbase.client.annotations.Entity; import org.ehrbase.client.annotations.Id; import org.ehrbase.client.annotations.Path; import org.ehrbase.client.annotations.Template; import org.ehrbase.client.classgenerator.interfaces.CompositionEntity; import org.ehrbase.client.classgenerator.shareddefinition.Category; import org.ehrbase.client.classgenerator.shareddefinition.Language; import org.ehrbase.client.classgenerator.shareddefinition.Setting; import org.ehrbase.client.classgenerator.shareddefinition.Territory; import org.ehrbase.client.openehrclient.VersionUid; import org.example.n2composition.definition.CodedTextDefiningCode; import org.example.n2composition.definition.IdentificationCluster; import org.example.n2composition.definition.PatientroleCluster; import org.example.n2composition.definition.ProblemDiagnosisEvaluation; @Entity @Archetype("openEHR-EHR-COMPOSITION.information.v0") @Generated( value = "org.ehrbase.client.classgenerator.ClassGenerator", date = "2023-03-24T11:50:15.994180+01:00", comments = "https://github.com/ehrbase/openEHR_SDK Version: 1.26.0-SNAPSHOT" ) @Template("2") public class N2Composition implements CompositionEntity { /** * Path: 2/Coded text */ @Path("/category[at0001]|defining_code") private CodedTextDefiningCode codedTextDefiningCode; /** * Path: 2/Event Context/CLUSTER/identification * Description: identification */ @Path("/context[at0002]/other_context[at0018]/items[at0019]/items[openEHR-EHR-CLUSTER.identification.v0]") private IdentificationCluster identification; }
Main类
package org.example; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.nedap.archie.rm.datavalues.DvCodedText; import org.ehrbase.client.annotations.Template; import org.example.n2composition.N2Composition; import org.example.n2composition.definition.IdentificationCluster; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) throws NoSuchFieldException { ReadingFile r = new ReadingFile(); r.resultado(); String s1 = "C:\\Users\\omarah\\Documents\\ETL\\MAPEOS\\MAPEO1_1.txt"; String s2 = "C:\\Users\\omarah\\Documents\\ETL\\MAPEOS\\ATRIBUTOSYVALORES-DIAGNÓSTICO2.txt"; r.reading(s1,s2); List<String> list1 = r.getResult1(); List<String> list2 = r.getResult2(); N2Composition n2 = new N2Composition(); IdentificationCluster i = new IdentificationCluster(); DvCodedText dv = new DvCodedText(); dv.setValue("hola"); i.setDvCodedText(dv); Field f = N2Composition.class.getDeclaredField("identification"); String p = f.getAnnotation(Path.class).value(); n2.setIdentification(i); } }
解决方法
修正导包错误
你在Main类中错误导入了java.nio.file.Path(这是文件路径类),但N2Composition里使用的@Path注解是org.ehrbase.client.annotations.Path。把Main类中的import java.nio.file.Path;删除,替换为import org.ehrbase.client.annotations.Path;。验证注解的运行时可见性
确认org.ehrbase.client.annotations.Path注解的定义中包含@Retention(RetentionPolicy.RUNTIME),只有运行时可见的注解才能通过反射获取。ehrbase的官方注解默认满足这个条件,无需额外修改。添加空指针防护
修正导包后,原反射代码可以正常工作,但建议添加空判断避免空指针异常:Field f = N2Composition.class.getDeclaredField("identification"); Path pathAnnotation = f.getAnnotation(Path.class); if (pathAnnotation != null) { String p = pathAnnotation.value(); // 执行后续业务逻辑 } else { System.err.println("该字段未标注@Path注解"); }
内容的提问来源于stack exchange,提问作者Omar Abdellah
相关产品推荐
相关产品推荐

