Это мои выводы, просмотрев исходный код:
Как 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