Компилятор JAXB и порядок атрибута

Для стандартного программирования маленького материала я сделал очень простой прием для легкой отладки моего сервиса:

На запуске сервиса, я проверяю на параметр командной строки "/отладку". Если сервис называют с этим параметром, я не делаю обычного сервисного запуска, но вместо этого запускаю всех слушателей и просто отображаю messagebox "Происходящая отладка, нажимаю хорошо для окончания".

Поэтому, если мой сервис запускается обычный путь, он запустится как сервис, если он будет запущен с параметра командной строки / отладка, то он будет действовать как нормальная программа.

В VS я просто добавлю отладку / как отладку параметра и запущу служебную программу непосредственно.

Этот путь я могу легко отладить для самых небольших добрых проблем. Конечно, некоторый материал все еще должен будет быть отлажен как сервис, но для 99% это достаточно хорошо.

5
задан daveg 30 November 2009 в 19:00
поделиться

4 ответа

Этот поток предоставляет отличное решение моей проблемы.

Использование XSL для сортировки атрибутов

Один из ответов содержит преобразование xsl, которое просто меняет порядок атрибутов. Отлично работает, если немного медленно.

0
ответ дан 14 December 2019 в 13:38
поделиться

I'd recommend using an XML parser to validate the output instead of doing textual comparisons. If you're going to be parsing the xml to re-order it anyway, you may as well just do the comparison using XML tools.

Edit: Attempting to control the generated XML by manipulating the Java source code order seems like a fragile way of doing things. Granted, this is for testing only, so if something breaks the code might still work properly. People change source code order all the time, sometimes by accident, and it will be annoying or a subtle source of problems if you have to rely on a certain ordering.

As for ways of comparing the XML data using XML tools, I've never personally done this on a large scale, but this link mentions a few free tools. For me the extension to JUnit that provides XML-related assertions would be my first step, as that could integrate well with my existing tests. Otherwise, since you're mainly looking for exact equivalence, you could just parse the two XML files, then iterate over the nodes in the 'expected' file and see if those nodes are present in the 'actual' file. Then just check for any other nodes that you don't expect to see.

1
ответ дан 14 December 2019 в 13:38
поделиться

Если вам нужно выполнить текстовое сравнение документов XML, есть лучшие способы сделать это, чем пытаться контролировать вывод структуры XML, которая не различает порядок атрибутов.

Например, есть XMLUnit , который является расширением junit специально для утверждений XML, и он довольно хорошо обрабатывает пробелы и упорядочивает.

Более общим решением является XOM's Canonicalizer , который выводит модели DOM XML таким образом, что порядок атрибутов и пробелы предсказуемы. Очень удобно.

Итак ... пусть JAXB (или что-то еще) сгенерирует XML по своему усмотрению, затем прогонит выходные данные через XMLUnit или XOM и сравнит. Это имеет дополнительное преимущество: он не зависит от JAXB и работает с любым сгенерированным XML.

1
ответ дан 14 December 2019 в 13:38
поделиться

Видимо, в JAXB 2.0 можно использовать аннотацию @XmlAccessorOrder или @XmlType(propOrder=)

.
4
ответ дан 14 December 2019 в 13:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: