Как работает JAXB to JSON (и наоборот), используя Джерси? - PullRequest
2 голосов
/ 10 марта 2011

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

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();
            ...
    }
    ...
}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

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

0 голосов
/ 10 марта 2011

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

...