[Resolvido] Unmarshaller

Pessoal, estou com um pequeno problema, tenho um webservice que retorna dados de endereços, estou tentando usar Unmarshaller para que eu consiga instanciar minha classe de endereço que utlizarei em outros metodos do meu codigo…
porem quando chego na linha em que passoa URL ele retorna a seguinte exeption
“javax.xml.bind.UnmarshalException: unexpected element (uri:”", local:“webservicecep”). Expected elements are <{}wsCep>"

segue o codigo que utilizo para isso …

[code]
public class BuscarCep {
public static WsCep getEndereco(String cep) throws JAXBException, MalformedURLException{

	  JAXBContext jc = JAXBContext.newInstance(WsCep.class);
	
       Unmarshaller u = jc.createUnmarshaller();
            //url do Webservice recebendo o parametro do CEP
       URL url = new URL( "http://cep.republicavirtual.com.br/web_cep.php?cep="+ cep + "&formato=xml" );
         
           
           
           
            //aqui da o erro 
           WsCep wCep = (WsCep) u.unmarshal( url );
     return wCep;
	
}   

}[/code]

segue a classe que estou tentando instanciar


@XmlRootElement
public class WsCep {
    
	private String resultado;
	private String resultado_txt;
	private String uf;
	private String cidade;
	private String bairro;
	private String tipo_logradouro;
	private String logradouro;
	public String getResultado() {
		return resultado;
	}
	public void setResultado(String resultado) {
		this.resultado = resultado;
	}
	public String getResultado_txt() {
		return resultado_txt;
	}
	public void setResultado_txt(String resultado_txt) {
		this.resultado_txt = resultado_txt;
	}
	public String getUf() {
		return uf;
	}
	public void setUf(String uf) {
		this.uf = uf;
	}
	public String getCidade() {
		return cidade;
	}
	public void setCidade(String cidade) {
		this.cidade = cidade;
	}
	public String getBairro() {
		return bairro;
	}
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}
	public String getTipo_logradouro() {
		return tipo_logradouro;
	}
	public void setTipo_logradouro(String tipo_logradouro) {
		this.tipo_logradouro = tipo_logradouro;
	}
	public String getLogradouro() {
		return logradouro;
	}
	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}
}

o que faço de errado ?

Ainda estou tentando entender todo esse universo de JAXB, mas
não seria só o caso de mudar o nome do bean de sua classe, assim:

@XmlRootElement(namespace = "webservicecep")

Por que pelo que dá para entender do erro, o xml está retornando um “webservicecep” e
você está instanciando um “wscep”.

Tente.

Beleza eu alterei la, realmente estava instanciando algo incorreto, esse “webservicecep” vem do xml que o WS retorna certo ?

mas agora deu outro problema, quando passo pela linha
JAXBContext jc = JAXBContext.newInstance(WsCep.class);
a aplicação lança uma exceção dizendo que nao consegue instanciar minha classe, por que tem 2 atributos cep, 2 atributos cidade e por aí vai …

Tem outra forma de eu instanciar uma classe a partir do retorno do webservice ?

[quote=JoaoBluSCBR]Ainda estou tentando entender todo esse universo de JAXB, mas
não seria só o caso de mudar o nome do bean de sua classe, assim:

@XmlRootElement(namespace = "webservicecep")

Por que pelo que dá para entender do erro, o xml está retornando um “webservicecep” e
você está instanciando um “wscep”.

Tente.[/quote]

Beleza eu alterei la, realmente estava instanciando algo incorreto, esse “webservicecep” vem do xml que o WS retorna certo ?

mas agora deu outro problema, quando passo pela linha
JAXBContext jc = JAXBContext.newInstance(WsCep.class);
a aplicação lança uma exceção dizendo que nao consegue instanciar minha classe, por que tem 2 atributos cep, 2 atributos cidade e por aí vai …

Tem outra forma de eu instanciar uma classe a partir do retorno do webservice ?

Não, o modo é esse mesmo.

Mas como assim? Tua classe tem mesmo 2 de cada atributo? Isso é muito estranho.

Ou vc usou tags demais?

A classe é essa que vc postou no começo do tópico, certo?

Poderia postar o XML, ou anexá-lo?

Daí eu poderia fazer um teste aqui.

[quote=JoaoBluSCBR]Não, o modo é esse mesmo.

Mas como assim? Tua classe tem mesmo 2 de cada atributo? Isso é muito estranho.

Ou vc usou tags demais?

A classe é essa que vc postou no começo do tópico, certo?

Poderia postar o XML, ou anexá-lo?

Daí eu poderia fazer um teste aqui. [/quote]

Exato João, a classe eu que eu estou usando é essa que eu postei aí, também nao entendi o que ele quiz dizer com essa exceção …

olha se executar esse endereço no browser você consegue ver o retorno do WS…

http://cep.republicavirtual.com.br/web_cep.php?cep=83040530&formato=xml

obrigado pela força

Testei o teu link, o retorno veio assim, agora vou tentar fazer o unmarshalling dele:


  <?xml version="1.0" encoding="iso-8859-1" ?> 
- <webservicecep>
  <resultado>1</resultado> 
  <resultado_txt>sucesso - cep completo</resultado_txt> 
  <uf>PR</uf> 
  <cidade>São José dos Pinhais</cidade> 
  <bairro>Boneca do Iguaçu</bairro> 
  <tipo_logradouro>Rua</tipo_logradouro> 
  <logradouro>Almirante Pedro Álvares Cabral</logradouro> 
  </webservicecep>

[quote=JoaoBluSCBR]Testei o teu link, mas para mim acho que o retorno está perfeito:

[code]

<?xml version="1.0" encoding="iso-8859-1" ?>
  • 1 sucesso - cep completo PR São José dos Pinhais Boneca do Iguaçu Rua Almirante Pedro Álvares Cabral

[/code][/quote]

WTF :shock: ? não sei o que fazer mais … não estou entendendo esses erros …
Você conseguiu instanciar a classe tambem ?
Será que nao falta alguma coisa na minha classe ou alguma coisa quando eu uso Unmarshaller?

Estou tentando de várias formas. Me parece que tem algo nas tags da classe que não tá legal.

Pra mim ta retornando um erro:

[org.xml.sax.SAXParseException: The processing instruction target matching “[xX][mM][lL]” is not allowed.]

Resolvi, aquele erro, agora está dando:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:“webservicecep”). Expected elements are <{webservicecep}wsCep>

To progredindo. kkkkk

[quote=JoaoBluSCBR]Resolvi, aquele erro, agora está dando:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:“webservicecep”). Expected elements are <{webservicecep}wsCep>

To progredindo. kkkkk[/quote]

:lol: to nesse ai… será que nesse caso eu nao tenho que mudar minha classe para webservicecep? e setar o root do xlm para esse cara aí ???

Uhuuuu!!!

Aqui deu certo!!!

mudei aquela linha na classe WsCep

@XmlRootElement(namespace = "webservicecep")

para

@XmlRootElement(name = "webservicecep")

A partir dali tudo funcionou.

Tente.

[quote=JoaoBluSCBR]Uhuuuu!!!

Aqui deu certo!!!

mudei aquela linha na classe WsCep

@XmlRootElement(namespace = "webservicecep")

para

@XmlRootElement(name = "webservicecep")

A partir dali tudo funcionou.

Tente.[/quote]

Boaaaaaaaaaa velinho… :wink:

Relembrando você só alterou o “namespace” para “name” certo ? o resto do codigo está ok entao ?!
Agora não vou conseguir testar porque estou trabalhando :D… mas no meu almoço ja vou tentar …

Valeu pela força :slight_smile:

Sim, apenas mudei essa tag, mantive todo o resto do código intacto.

Se o teu ainda der um erro, copia o erro e cola aqui.

[quote=JoaoBluSCBR]Sim, apenas mudei essa tag, mantive todo o resto do código intacto.

Se o teu ainda der um erro, copia o erro e cola aqui.[/quote]

Sucesso… deu tudo certo aqui :slight_smile:

obrigado pela ajuda…

era algo simples mas isso me obrigou a conhecer um pouco mais sobre o conceito de WebService e tambem do funcionamento do Unmarshaller

grande abraço João…

Por favor pessoal, estou com o seguinte problema:

Para o meu arquivo XML de teste estou conseguindo fazer a leitura através do JAXB sem problemas. porém, quando vou testar com o arquivo da empresa em que trabalho, com exatamente as mesmas TAGS, sendo a unica diferença a 1ª linha do arquivo, acontece o erro:

javax.xml.bind.UnmarshalException: unexpected element (uri:“urn:infdiario”, local:“DOC_ARQ”). Expected elements are <{}DOC_ARQ>,<{}urn:infdiario>

Meu XML de teste é este (que esta funcionando normalmente):

<?xml version="1.0" encoding="windows-1252" ?>

<DOC_ARQ xmlns:ns2=“urn:infdiario”>
<CAB_INFORM>
<COD_DOC>1</COD_DOC>
<DT_COMPT>05/03/2014</DT_COMPT>
<DT_GERAC_ARQ>06/03/2014</DT_GERAC_ARQ>
1.0
</CAB_INFORM>
<LISTA_INFORM>

<CNPJ_FDO>Madhya Pradesh</CNPJ_FDO>
<VL_TOTAL>1000000</VL_TOTAL>
<VL_QUOTA>1,518340400000</VL_QUOTA>
<PATRIM_LIQ>70575048,39</PATRIM_LIQ>
<CAPTC_DIA>0,00</CAPTC_DIA>
<RESG_DIA>4445,08</RESG_DIA>
<VL_TOTAL_SAI>37405,68</VL_TOTAL_SAI>
<VL_TOTAL_ATV>70578285,13</VL_TOTAL_ATV>
<NR_COTST>50355</NR_COTST>
<LISTA_COTST_SIGNIF></LISTA_COTST_SIGNIF>

para leitura do XML abaixo que esta dando problema. (a unica diferença é que o comando “ns2” do namespace não existe):

<?xml version="1.0" encoding="windows-1252" ?>

<DOC_ARQ xmlns=“urn:infdiario”>
<CAB_INFORM>
<COD_DOC>1</COD_DOC>
<DT_COMPT>05/03/2014</DT_COMPT>
<DT_GERAC_ARQ>06/03/2014</DT_GERAC_ARQ>
1.0
</CAB_INFORM>
<LISTA_INFORM>

<CNPJ_FDO>Madhya Pradesh</CNPJ_FDO>
<VL_TOTAL>1000000</VL_TOTAL>
<VL_QUOTA>1,518340400000</VL_QUOTA>
<PATRIM_LIQ>70575048,39</PATRIM_LIQ>
<CAPTC_DIA>0,00</CAPTC_DIA>
<RESG_DIA>4445,08</RESG_DIA>
<VL_TOTAL_SAI>37405,68</VL_TOTAL_SAI>
<VL_TOTAL_ATV>70578285,13</VL_TOTAL_ATV>
<NR_COTST>50355</NR_COTST>
<LISTA_COTST_SIGNIF></LISTA_COTST_SIGNIF>

Alguém pode por favor me ajudar com o problema em questão?

Obrigado!

Pessoal

Alguém pode ajudar?