2009-03-31 2 views
0

У меня есть POJO, которое я хотел бы представить как XML из веб-службы, желательно с помощью JAX-B.Ролевая игра или стиль корзины Java-привязка bean?

Поля, которые должны отображаться в XML, зависят от того, какой тип пользователя выполняет запрос. Например, мы играем роль пользователей HumanResources и Finance. Пользователь может быть определен как:

@XmlRootElement

общественного класса пользователя {

@XmlElement общественности Строка someHumanResourceData;

@XmlElement public String someFinanceData;

}

Я хочу, чтобы пользователи HR, чтобы увидеть данные HR и финансов, чтобы увидеть данные финансов, но не более того. HR не должен видеть финансовые данные.

Есть ли рекомендуемый подход к тому, как это сделать? Какие условия поиска я могу использовать для поиска дополнительной информации в Интернете?

Несколько идей, которые я не нахожу привлекательными: 1) Я мог бы использовать подклассы, чтобы выставлять объекты FinanceUser и HumanResourceUser, которые имеют только соответствующие данные, и родительский пользователь с общими данными. Однако это хрупкое и может работать на небольшом примере, я считаю, что мне нужен более гибкий, композиционный подход для производства. 2) Сотрудник рекомендует подход «корзины покупок», в котором клиент запрашивает, какие поля он хочет с каждым запросом. Я не нахожу стандартного способа сделать это или даже многих других людей, которые сделали такой подход. Это звучит действительно самодельно и трудоемко для меня.

Другие идеи?

ответ

0

Почему вы просто не проверяете роль пользователя в реализации веб-службы на стороне сервера?

Какой у вас веб-интерфейс?

public interface DarcysWebService { 
    public HumanResourceResponse getHumanResourceData(Authentication a, HumanResourceRequest req); 
    public FinanceResponse getFinanceData(Authentication a, FinanceRequest req); 
} 

Я бы тогда проверить данные аутентификации (имя пользователя, пароль) против базы данных пользователей (UUID, имя пользователя, пароль, роли), а затем использовать роль для определения ответа, является ли сообщение " Ошибка - у вас нет прав доступа »или для фактического заполнения полей данных/объектов в ответе запрошенными данными.

+0

Это решение является опцией №1 от исходного поста, не так ли? Вы создали два типа: HumanResourceResponse и FinanceResponse. Исходя из некоторых критериев, вы возвращаете другой подтип. Я ищу что-то композиционное и гибкое. –

+0

Вам нужен веб-сервис? Вы хотите ограничить возвращаемые данные. У вас может быть объект «DarcyWSResponse», в котором есть члены «FinanceData» и «HRData», которые могут распространять общий объект. Я просто говорю, что удобно переносить параметры веб-службы и ответ в объекте. – JeeBee

+0

И я бы, конечно же, разработал веб-службу с точки зрения того, какие операции вы хотите получить в веб-службе, а не в структуре данных. API-интерфейсы веб-сервисов (Ajax, JAX-B (?)) Будут обрабатывать все кодировки XML и SOAP прозрачно. – JeeBee