unexpected element (uri:"", local:"Group"). Expected elements are <{}group>
Spotkaj się z wyjątkiem podczas cofania odczytu z XML
JAXBContext jc = JAXBContext.newInstance(Group.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Group group = (User)unmarshaller.unmarshal(new File("group.xml"));
Klasa Group nie ma adnotacji, a group.xml zawiera tylko dane.
Coś może być przyczyną?
ObjectFactory
z wygenerowanych źródeł, co jest bardziej prawdopodobne, jeśli mieszasz dwa różne wygenerowane katalogi źródłowe.Odpowiedzi:
Wygląda na to, że Twój dokument XML zawiera element główny „Grupa” zamiast „grupa”. Możesz:
źródło
@XmlRootElement(name = "MB") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "MB", propOrder = { "date", "time" })
ale dostaję, żeunexpected element (uri:"http://xx.title.com/new/response", local:"MB"). Expected elements are <{}Date>,<{}MB>,<{}Time>
mam też@XmlElement(name="Date", required = true)
na każdym polu. Gdzie i dlaczego dzieje się źle? Próbowałem też usunąć@XmlRootElement
!@XmlSchema
wpackage-info.java
, naprawiony teraz.Musisz umieścić package-info.java w wygenerowanym pakiecie jaxb. Jego treść powinna być mniej więcej taka
źródło
Na szczęście klasa informacji o pakiecie nie jest wymagana. Udało mi się rozwiązać mój problem za pomocą rozwiązania iowatiger08.
Oto moja poprawka pokazująca komunikat o błędzie, aby pomóc niektórym połączyć kropki.
Komunikat o błędzie
Kod przed poprawką
Kod po poprawce
Możesz zobaczyć przestrzeń nazw dodaną do @XmlRootElement, jak wskazano w komunikacie o błędzie.
źródło
Po dokładniejszym przyjrzeniu się, element główny musi zostać powiązany z przestrzenią nazw schematu, jak zauważył Blaise. Nie miałem jeszcze pakietu java. Tak więc bez adnotacji @XMLSchema mogłem rozwiązać ten problem za pomocą
Mam nadzieję że to pomoże!
źródło
To poprawka na całkiem niszowy przypadek użycia, ale za każdym razem mnie dostrzega. Jeśli używasz generatora Eclipse Jaxb, tworzy on plik o nazwie informacje o pakiecie.
Jeśli usuniesz ten plik, umożliwi to przeanalizowanie bardziej ogólnego pliku XML. Spróbuj!
źródło
Miałem ten sam problem .. Pomogło mi, podaję takie same nazwy pól moich klas, jak nazwy tagów w pliku xml (plik pochodzi z systemu zewnętrznego).
Na przykład:
Mój plik xml:
Klasa My Response:
Moja klasa ESList:
Klasa mojego przedmiotu:
Moja klasa RegionList:
Moja klasa DemoUnmarshalling:
To daje:
źródło
Musisz umieścić
package-info.java
klasę w pakiecie contextPath i umieścić poniższy kod w tej samej klasie:źródło
To samo dla mnie. Nazwa klasy mapowania była,
Mbean
ale nazwa główna znacznika była,mbean
więc musiałem dodać adnotację:źródło
Miałem ten sam problem. Dodałem następujące atrybuty do
<xs:schema..>
elementu elementFormDefault = "qualified" attributeFormDefault = "unqualified"i ponownie wygenerowałem klasy java, uruchamiając xjc, co poprawiło informacje o pakiecie.java.
To rozwiązało problem.
źródło
Mam już ten sam problem i po prostu zmieniam jak poniżej:
źródło
Miałem ten sam problem, mój problem polegał na tym, że miałem dwie różne usługi sieciowe z dwoma różnymi plikami wsdl. Wygenerowałem źródła w tym samym pakiecie dla obu usług sieciowych, co wydaje się być problemem. Wydaje mi się, że dzieje się tak z powodu ObjectFactory, a być może także z powodu pliku package-info.java - ponieważ są one generowane tylko raz.
Rozwiązałem to, generując źródła dla każdej usługi sieciowej w innym pakiecie. W ten sposób masz również dwa różne pliki ObjectFactories i package-info.java.
źródło
Jeśli oszalejesz, ponieważ dzieje się to tylko w Twoich testach i używasz PowerMock, oto rozwiązanie, dodaj je do swojej klasy testowej:
źródło
Żadne z wymienionych tutaj rozwiązań nie zadziałało, nadal otrzymywałem:
Wyjątek w wątku „main” javax.xml.bind.UnmarshalException: nieoczekiwany element (uri: „java: XXX.XX.XX.XXX”, lokalny: „XXXXX”)
Po wielu badaniach w innych witrynach poniższy kod zadziałał dla mnie-
źródło
Jeśli żadne z powyższych nie działa, spróbuj dodać
@XmlRootElement(name="Group")
do zajęć grupowych.źródło