unexpected element (uri:"", local:"Group"). Expected elements are <{}group>
Encontre uma exceção ao desempacotar do xml
JAXBContext jc = JAXBContext.newInstance(Group.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Group group = (User)unmarshaller.unmarshal(new File("group.xml"));
A classe de grupo não tem nenhuma anotação e group.xml contém apenas dados.
Qualquer coisa pode ser a causa?
ObjectFactory
de fontes incorretas de fontes geradas, o que é mais provável se você estiver misturando dois diretórios de fontes geradas diferentes.Respostas:
Parece que seu documento XML tem o elemento raiz "Grupo" em vez de "grupo". Você pode:
fonte
@XmlRootElement(name = "MB") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "MB", propOrder = { "date", "time" })
mas estou percebendo queunexpected element (uri:"http://xx.title.com/new/response", local:"MB"). Expected elements are <{}Date>,<{}MB>,<{}Time>
também tenho@XmlElement(name="Date", required = true)
em cada campo. Onde e por que está dando errado? Eu também tentei remover@XmlRootElement
!@XmlSchema
inpackage-info.java
, corrigido agora.Você precisa colocar package-info.java no pacote jaxb gerado. Seu conteúdo deve ser algo assim
fonte
Felizmente, a classe de informações do pacote não é necessária. Consegui consertar o meu problema com a solução iowatiger08.
Aqui está minha correção, mostrando a mensagem de erro para ajudar a juntar os pontos para alguns.
Mensagem de erro
Código antes da correção
Código após correção
Você pode ver o namespace adicionado a @XmlRootElement conforme indicado na mensagem de erro.
fonte
Depois de examinar mais, o elemento raiz deve ser associado a um namespace de esquema, como Blaise está observando. Ainda, eu não tinha um java com informações de pacote. Portanto, sem usar a anotação @XMLSchema, consegui corrigir esse problema usando
Espero que isto ajude!
fonte
Esta é uma correção para um caso de uso de nicho muito bonito, mas sempre me incomoda. Se você estiver usando o gerador Eclipse Jaxb, ele cria um arquivo chamado package-info.
Se você excluir este arquivo, um xml mais genérico será analisado. De uma chance!
fonte
Eu tive o mesmo problema .. Isso me ajudou, eu estou especificando os mesmos nomes de campo de minhas classes como os nomes de tag no arquivo xml (o arquivo vem de um sistema externo).
Por exemplo:
Meu arquivo xml:
Minha classe de resposta:
Minha classe ESList:
Minha classe de item:
Minha classe RegionList:
Minha classe DemoUnmarshalling:
Dá:
fonte
Você precisa colocar a
package-info.java
classe no pacote de contextPath e colocar o código abaixo na mesma classe:fonte
O mesmo para mim. O nome da classe de mapeamento era,
Mbean
mas o nome da raiz da tag era,mbean
então eu tive que adicionar a anotação:fonte
Eu tive o mesmo problema. Eu adicionei os seguintes atributos a
<xs:schema..>
elementFormDefault = "qualificado" attributeFormDefault = "não qualificado"e regenerou classes java executando xjc, que corrigiu o package-info.java.
Isso resolveu o problema para mim.
fonte
Já estou com o mesmo problema e apenas altero conforme abaixo:
fonte
Eu tive o mesmo problema, meu problema era que eu tinha dois webservices diferentes com dois arquivos wsdl diferentes. Eu gerei os fontes no mesmo pacote para ambos os serviços da web, o que parece ser um problema. Acho que é por causa da ObjectFactory e talvez também por causa do package-info.java - porque eles são gerados apenas uma vez.
Eu resolvi isso, gerando as fontes para cada serviço da web em um pacote diferente. Dessa forma, você também tem dois ObjectFactories e arquivos package-info.java diferentes.
fonte
Caso você esteja enlouquecendo porque isso acontece apenas em seus testes e você está usando PowerMock esta é a solução, adicione-o no topo de sua classe de teste:
fonte
Nenhuma das soluções mencionadas aqui funcionou para mim, eu ainda estava recebendo:
Exceção no thread "principal" javax.xml.bind.UnmarshalException: elemento inesperado (uri: "java: XXX.XX.XX.XXX", local: "XXXXX")
Depois de muita pesquisa em outros sites, o código abaixo funcionou para mim-
fonte
Se nenhuma das opções acima funcionar, tente adicionar
@XmlRootElement(name="Group")
para as aulas do Grupo.fonte