#java #xml #data-binding #cxf #jax-rs
#java #xml #привязка к данным #cxf #jax-rs
Вопрос:
Мне нужно настроить отображение Java-компонентов в XML без изменения самого объекта (нельзя добавлять аннотации, такие как @XmlRoolElement или @Transient). Я использую CXF для предоставления веб-служб REST.
Комментарии:
1. Как вам нужно это настроить? Почему вы не можете изменить класс Java? Если ваш класс сгенерирован из XSD, вы можете изменить XSD… Ваши требования довольно расплывчаты, и нет реального вопроса
2. Не может быть более понятным. Если вы хотите знать, почему, потому что существует множество интерфейсов, которые предоставляют эти объекты, каждый по-своему, а не только XML. JSON тоже (это достигается с помощью Jackson Mixins).
Ответ №1:
Да, это можно сделать.
Одно из последних расширений CXF JAX-RS позволяет пользователям предоставлять внешним моделям информацию, которую среда выполнения обычно получает из аннотаций JAX-RS, таких как @Path, @PathParam, @Consumes, @Products и т.д. Может быть несколько случаев, когда может быть выгодно описать, как данный ресурс может быть представлен как RESTful service без фактического изменения этого ресурса. Например, когда регистрируются новые реализации динамического интерфейса, когда исходный код не может быть изменен, когда стоимость будущих обновлений (например, изменение значения аннотаций @Path) считается дорогостоящей и т.д.
Обновить
Возможно, было бы лучше использовать Aegis для вашей привязки данных, а не JAXB (привязка данных по умолчанию для cxf). Проверьте эту часть документации и эту часть. И полный пример от ibm
Комментарии:
1. Я считаю, что это только для аннотаций конфигурации службы CXF. Мне нужно внешне настроить сопоставления сущностей