我有一个多模块maven项目。这是jaxb使用xsd生成的一组类。下面给出了此类类别的示例。(无getter和setter)
@XmlRootElement(name = "IPPAMUser")
public class IPPAMUser {
@XmlElement(name = "UserName", required = true)
protected String userName;
@XmlElement(name = "PAMInstanceID", required = true)
protected String pamInstanceID;
@XmlElement(name = "Product", required = true)
protected String product;
@XmlElement(name = "Password", required = true)
protected String password;
@XmlElement(name = "PasswordAlogo", required = true)
protected String passwordAlogo;
@XmlElement(name = "LastUpdatedOn", required = true)
protected String lastUpdatedOn;
@XmlElement(name = "IsGenerated")
protected boolean isGenerated;
@XmlElement(name = "LastNotifiedOn", required = true)
protected String lastNotifiedOn;
}
一个模块需要它们作为键值对。因此,有一个方法编写了反射,将它们转换为键值对列表。在这种情况下,字段的名称用作键,值用作其值。如下所示。
Field[] fields = t.getClass().getDeclaredFields();
for(Field field : fields) {
Annotation anotation = field.getAnnotation(XmlElement.class);
XmlElement xmlElement = (XmlElement) anotation;
String methodName;
String parameterValue = "";
if(field.getType() == boolean.class){
methodName = "is" + xmlElement.name();
} else {
methodName = "get" + xmlElement.name();
}
try {
Method method = t.getClass().getDeclaredMethod(methodName);
if(method.invoke(t) == null){
continue;
}
parameterValue = method.invoke(t).toString();
} catch (NoSuchMethodException e) {
log.error("Method not found. Method : " + methodName, e);
log.error("Stack trace : {}", AuthUtils.getPrintableStackTrace(e));
} catch (InvocationTargetException e) {
log.error("Method invoking failed. Method : " + methodName, e);
log.error("Stack trace : {}", AuthUtils.getPrintableStackTrace(e));
} catch (IllegalAccessException e) {
log.error("Illegal access " + e);
log.error("Stack trace : {}", AuthUtils.getPrintableStackTrace(e));
}
}
有一些使用这种转换的测试用例。它们工作正常,并使用maven构建执行。为了获得代码覆盖率,添加了Jacoco-maven-plugin。运行时不会生成jacoco.exec文件。根据此后执行目标被添加到我的pom文件中。之后,我的单元测试失败,给出空指针异常。根据堆栈跟踪,它是在执行“xmlElement.name()”时引起的,这意味着xmlElement为空。因此,在添加执行目标后,反射无法获得注释。
如何使用jacoco或任何其他方法解决此问题并获取代码覆盖率报告。
提前谢谢。
我自己想出解决方案。当Jacoco准备代理时,它会将一些合成字段包含到类中。因此,当它试图获取它时,没有所需注释的合成字段会包含在字段列表中。
作为反射中的最佳实践,请检查您访问的每个字段的isSynthy()。这将避免您访问编译器添加的字段以及Jacoco等工具。有关更多参考资料,请参阅这些链接。
合成场地Jacoco合成场地
问题内容: 我正在尝试使用Java批注,但似乎无法使我的代码认识到其中存在。我究竟做错了什么? 问题答案: 您需要使用注释界面上的@Retention注释将注释指定为运行时注释。 即
当我在spring aop拦截类上使用注释时,我使用了@target limit匹配方法。但调试时,会提示以下错误。 我的切入点是这样的 其中TimeIt是注释: 我把切点改成能跑了 我不太理解的是,MetricsFilter 类没有这个注释,那么为什么要生成代理呢?任何人都可以帮我吗?谢谢。
但是,由于某种原因,总是,所以我不确定这是注释类的问题还是我使用反射的方式的问题。我很确定是后者,因为在调试时,我发现它能够访问带有注释的方法。如有任何帮助,不胜感激,谢谢!
我有一个简单的类叫BeaconDao 然而,当我用@service或@component标记beaconDao时,一切都运行得非常好。有人能看出问题所在吗?
问题内容: 我知道有一些关于此的帖子,但是它们大约一年了,没有任何回应。实际上,我们在PostgreSQL 8.4上使用的是Hibernate 4.2.1.Final。我们有两个这样的实体 实体A(顶级层次结构类) 实体B(子类) 如您所见,使用注释了一个实体,但是当使用来获取顶级类时 我们也通过属性获得了B子类。实际上,SQL语句包含。这仍然是Hibernate第四版中的错误,还是我做错了什么?
问题内容: 我从Spring Framework开始,想做一个带有注释的HelloWorld,我已经创建了一个控制器和一个视图,我猜它是基本的hello工作。但是,我想使用注释,因为我不能再使用SimpleFormController(已弃用)。 我收到的错误是Estado HTTP 404-/av/index.jsp 我正在使用Netbeans,并将示例基于它提供的基本模板。我有以下文件,我可以