比较两个XmlBeans对象是否相等

时间:2011-10-17 16:23:12

标签: java xmlbeans

我有一个名为SynonymsRequest的XML Beans接口:

public interface SynonymsRequest extends org.apache.xmlbeans.XmlObject {...}

我想测试两个SynonymsRequest实例是否相等:

SynonymsRequest s1 = SynonymsRequest.Factory.newInstance();
s1.setQueryText("blub");
s1.setRequesterId(BigInteger.valueOf(1));       
SynonymsRequest s2 = SynonymsRequest.Factory.newInstance();
s2.setQueryText("guck");
s2.setRequesterId(BigInteger.valueOf(1));

我尝试了以下内容:

  1. assertTrue(s1.equals(s2)); =>断言没有通过
  2. assertEquals(0, s1.compareTo(s2)); =>抛出ClassCastException
  3. assertEquals(0, s1.compareValue(s2)); =>断言没有通过(返回2,不可比较)
  4. assertTrue(s1.valueEquals(s2)); =>无论两个实例是否相等,总是返回true
  5. 那么这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:3)

如果它不影响程序的性能,您可以像这样比较它们:

assertTrue(s1.xmlText().equals(s2.xmlText()));

否则,我猜您必须编写自己的自定义比较器。

答案 1 :(得分:1)

据我了解,比较仅比较两个简单值。它无法扣除您想要的比较算法。

或者我不明白你到底是什么意思?

答案 2 :(得分:0)

XmlBeans不支持深度比较,因此您必须自己编写。不久之前,dev邮件列表上有一个关于模式识别比较的线程,但我不确定是什么东西成了它:

http://www.mail-archive.com/dev@xmlbeans.apache.org/msg01960.html

答案 3 :(得分:0)

一会儿注意到这一点 - 如果两个对象在制作时生成了toString()方法,那么你可以在对象的toString()方法上使用.equals。这些可以与相对易用性进行比较,因为它们将检查输出xml是否相等。