Как JAXB в JSON (и наоборот) работает с использованием Джерси?

Я успешно внедрил успокоительный сервис, который работает с моим собственным клиентом. Теперь я хочу сделать его сервисом, с которым могут взаимодействовать и другие клиенты. Таким образом, я прихожу к следующим вопросам: (снимки моего кода идут после моих вопросов, система отлично работает с моим кодом)

1- Как выглядят данные, передаваемые между сервером и клиентом? Учтите, что я не использовал никакие другие аннотации JAXB (например, @XMLElement). Есть ли способ увидеть созданный JSON?

2- JAXB должен быть «Архитектурой Java для привязки XML», поэтому отправляет ли он данные в виде XML или JSON (учитывая, что я указал тип запроса как json)? Или он преобразует объект в XML, а затем в JSON на клиенте, а на сервере получает JSON и преобразует его в XML, а затем в объект Java?

3- Я использую JAXB в своем клиенте, но мой сервер должен получить запрос json. Означает ли это, что любой другой клиент, если он создает json с парами «ключ» и «значение», может взаимодействовать с моим сервером? Или это заставляет каждого клиента использовать JAXB (учитывая, что мой метод на сервере имеет входные аргументы конкретного объекта JAXBBean)? К сожалению, в настоящее время я не знаю, как создать и отправить json на Java без использования JAXB! Итак, я не мог проверить этот вопрос, прежде чем задать. Я собираюсь изучить его позже.

Части моего кода:

Я использовал Джерси для реализации своего спокойного сервиса. На стороне клиента я отправляю почтовое сообщение со списком объектов JAXB на сервер. Каждый объект JAXB является экземпляром bean-компонента, аннотированного следующим образом:

@XmlRootElement
public class JAXBBean {

String key;
String val;

//setters and getters (with no annotation) come here
...
}

И я отправляю список на сервер, используя:

String response = (String) publishWR.type("application/json").post(String.class, new GenericEntity<List<JAXBBean>> (reqArr){});
// publishWR is of type: com.sun.jersey.api.client.WebResource
// reArr is of type: List<JAXBBean>

На стороне сервера у меня есть метод, который отвечает на запросы публикации на этом веб-ресурсе, который написан так:

@POST 
@Consumes("application/json")    
public String postAnnotation(List<JAXBBean> requestArr){
    String anno = "";
    String user = "";
    ...

    for(int i = 0 ; i < requestArr.size() ; i++ ){
            if( requestArr.get(i).getKey().equals("annotation") )
                anno = requestArr.get(i).getVal();
            else if( requestArr.get(i).getKey().equals("username") )
                user = requestArr.get(i).getVal();
            ...
    }
    ...
}

Спасибо!


person samaneh    schedule 10.03.2011    source источник
comment
Не могу помочь тебе с Джерси. Если вы хотите знать, как CXF делает это с Джексоном и JAXB, я могу рассказать вам.   -  person bmargulies    schedule 10.03.2011


Ответы (2)


1- Вы можете загрузить ответ JSON с помощью браузера и просмотреть его с помощью простого текстового редактора (проверить и отформатировать JSON ).
2- Нет, поставщик JSON на Джерси использует Jackson, который сериализует/десериализует объекты непосредственно в JSON и вернуться к объекту Java.
3- Да, каждый клиент может прочитать ваш ответ JSON.

person sdorra    schedule 10.03.2011

Для этого Джерси использует библиотеку Jettison. Jettison преобразует JSON в/из StAX, который обрабатывается реализацией JAXB:

person bdoughan    schedule 10.03.2011