Tenho um problema em relação aos métodos unmarshal que retornam JAXBElement<T> da interface javax.xml.bind.Unmarshaller.
O problema é que o JAXBElement retornado traz apenas os atributos da minha tag XML, mas não trás os elementos. Debugando isso, eu vi que o QName dele (atributo name) está errado e o scope está em GlobalScope, porém tais campos são protected final e a instância do JAXBElement é criada pela implementação do Unmarshaller em algum lugar das profundezas do JAXB. Não achei nenhum método no Unmarshaller para definir o name e/ou o scope.
mas isso não deveria fazer diferença. De qualquer maneira, teste para ver se é isso.
[]´s
Infelizmente, não fez diferença mesmo.
A
Alexandre_Saudate
Observe que a idéia era mudar o nome da propriedade, mesmo, não do getter. Foi isso que você fez?
[]´s
F
felipeguerra
asaudate:
Observe que a idéia era mudar o nome da propriedade, mesmo, não do getter. Foi isso que você fez?
[]´s
Desculpe, quem mudou foi o FMK ao gerar a classe novamente…mas eu não entendi, qual é a relação do nome da propriedade e o respectivo ‘get’ como problema?
Abraço!
A
Alexandre_Saudate
felipeguerra:
asaudate:
Observe que a idéia era mudar o nome da propriedade, mesmo, não do getter. Foi isso que você fez?
[]´s
Desculpe, quem mudou foi o FMK ao gerar a classe novamente…mas eu não entendi, qual é a relação do nome da propriedade e o respectivo ‘get’ como problema?
Abraço!
A classe está configurada para ter acesso direto para a propriedade. Ou seja, é o nome da propriedade que deve ser alterado. O nome do getter não faz diferença.
[]´s
A
Andre_Fonseca
victorwss:
Oi pessoal.
Tenho um problema em relação aos métodos unmarshal que retornam JAXBElement<T> da interface javax.xml.bind.Unmarshaller.
O problema é que o JAXBElement retornado traz apenas os atributos da minha tag XML, mas não trás os elementos. Debugando isso, eu vi que o QName dele (atributo name) está errado e o scope está em GlobalScope, porém tais campos são protected final e a instância do JAXBElement é criada pela implementação do Unmarshaller em algum lugar das profundezas do JAXB. Não achei nenhum método no Unmarshaller para definir o name e/ou o scope.
Alguém aí já pegou um problema parecido?
Vitor,
No JAXB para que ele não crie os objetos todos como inner classes quando é feito o unmarshall do xml é necessário usar escopo global, usando escopos globais é necessário usar JAXBElement
Uma outra alternativa para resolver este seu problema (trabalhar com JAXBElement definindo o QNAME) é você usar algo parecido com o código abaixo
JAXBElement<MeuObjeto> element = new JAXBElement(new QName(
"http://example.org", "MeuObjeto", "n1"), MeuObjeto.class,
results);
No JAXB para que ele não crie os objetos todos como inner classes quando é feito o unmarshall do xml é necessário usar escopo global, usando escopos globais é necessário usar JAXBElement
Uma outra alternativa para resolver este seu problema (trabalhar com JAXBElement definindo o QNAME) é você usar algo parecido com o código abaixo
JAXBElement<MeuObjeto> element = new JAXBElement(new QName(
"http://example.org", "MeuObjeto", "n1"), MeuObjeto.class,
results);
Dê uma olhada no código que estou colocando em anexo… é o teste que eu rodei aqui.
[]´s
A
Andre_Fonseca
[quote=felipeguerra]
André Fonseca:
Não entendi a aplicação no meu caso, onde o WSDL que originou as classes, é algo mais ou menos assim:
Não seria para o seu caso, esse código que postei serve para trabalhar com o Escopo Global de objetos anotados que não possuem o XMLRootElement (foi o que o Victor falou no primeiro post)
[]´s
F
felipeguerra
André Fonseca:
felipeguerra:
Não entendi a aplicação no meu caso, onde o WSDL que originou as classes, é algo mais ou menos assim:
Não seria para o seu caso, esse código que postei serve para trabalhar com o Escopo Global de objetos anotados que não possuem o XMLRootElement (foi o que o Victor falou no primeiro post)
[]´s
Entendido!
valeu
F
felipeguerra
asaudate:
Felipe,
Dê uma olhada no código que estou colocando em anexo… é o teste que eu rodei aqui.
[]´s
O meu código está igual no que tange a forma, ou seja, usei de classes diferentes para fazer a mesma coisa que o seu código…porém, ainda não funciona.
Se eu conseguisse depurar o FMK…
F
felipeguerra
Pessoal, resolvi o problema, agreguei o cabeçalho e o namespace ao XML de entrada e pronto!