Сравнивая два объекта 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));
Я пробовал следующее:
assertTrue(s1.equals(s2));
=> утверждение не проходитassertEquals(0, s1.compareTo(s2));
=> выбрасывает ClassCastExceptionassertEquals(0, s1.compareValue(s2));
=> утверждение не проходит (возвращает 2, не сравнивается)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