Гипермедиа с Джерси с использованием Atom - PullRequest
3 голосов
/ 22 мая 2011

Каждая книга в REST использует <atom:link href="..." rel="..."> для определения гипермедиа в приложениях RESTful;но Джерси ( с использованием JAXB ), похоже, не имеет такой поддержки.

Я пробовал @XmlSchema в package-info.java , как описано здесь ;Я также попытался расширить NamespacePrefixMapper , как объяснено там .Но ни один из них не работает и выдает это в лучшем случае:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer xmlns:ns2="http://www.w3.org/2005/Atom">
    <first-name>Roland</first-name>
    <ns2:link href="/customer/1" rel="self" />
</customer>

Использование пространства имен и, как следствие, Atom, кажется невозможным в Джерси.Я что-то пропустил?

пс.Я использую XSD для генерации @XmlElement классов, и на данный момент я создаю свой собственный класс Link.Есть ли схема или JAR для этого (jersey-atom зависимость maven использует rome, но без какой-либо помощи)

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

(Предполагая, что вы не интересуетесь префиксом пространства имен и просто хотите создать ссылки)

Вот мой подход к созданию ссылок.В моем классе ресурсов (служба отдыха Джерси) я возвращаю объект Java (ниже «Персона»), класс которого украшен аннотациями jaxb.Одно из свойств возвращает объекты атомных ссылок.

@XmlRootElement(namespace = Namespace.MyNamespace)
public class Person implements Serializable {
    private AtomLinks links = null;

    @XmlElement(name = "link", namespace = Namespace.Atom)
    public AtomLinks getLink() {
        if (this.links == null) {
            this.links = new AtomLinks();
        }

        return this.links;
    }
..
}

@XmlAccessorType(value = XmlAccessType.NONE)
public class AtomLinks extends ArrayList<AtomLink> {
..
}

@XmlAccessorType(value = XmlAccessType.NONE)
public class AtomLink implements Serializable {
    @XmlAttribute(name = "href")
    public URI getHref() {
        return href;
    }
    @XmlAttribute(name = "rel")
    public String getRel() {
        return rel;
    }
    @XmlAttribute(name = "type")
    public String getType() {
        return type;
    }
    @XmlAttribute(name = "hreflang")
    public String getHreflang() {
        return hreflang;
    }
    @XmlAttribute(name = "title")
    public String getTitle() {
        return title;
    }
..
}

public class Namespace {
    public final static String Atom = "http://www.w3.org/2005/Atom";
..
}

Перед возвратом моего объекта («Персона») я заполняю ссылки, создавая собственную ссылку и ссылки на другие связанные ссылки.Я использую объект uriInfo, который вставляет Джерси, чтобы получить базовый URL.Если это полезно, но вы хотите больше примеров, дайте мне знать, и я заполню пробелы.

1 голос
/ 03 июля 2012

Если я прав, в Джерси есть подход, чтобы внедрить ссылки на объекты.

См .: Руководство пользователя Jersey 2.9 Глава 6.

...