Как создать клиентское приложение для службы RESTful из wadl?

Учитывая файл application.wadl, как мне создать клиентское приложение (Spring или любое другое) и объекты домена из файла wadl?

Я старался :

wadl2java https://genologics.com/files/permanent/API/2.5/application.wadl
WADLToJava Error: java.lang.IllegalStateException: Single WADL resources element is expected

person Espresso    schedule 18.07.2015    source источник


Ответы (1)


Это мои выводы, просмотрев исходный код:

Как SourceGenerator.java, wadltojava пытается получить элемент "resources" из элемента "application" и ожидает, что он будет единственным.

private void generateResourceClasses(Application app, GrammarInfo gInfo, 
                                         Set<String> typeClassNames, File src) {
        Element appElement = app.getAppElement();
        List<Element> resourcesEls = getWadlElements(appElement, "resources");
        if (resourcesEls.size() != 1) {
            throw new IllegalStateException("Single WADL resources element is expected");
        }

        List<Element> resourceEls = getWadlElements(resourcesEls.get(0), "resource");
        if (resourceEls.size() == 0) {
            throw new IllegalStateException("WADL has no resource elements");
        }
        ........
   }

Я проверил предоставленный вами WADL и, похоже, есть только один элемент «ресурсы».

При дальнейшей проверке в методе getWadlElements() используется getWadlNamespace():

private List<Element> getWadlElements(Element parent, String name) {
        List<Element> elements = parent != null 
            ? DOMUtils.getChildrenWithName(parent, getWadlNamespace(), name)
            : CastUtils.cast(Collections.emptyList(), Element.class);
        if (!"resource".equals(name)) {    
            for (int i = 0; i < elements.size(); i++) {
                Element el = elements.get(i);
                Element realEl = getWadlElement(el);
                if (el != realEl) {
                    elements.set(i, realEl);
                }
            }
        }
        return elements;
    }

Пространство имен, используемое здесь в WadlGenerator.java

public static final String WADL_NS = "http://wadl.dev.java.net/2009/02";

Но в вашем WADL пространство имен кажется другим, как показано ниже, и может вызывать проблемы.

<wadl:application xmlns:wadl="http://research.sun.com/wadl/2006/10" xmlns:xs="http://www.w3.org/2001/XMLSchema">

Похоже, вы используете CXF, поэтому, насколько я понимаю, я бы посоветовал вам использовать ту же структуру, которая используется для создания WADL.

Обновление: Или установите WADL и XSD на свой локальный компьютер и вручную измените пространство имен в WADL на самое последнее и повторите попытку.

person Garry    schedule 19.07.2015
comment
спасибо за подробности. Было приятно узнать. Не уверен, какая структура использовалась для создания этого стороннего wadl. Я использовал CXF_HOME\bin\wadl2java.bat - person Espresso; 20.07.2015
comment
Если у вас есть WADL как локальный файл, попробуйте вручную изменить пространство имен на http://wadl.dev.java.net/2009/02 и повторите попытку. Если вы загружаете WADL, вам может потребоваться также загрузить XSD для грамматики и хранить их все в одном месте/папке. - person Garry; 20.07.2015