在 java class 中从 @XMLElement 获取注释值
Getting annotation values from @XMLElement in a java class
我正在尝试从我拥有的 java class 中获取 @XMLElement 注释,基本上是尝试制作需要注释的变量映射:true。但是它什么也没打印出来。
我有一个 java class,其中包含以下代码段:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"subjectCode",
"version",
"messageTitle",
})
@XmlRootElement(name = "CreateMessageRequest", namespace = "mynamespaceblahblah")
public class CreateMessageRequest
extends AbstractRequest
implements Serializable
{
private final static long serialVersionUID = 10007L;
@XmlElement(namespace = "mynamespaceblahblah", required = true)
protected String subjectCode;
@XmlElement(namespace = "mynamespaceblahblah")
protected String version;
@XmlElement(namespace = "mynamespaceblahblah", required = true)
protected String messageTitle;
//Getters and setters
}
我试过这个:
public HashMap<String, String> getRequired(Class<?> c) {
HashMap<String, String> fieldMap = new HashMap<>();
Annotation[] annotations = c.getAnnotations();
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (annotation instanceof XmlElement) {
XmlElement theElement = (XmlElement) annotation;
String name = ((XmlElement) annotation).name();
if (theElement.required()) {
fieldMap.put(name, "true");
} else {
fieldMap.put(name, "false");
}
}
}
return fieldMap;
}
但是当我使用我的方法时:
SchemaBuilder s = new SchemaBuilder();
System.out.println("Required Methods of class:");
HashMap<String, String> fieldMap = s.getRequired(CreateMessageRequest.class);
for (Map.Entry<String, String> entry : fieldMap.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
打印出
Required Methods of class:
对我做错了什么有什么建议吗?我考虑过因为它受保护我无法访问它(不幸的是我无法更改带注释的 class )但我不确定这是问题所在。
解决方案是根据建议查看各个字段:)
为了帮助未来的 google 员工:
public HashMap<String, String> getRequired(Class<?> c) {
HashMap<String, String> fieldMap = new HashMap<>();
Field[] fields = c.getDeclaredFields();
for (Field f : fields) {
Annotation[] annotations = f.getAnnotationsByType(XmlElement.class);
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (annotation instanceof XmlElement) {
XmlElement theElement = (XmlElement) annotation;
String name = f.getName();
if (theElement.required()) {
fieldMap.put(name, "true");
} else {
fieldMap.put(name, "false");
}
}
}
}
return fieldMap;
}
我正在尝试从我拥有的 java class 中获取 @XMLElement 注释,基本上是尝试制作需要注释的变量映射:true。但是它什么也没打印出来。
我有一个 java class,其中包含以下代码段:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"subjectCode",
"version",
"messageTitle",
})
@XmlRootElement(name = "CreateMessageRequest", namespace = "mynamespaceblahblah")
public class CreateMessageRequest
extends AbstractRequest
implements Serializable
{
private final static long serialVersionUID = 10007L;
@XmlElement(namespace = "mynamespaceblahblah", required = true)
protected String subjectCode;
@XmlElement(namespace = "mynamespaceblahblah")
protected String version;
@XmlElement(namespace = "mynamespaceblahblah", required = true)
protected String messageTitle;
//Getters and setters
}
我试过这个:
public HashMap<String, String> getRequired(Class<?> c) {
HashMap<String, String> fieldMap = new HashMap<>();
Annotation[] annotations = c.getAnnotations();
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (annotation instanceof XmlElement) {
XmlElement theElement = (XmlElement) annotation;
String name = ((XmlElement) annotation).name();
if (theElement.required()) {
fieldMap.put(name, "true");
} else {
fieldMap.put(name, "false");
}
}
}
return fieldMap;
}
但是当我使用我的方法时:
SchemaBuilder s = new SchemaBuilder();
System.out.println("Required Methods of class:");
HashMap<String, String> fieldMap = s.getRequired(CreateMessageRequest.class);
for (Map.Entry<String, String> entry : fieldMap.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
打印出
Required Methods of class:
对我做错了什么有什么建议吗?我考虑过因为它受保护我无法访问它(不幸的是我无法更改带注释的 class )但我不确定这是问题所在。
解决方案是根据建议查看各个字段:)
为了帮助未来的 google 员工:
public HashMap<String, String> getRequired(Class<?> c) {
HashMap<String, String> fieldMap = new HashMap<>();
Field[] fields = c.getDeclaredFields();
for (Field f : fields) {
Annotation[] annotations = f.getAnnotationsByType(XmlElement.class);
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (annotation instanceof XmlElement) {
XmlElement theElement = (XmlElement) annotation;
String name = f.getName();
if (theElement.required()) {
fieldMap.put(name, "true");
} else {
fieldMap.put(name, "false");
}
}
}
}
return fieldMap;
}