Cabeçalho para consumir WS da NFe

Beleza galera…

          Estou com um problema de montar a mensagem de cabeçalho para consumir o ws da nfe.

         Outro problema também é que não entendi muito bem os novos métodos dos Serviços. Por exemplo, O método do WS de Status Serviço da Sefaz-RS o nfeStatusServicoNF2(NfeDadosMsg param), tem esse parâmetro ai que um objeto que tem um atributo que um ArrayList e você insere dados nele. Só que não entendi muito que dados são esses.
         Fui consultar a página do serviço e tinha o seguinte XML lá:

POST /ws/NfeStatusServico/NfeStatusServico2.asmx HTTP/1.1
Host: homologacao.nfe.sefaz.rs.gov.br
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:soap12=“http://www.w3.org/2003/05/soap-envelope”>
soap12:Header

[color=blue]string[/color]
[color=blue]string[/color]

</soap12:Header>
soap12:Body
[color=blue]xml[/color]
</soap12:Body>
</soap12:Envelope>

         Substitui o que está em azul pelos dados corretos. Depois fiz um programa que lê o XML colocando todas as informações em uma String e adicionei essa String no NfeDadosMsg e enviei para o WS, que me retornou o seguinte erro:

[color=red]
Exception in thread “main” javax.xml.ws.soap.SOAPFaultException: Server was unable to read request. —> There is an error in XML document (1, 8589). —> The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type.[/color]

          Estou usando JAX-WS para geração das classes apartir do wsdl.

          Alguém sabe o que posso fazer?

Não consegui fazer o consumo do WS pelo JAX, só na raça,

Pelo JAX-WS eu não consigo colocar o SOAP Header na Mensagem

Mas a estrutura do SOAP é mais ou menos essa, tirando as informações do HTTP que tem no começo, o resto é igual

zoren, Você fez por qual Framework? Eu também já tentei pelo Axis2, mas dá o mesmo erro.

Pelo Axis2 um cara me disse que funciona

http://www.guj.com.br/posts/list/285/72325.java#1001581

posta sua classe ai

como é que você gera as classes pelo Axis2? Fui tentar e deu esse erro ai:

[color=red]Exception in thread “main” org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: No mapping defined for element {http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2}nfeCabecMsg[/color]

Eu tenho uma tarefa no ant que faz isso pra mim

como vc está fazendo pra gerar?

Uso esse comando:

./wsdl2java.sh -uri /root/workspace/nfe/wsdl/RS/NfeStatusServico2.wsdl -p example.ws -d jibx -uw -o /root/workspace/SoPraEstudar/

o que seria o parâmetro -d com o valor jibx

seria o framework usado??

eu não especifico nada qdo gero

só o destino e o wsdl

ta usando o SEfaz Virtual rs ou sefaz rs mesmo ?

tenta o nfeStatusServicoNF mesmo ao invés do nfeStatusServicoNF2

ou vc está testando esse novo webservice?

ahh li todo o post… eskece ihaiahihia
tb tive o mesmo problema

zoren, eu uso -d jibx para informar que eu quero usar o databind JiBX para ligar os dados XML a objetos Java. Como você não especifica qual quer usar o Axis2 usa o ADB.

zoren eu gerei a classe sem usar o JiBX, mas o Axis gerou uma classe enorme com mais de 2500 linhas. Como é que eu uso ela?

Tem que ir chamando as classes internas e instânciando elas

tipo

NfeStatusServNF2Stub.NfeCabecMsg() cabec = new NfeStatusServNF2Stub.NfeCabecMsg();

E a Factory interna a essas classes, tipo:

NfeStatusServicoNF2.NfeCabecMsg.Factory

Ela serve para que?

zeron como você coloca o XML da NFe no NfeDadosMsg?

essa factory tem um método estático que coloca o xml do corpo no SOAP

ai vc passa um XMLStreamReader pra ele com o xml

na hora do parse do Factory ele dá o seguinte erro:

[color=red]Exception in thread “main” java.lang.Exception: org.apache.axis2.databinding.ADBException: Unexpected subelement Signature[/color]

Coloca seu código ai

faço isso:

XMLStreamReader xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(new FileReader("/home/nfe/NFe25100209268517000130550000002490043615074491.xml")); NfeStatusServico2Stub.NfeDadosMsg dado = NfeStatusServico2Stub.NfeDadosMsg.Factory.parse(xmlReader);

vc vai ter que fazer uma gambi ai

eu só resolvi assim

se vc reparar, essa classe elimina a raiz do xml

então vc carrega todo o conteúdo do xml em uma string e adiciona um par de tag qualquer em volta dela