Проблемы с WADL/сгенерированным XSD с использованием Джерси с подходом, основанным на контракте

Я работаю над веб-службой REST с использованием Джерси уже несколько дней, и мне удалось заставить работать все операции CRUD с несколькими форматами обмена: XML, JSON, Google Protobuf.

Однако я столкнулся с некоторыми проблемами, связанными с автоматически генерируемыми WADL и XSD.


Контекст

Чтобы определить объекты, которыми обмениваются в этих трех форматах, я следовал подходу «сначала контракт»:

  • из XSD, который я написал, я создал свои классы моделей, используя JAXB ;
  • из эквивалентного прото-файла, который я написал, я сгенерировал классы Google Protobuf (и внутри у меня есть способ преобразовать их в объекты, сгенерированные JAXB, чтобы иметь одну уникальную модель).

Однако, поскольку я хотел бы, чтобы мои пользователи могли также генерировать свои классы, я хотел бы поделиться этими файлами схемы (.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

теперь конфликтуют (два определения одних и тех же объектов).


Вопросы

  1. Есть ли способ отключить генерацию и распространение этого автоматически созданного XSD? (Поскольку мне это не нужно, так как я следую этому подходу «сначала контракт»)

  2. Если нет, есть ли способ «переопределить» его содержимое с помощью моего 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), согласно инструкциям Павла. В настоящее время я пытаюсь либо отправить исправление самостоятельно, либо получить исправление от команды Джерси.

55
задан Marc Carré 20 June 2012 в 07:16
поделиться