Сравнивая два объекта XmlBeans на равенство

У меня есть интерфейс XML Beans под названием SynonymsRequest с:

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, независимо от того, равны ли два экземпляра

Так каков правильный способ сделать это?

4 ответа

Если это не влияет на производительность вашей программы, вы можете сравнить их следующим образом:

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

В противном случае, я думаю, вам придется написать свой собственный компаратор.

Как я понимаю, сравнение сравнивает только два простых значения. Он не может вывести желаемый алгоритм сравнения.

Или я не понимаю, что именно вы имеете в виду?

Заметил это некоторое время назад - если два объекта имеют методы toString(), сгенерированные, когда они были созданы, то вы можете выполнить.equals для методов toString() объектов. Их можно сравнить с относительной легкостью, поскольку они проверят, эквивалентен ли выходной xml.

XmlBeans не поддерживает глубокое сравнение, поэтому вам придется написать свое собственное. Некоторое время назад в списке рассылки dev была ветка о сравнении с учетом схемы, но я не уверен, что с этим что-то случилось:

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

Другие вопросы по тегам