Как сгенерировать XSD для полей Map <Long, Map <String, String >> и подобной коллекции гнезд внутри карты - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь сгенерировать XSD из класса Java с помощью Eclipse. Мое поле таково.

private Map<EnumType1, SortedSet<JavaClass2>> choices; У меня также есть метод получения, как показано ниже. Это пример кода, измененный по сравнению с реальным кодом, но с намерением.

public Map<EnumType1, SortedSet<JavaClass2>> getChoices() {
    return choices;
}

Ошибка Jaxb

Я думаю, что JAXB не генерирует XML-схему для полей, в которых есть вложенная коллекция. Какое решение для таких полей?

Я добавил тег @XmlTransient на метод получения, чтобы избежать исключения, и сгенерировал схему без этих типов полей.

Дополнительные поля этого шаблона выдают исключение, как показано ниже - пример кода public Map<Long, Map<String, String>> getMyMap() { return null; }

Сообщение об ошибке выглядит следующим образом

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts 
of IllegalAnnotationExceptions
java.util.SortedSet is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
    at java.util.SortedSet

усеченное исключение

at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:106)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:471)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:303)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:139)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1156)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:165)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:247)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:441)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
at org.eclipse.jpt.jaxb.core.schemagen.Main.buildJaxbContext(Main.java:99)
at org.eclipse.jpt.jaxb.core.schemagen.Main.generate(Main.java:78)
at org.eclipse.jpt.jaxb.core.schemagen.Main.execute(Main.java:64)
at org.eclipse.jpt.jaxb.core.schemagen.Main.main(Main.java:49)`
...