Я работаю над веб-службой REST с использованием Джерси уже несколько дней, и мне удалось заставить работать все операции CRUD с несколькими форматами обмена: XML, JSON, Google Protobuf.
Однако я столкнулся с некоторыми проблемами, связанными с автоматически генерируемыми WADL и XSD.
Чтобы определить объекты, которыми обмениваются в этих трех форматах, я следовал подходу «сначала контракт»:
Однако, поскольку я хотел бы, чтобы мои пользователи могли также генерировать свои классы, я хотел бы поделиться этими файлами схемы (.xsd и .proto) и обеспечить их хорошую интеграцию с автоматически сгенерированный WADL.
Для этой цели, благодаря этойвики-странице:
/schema/schema.xsd
/schema/schema.proto
Я добавил файл грамматики приложения:
грамматики>
Я добавил настроенный генератор WADL:
public class RichWadlGeneratorConfig extends WadlGeneratorConfig {
@Override
открытый список configure() {
возвращаемый генератор (WadlGeneratorApplicationDoc.class)
.prop("applicationDocsStream", "application-doc.xml")
.generator(WadlGeneratorGrammarsSupport.class)
.prop("grammarsStream", "application-grammars.xml")
.описания();
}
}
Таким образом, когда я нажимаю /rest/application.wadl
в WADL, появляется следующее:
/rest/application.wadl/xsd0.xsd
автоматически сгенерирован из моих классов, но сильно отличаетсяот того, что у меня изначально было в schema.xsd
.
Кроме того, вызов такого инструмента, как wadl2java
в этом WADL, с треском проваливается, предположительно из-за
/schema/schema.xsd
и/rest/application.wadl/xsd0. xsd
теперь конфликтуют (два определения одних и тех же объектов).
Есть ли способ отключить генерацию и распространение этого автоматически созданного XSD? (Поскольку мне это не нужно, так как я следую этому подходу «сначала контракт»)
Если нет, есть ли способ «переопределить» его содержимое с помощью моего XSD, написанного вручную, когда /rest/application .wadl/xsd0.xsd
попал?
(Я погуглил и нашел о WadlResource для создания настроенного WADL, но ничего не нашел о самой генерации XSD)
Заранее спасибо за вашу помощь!
М.
1) Я поднял вопрос перед командой из Джерси и получил ответ: http://java.net/projects/jersey/lists/users/archive/2012-06/message/8
2) Я поднял тикет (JERSEY-1230), согласно инструкциям Павла. В настоящее время я пытаюсь либо отправить исправление самостоятельно, либо получить исправление от команды Джерси.