使用Lambdaj浏览Dom4j元素

时间:2012-03-26 21:58:48

标签: junit4 dom4j lambdaj

对于熟悉lambdaj(不是我)的人来说,你之前会看到这个堆栈跟踪或一些变体:

  

ch.lambdaj.function.argument.ArgumentConversionException:无法执行   将占位符org.dom4j.tree.AbstractAttribute转换为有效的   争论在   ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:92)     在   ch.lambdaj.function.matcher.HasArgumentWithValue.havingValue(HasArgumentWithValue.java:70)     在ch.lambdaj.Lambda.having(Lambda.java:1204)

我的理解是,这是通过限制lambdaj和最终类来实现的。

我在测试以下代码时得到了上述代码:

import static ch.lambdaj.Lambda.having;
import static ch.lambdaj.Lambda.selectFirst;
import static org.hamcrest.CoreMatchers.equalTo;

import java.util.List;

import org.dom4j.tree.AbstractAttribute;
public class DocumentUtils {

    public static String getAttributeValueFromListByName(
            List<AbstractAttribute> list, String name) {

        AbstractAttribute requiredAttribute = selectFirst(list,
                having((AbstractAttribute.class).getName(), equalTo(name)));

        String value = requiredAttribute.getValue();

        return value;

    }

}

我一直在使用dom4j的Attribute接口,遇到同样的问题,然后想到lambdaj可能不喜欢接口..所以我切换到AbstractAttribute抽象类。

lambdaj和抽象类有问题吗?或者我的方法只是裤子?任何想法如何解决这个问题?

仅供参考:我正在使用lambdaj 2.4和dom4j 1.6

提前多多感谢。

2 个答案:

答案 0 :(得分:0)

如果您正在使用lambdaj 2.4,那么您很幸运,因为该版本已修复此问题。问题及其解决方案在lambdaj 2.4的release notes的第一点中描述。

特别是lambdaj使用内部启发式来创建Argument的占位符,但在某些情况下它不起作用,因此您可以按照那里的说明覆盖它。

答案 1 :(得分:0)

根据Mario Fusco(LambdaJ开发人员)的要求,已经使用lambdaj提出了第92期