Прошло много времени с тех пор, как я в гневе использовал Java, поэтому, пожалуйста, простите меня, если это глупо.
Я только что начал работу над Java-проектом, в котором мы используем JAXB для десериализации входящей строки XML (от Jetty Server). В этой ситуации проект использует только JAXB.
Какие есть альтернативы JAXB?
Какие плюсы и минусы JAXB перед этими альтернативами?
Я немного погуглил и нашел много справочного материала, но есть ли окончательный источник, который является местом перехода для вопросов JAXB, или люди просто видят, что люди делают, и интерпретируют оттуда.
Спасибо.




Я использую JAXB для нескольких проектов. Я думаю, что самое лучшее в нем - это интеграция с новыми технологиями, такими как JAX-WS и JAX-RS (JSR 311, спецификация Restful).
Если вы обрабатываете входящий XML как строку с помощью Jetty, я бы серьезно подумал о рассмотрении JAX-RS. Он обрабатывает все связки JAXB за вас, а вы просто работаете с объектом.
Я был очень доволен JAXB через CXF как для стиля REST, так и для веб-служб SOAP.
В качестве альтернативы JAXB вы можете попробовать XFire (http://xfire.codehaus.org/) или Axis2 (http://ws.apache.org/axis2/). Кажется, это две популярные альтернативы, и я считаю, что обе они теперь являются жалобой на JAX-WS.
Я нашел JAX-B довольно полезным, и он мне нравится больше, чем многие другие альтернативы, особенно если я начинаю с нуля и генерирую схему из объектов Java, а не из объектов Java из схемы.
По моему опыту, по какой-то причине мне трудно получить хорошую документацию только с помощью поиска в Google. Лучшая электронная документация представлена в загрузке JAX-B, где вы также найдете множество примеров. «SOA с использованием веб-служб Java» тоже имеет неплохой обзор.
Что касается альтернатив, то есть:
и, возможно, еще несколько.
На ум приходит XML Bean (http://xmlbeans.apache.org/)
Одним из плюсов JAXB является то, что теперь он поставляется вместе с JDK6. Вывод сгенерирован действительно плотно и эффективно. В настоящее время мы конвертируем всю нашу реализацию XML Bean для использования JAXB 2. Большой минус, который мы видели, - это отсутствие операций, связанных с XSD.
В последний раз, когда я использовал XML Beans, произошла утечка примерно 100% экземпляров классов. Пытаясь выяснить, почему я взглянул на один из самых диких исходных кодов, которые я видел, мы перестали его использовать. Это было 2-3 года назад, так что сейчас может быть лучше.
JAXB теперь также является фактическим связыванием для JAX-RS для создания служб REST на Java.
XStream действительно хорош, если у вас есть объектная модель для XML, который вы пытаетесь проанализировать.
Однако XStream не может правильно работать с пространствами имен. Считаю это большим недостатком.
Я пробовал многие из перечисленных предложений и всем им предпочитаю простой. Он относительно новый в общем смысле, но зрелый и стабильный, и, похоже, в нем учтено множество жалоб со стороны других XML-фреймворков. Я настоятельно рекомендую прочитать первую страницу и, если возможно, быстро доказать наличие прототипа концепции в вашем проекте.
Другими альтернативами могут быть Castor, JibX, XMLBeans или JDOM.
На самом деле я использовал Castor. Это лучше, чем JAXB в случае привязки xml. Он предоставляет функциональные возможности для сопоставления ваших существующих Java-бинов.
JAXB также может отображать ваши существующие Java-бины.
Смотрите здесь: http://jcp.org/en/jsr/all для JSR-222. В этом запросе на спецификацию Java указывается стандарт (платный).
Один большой недостаток JAXB (при использовании аннотаций в переданных объектах) заключается в том, что Android не поддерживает аннотации JAXB (классы неизвестны), и вы не можете добавить их вручную. Также см. Использование JAXB с Google Android
Еще один большой плюс, который я обнаружил при использовании JAXB, заключается в том, что теперь это де-факто для всех привязок JAX-WS. Всегда приятно не добавлять в свой проект тонны сторонних расширений; Большинство других технологий потоковой передачи XML попросят вас добавить Apache Commons.