webService CT-e

Boa noite

Pessoa, estou brincando com axis e estou com uma dificuldade. Apartir do wsdl do serviço do CT-e gerei as classes de serviço de consulta.
Gerei o soap no braço e funciona que uma maravilha, não satisfeito quero fazer com o axis, assim como fiz com a nfe. No entanto a falta de conhecimento em alguns conseitos do axis e da sua estrutura não estou conseguindo fazer com que o meu xml seja carregado com o CteDadosMsg no body do envelop.
Meu codigo:

[code] CteCabecMsg cab = new CteCabecMsg();

	cab.setCUF("51");
	cab.setVersaoDados("1.01");
	SOAPHeaderElement soaHead =  new SOAPHeaderElement("http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico","cteCabecMsg", cab);
	
	TConsStatServCte servico = new TConsStatServCte();
	servico.setTpAmb("2");
	servico.setVersao("1.01");
	servico.setXServ("STATUS");
	
	ByteOutputStream out = new ByteOutputStream();
	JAXBContext cont = JAXBContext.newInstance("br.inf.portalfiscal.cte");
	Marshaller marshaller = cont.createMarshaller();
	marshaller.marshal(servico, out);
	
	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	factory.setNamespaceAware(true);
	DocumentBuilder builder = factory.newDocumentBuilder();
	Document doc = builder.parse(new ByteArrayInputStream(out.toString().getBytes()));
	Node element = doc.getDocumentElement().getFirstChild().getNextSibling();
	Element el = (Element) element;
	System.out.println(out); //saida do xml gerado do TConsultaServCTe
	
	CteDadosMsg dados = new CteDadosMsg();
	dados.set_any(new MessageElement[]{new org.apache.axis.message.MessageElement(el)});
	CteStatusServicoLocator locator = new CteStatusServicoLocator("https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico");
	
	CteStatusServicoSoap12Stub soap = (CteStatusServicoSoap12Stub) locator.getCteStatusServico();
	
	
	soap.setHeader(soaHead);
	CteStatusServicoCTResult ob = soap.cteStatusServicoCT(dados);
	
	System.out.println(ob.get_any()[0]); //retorno
	
	org.apache.axis.client.Call axis = soap._getCall();
	MessageContext gen = axis.getMessageContext(); 
	Message msg = gen.getRequestMessage(); 
	SOAPEnvelope replyDoc = msg.getSOAPEnvelope();
	System.out.println(replyDoc.getAsString()); //Saida do envelope enviado.[/code]

No entanto o envelope enviado é gerado pelo axis desta forma:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Header> <ns1:cteCabecMsg soapenv:role="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="false" xmlns:ns1="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico"> <ns1:cUF>51</ns1:cUF> <ns1:versaoDados>1.01</ns1:versaoDados> </ns1:cteCabecMsg> </soapenv:Header> <soapenv:Body> <cteDadosMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico"> <ns2:xServ xmlns:ns2="http://www.portalfiscal.inf.br/cte"> STATUS </ns2:xServ> </cteDadosMsg> </soapenv:Body> </soapenv:Envelope>

O xml gerado pelo JAX-b:

[code]

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


2
STATUS
[/code]

Se alguem souber informar o que estou fazendo de errado agradeço. O objetivo é fazer um tutorial do uso do axis, jaxb e conexão CT-e.
Caso tenha algum interessado em ajudar.

Ninguem sabe? Ou ninguem quer ajudar?

Boa noite

Bom, acredito que não tenham conhecimento e precise de ajuda da um grito.

Quando sobrar uns minutos posto a solução passo-a-passo, mas deixo o codigo.

CteCabecMsg cab = new CteCabecMsg();
		
		cab.setCUF("51");
		cab.setVersaoDados("1.02");
		SOAPHeaderElement soaHead =  new SOAPHeaderElement("http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico","cteCabecMsg", cab);
		
		TConsStatServCte servico = new TConsStatServCte();
		servico.setTpAmb("2");
		servico.setVersao("1.01");
		servico.setXServ("STATUS");
		
		ByteOutputStream out = new ByteOutputStream();
		JAXBContext cont = JAXBContext.newInstance("br.inf.portalfiscal.cte");
		Marshaller marshaller = cont.createMarshaller();
		marshaller.marshal(servico, out);
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder.parse(new ByteArrayInputStream(getDados().getBytes()));
		Node element = doc.getDocumentElement();
		Element el = (Element) element;
		System.out.println(out);  //saida do xml gerado do TConsultaServCTe
		
		CteDadosMsg dados = new CteDadosMsg();
		dados.set_any(new MessageElement[]{new org.apache.axis.message.MessageElement(el)});
		CteStatusServicoLocator locator = new CteStatusServicoLocator("https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico");
	
		
		CteStatusServicoSoap12Stub soap = (CteStatusServicoSoap12Stub) locator.getCteStatusServico();
		
	
		soap.setHeader(soaHead);
		CteStatusServicoCTResult ob = soap.cteStatusServicoCT(dados);
		
		System.out.println(ob.get_any()[0]); //retorno
		
		org.apache.axis.client.Call axis = soap._getCall();
		MessageContext gen = axis.getMessageContext(); 
		Message msg = gen.getRequestMessage(); 
		SOAPEnvelope replyDoc = msg.getSOAPEnvelope();
		System.out.println(replyDoc.getAsString()); //Saida do envelope enviado.

O Xml da mensagem gerado pelo axis:

<?xml version="1.0" encoding="UTF-8"?>
<consStatServCte xmlns="http://www.portalfiscal.inf.br/cte"
	versao="1.01">
	<tpAmb>2</tpAmb>
	<xServ>STATUS</xServ>
</consStatServCte>

O Envelope:

<soapenv:Envelope
	xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<soapenv:Header>
		<ns1:cteCabecMsg
			soapenv:role="http://schemas.xmlsoap.org/soap/actor/next"
			soapenv:mustUnderstand="false"
			xmlns:ns1="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico">
			<ns1:cUF>51</ns1:cUF>
			<ns1:versaoDados>1.02</ns1:versaoDados>
		</ns1:cteCabecMsg>
	</soapenv:Header>
	<soapenv:Body>
		<cteDadosMsg
			xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico">
			<consStatServCte versao="1.01"
				xmlns="http://www.portalfiscal.inf.br/cte"
				xmlns:ns2="http://www.portalfiscal.inf.br/cte">
				<tpAmb xmlns="http://www.portalfiscal.inf.br/cte">
					2
				</tpAmb>
				<xServ>STATUS</xServ>
			</consStatServCte>
		</cteDadosMsg>
	</soapenv:Body>
</soapenv:Envelope>

E o retorno:

<retConsStatServCte versao="1.02"
	xmlns="http://www.portalfiscal.inf.br/cte">
	<tpAmb>2</tpAmb>
	<verAplic>1.03</verAplic>
	<cStat>107</cStat>
	<xMotivo>107 - Servico em operacao.</xMotivo>
	<cUF>51</cUF>
	<dhRecbto>2010-02-12T22:02:23</dhRecbto>
	<tMed>0</tMed>
	<dhRetorno>2010-02-12T22:02:23</dhRetorno>
	<xObs />
</retConsStatServCte>

Caso precisem de mais alguma informação não exite, peça.

Aqui todos se ajudam!

(51) 9304 8042
michelvalent@gmail.com
Caso possa esperar farei um tutorial da nfe e da cte completo.

Caso haja alguem com interesse em patrocinar também é bem vindo.

consegui fazer o sistema conversar com todos webservices…so q tem um detalhe foi feito em c# (c sharp) c algm tiver alguma duvida estamos ae…

marcos.tomazini@gmail.com

Oi Michel, muito bom seu exemplo.
Vc gerou as classes java do *.wsdl com axis?
Poderia postar um exemplo?

Ou então postar o método setHeader() do soap(CteStatusServicoSoap12Stub),
porque ai colocaria manualmente mesmo. Eu gerei as classes atraves do JAX-WS.

Vlw, obrigado.

[quote=vm]Boa noite

Bom, acredito que não tenham conhecimento e precise de ajuda da um grito.

Quando sobrar uns minutos posto a solução passo-a-passo, mas deixo o codigo.

CteCabecMsg cab = new CteCabecMsg();
		
		cab.setCUF("51");
		cab.setVersaoDados("1.02");
		SOAPHeaderElement soaHead =  new SOAPHeaderElement("http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico","cteCabecMsg", cab);
		
		TConsStatServCte servico = new TConsStatServCte();
		servico.setTpAmb("2");
		servico.setVersao("1.01");
		servico.setXServ("STATUS");
		
		ByteOutputStream out = new ByteOutputStream();
		JAXBContext cont = JAXBContext.newInstance("br.inf.portalfiscal.cte");
		Marshaller marshaller = cont.createMarshaller();
		marshaller.marshal(servico, out);
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder.parse(new ByteArrayInputStream(getDados().getBytes()));
		Node element = doc.getDocumentElement();
		Element el = (Element) element;
		System.out.println(out);  //saida do xml gerado do TConsultaServCTe
		
		CteDadosMsg dados = new CteDadosMsg();
		dados.set_any(new MessageElement[]{new org.apache.axis.message.MessageElement(el)});
		CteStatusServicoLocator locator = new CteStatusServicoLocator("https://cte.sefaz.mt.gov.br/ctews/services/CteStatusServico");
	
		
		CteStatusServicoSoap12Stub soap = (CteStatusServicoSoap12Stub) locator.getCteStatusServico();
		
	
		soap.setHeader(soaHead);
		CteStatusServicoCTResult ob = soap.cteStatusServicoCT(dados);
		
		System.out.println(ob.get_any()[0]); //retorno
		
		org.apache.axis.client.Call axis = soap._getCall();
		MessageContext gen = axis.getMessageContext(); 
		Message msg = gen.getRequestMessage(); 
		SOAPEnvelope replyDoc = msg.getSOAPEnvelope();
		System.out.println(replyDoc.getAsString()); //Saida do envelope enviado.

O Xml da mensagem gerado pelo axis:

<?xml version="1.0" encoding="UTF-8"?>
<consStatServCte xmlns="http://www.portalfiscal.inf.br/cte"
	versao="1.01">
	<tpAmb>2</tpAmb>
	<xServ>STATUS</xServ>
</consStatServCte>

O Envelope:

<soapenv:Envelope
	xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<soapenv:Header>
		<ns1:cteCabecMsg
			soapenv:role="http://schemas.xmlsoap.org/soap/actor/next"
			soapenv:mustUnderstand="false"
			xmlns:ns1="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico">
			<ns1:cUF>51</ns1:cUF>
			<ns1:versaoDados>1.02</ns1:versaoDados>
		</ns1:cteCabecMsg>
	</soapenv:Header>
	<soapenv:Body>
		<cteDadosMsg
			xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico">
			<consStatServCte versao="1.01"
				xmlns="http://www.portalfiscal.inf.br/cte"
				xmlns:ns2="http://www.portalfiscal.inf.br/cte">
				<tpAmb xmlns="http://www.portalfiscal.inf.br/cte">
					2
				</tpAmb>
				<xServ>STATUS</xServ>
			</consStatServCte>
		</cteDadosMsg>
	</soapenv:Body>
</soapenv:Envelope>

E o retorno:

<retConsStatServCte versao="1.02"
	xmlns="http://www.portalfiscal.inf.br/cte">
	<tpAmb>2</tpAmb>
	<verAplic>1.03</verAplic>
	<cStat>107</cStat>
	<xMotivo>107 - Servico em operacao.</xMotivo>
	<cUF>51</cUF>
	<dhRecbto>2010-02-12T22:02:23</dhRecbto>
	<tMed>0</tMed>
	<dhRetorno>2010-02-12T22:02:23</dhRetorno>
	<xObs />
</retConsStatServCte>

Caso precisem de mais alguma informação não exite, peça.

Aqui todos se ajudam!

(51) 9304 8042
michelvalent@gmail.com
Caso possa esperar farei um tutorial da nfe e da cte completo.

Caso haja alguem com interesse em patrocinar também é bem vindo.

[/quote]

Foi gerado com axis1.
O header o axis seta é so jogar o objeto de cabecalho.

Sds

Tentei com o axis 2 no NetBeans, mais não tive muito sucesso!!!
Usei esse tutorial pra instalar: http://netbeans.org/kb/docs/websvc/gs-axis.html
As classe geradas pelo Axis 2 foram diferentes, e não tenho muito tempo para estudar e
testar…

[quote=vm]Foi gerado com axis1.
O header o axis seta é so jogar o objeto de cabecalho.

Sds[/quote]

Eu consegui colocar os Cabeçalhos gerado pelo JAX WS.

Usei o wsimport no pacote lib da java com o parâmetro: -XadditionalHeaders
“leverage SunRI tool (wsimport), which starting from v. 2.1.3 has a new option -XadditionalHeaders that map additional headers in wsdl:binding section as method parameters.”
http://community.jboss.org/thread/102562

O código ficou assim:

        TConsStatServ ct = new br.inf.portalfiscal.cte.ObjectFactory().createTConsStatServ();
        ct.setVersao("1.03");
        ct.setTpAmb("1");
        ct.setXServ("STATUS");
        CteDadosMsg dados = new CteDadosMsg();
        dados.getContent().add(ct);

        Holder<CteCabecMsg> cabDados = new Holder<CteCabecMsg>();
        cabDados.value = new CteCabecMsg();
        cabDados.value.setCUF("29");
        cabDados.value.setVersaoDados("1.03");

        CteStatusServico status = new CteStatusServico();
        CteStatusServicoSoap12 soap = status.getCteStatusServicoSoap12();
        CteStatusServicoCTResult result = soap.cteStatusServicoCT(dados, cabDados);

        System.out.println(result.getContent().size());
        JAXBElement el = (JAXBElement) result.getContent().get(0);
        TRetConsStatServ retorno = (TRetConsStatServ) el.getValue();
        System.out.println(retorno.getXMotivo());
        System.out.println(retorno.getXObs());

[quote=dsmdanbr]Tentei com o axis 2 no NetBeans, mais não tive muito sucesso!!!
Usei esse tutorial pra instalar: http://netbeans.org/kb/docs/websvc/gs-axis.html
As classe geradas pelo Axis 2 foram diferentes, e não tenho muito tempo para estudar e
testar…

[quote=vm]Foi gerado com axis1.
O header o axis seta é so jogar o objeto de cabecalho.

Sds[/quote][/quote]

[quote=dsmdanbr]Eu consegui colocar os Cabeçalhos gerado pelo JAX WS.

Usei o wsimport no pacote lib da java com o parâmetro: -XadditionalHeaders
“leverage SunRI tool (wsimport), which starting from v. 2.1.3 has a new option -XadditionalHeaders that map additional headers in wsdl:binding section as method parameters.”
http://community.jboss.org/thread/102562

O código ficou assim:

            TConsStatServ ct = new br.inf.portalfiscal.cte.ObjectFactory().createTConsStatServ();
            ct.setVersao("1.03");
            ct.setTpAmb("1");
            ct.setXServ("STATUS");
            CteDadosMsg dados = new CteDadosMsg();
            dados.getContent().add(ct);

            Holder<CteCabecMsg> cabDados = new Holder<CteCabecMsg>();
            cabDados.value = new CteCabecMsg();
            cabDados.value.setCUF("29");
            cabDados.value.setVersaoDados("1.03");

            CteStatusServico status = new CteStatusServico();
            CteStatusServicoSoap12 soap = status.getCteStatusServicoSoap12();
            CteStatusServicoCTResult result = soap.cteStatusServicoCT(dados, cabDados);

            System.out.println(result.getContent().size());
            JAXBElement el = (JAXBElement) result.getContent().get(0);
            TRetConsStatServ retorno = (TRetConsStatServ) el.getValue();
            System.out.println(retorno.getXMotivo());
            System.out.println(retorno.getXObs());

[quote=dsmdanbr]Tentei com o axis 2 no NetBeans, mais não tive muito sucesso!!!
Usei esse tutorial pra instalar: http://netbeans.org/kb/docs/websvc/gs-axis.html
As classe geradas pelo Axis 2 foram diferentes, e não tenho muito tempo para estudar e
testar…

[quote=vm]Foi gerado com axis1.
O header o axis seta é so jogar o objeto de cabecalho.

Sds[/quote][/quote][/quote]Amigo será que você não teria um exemplo de como você está fazendo para gerar o XML do CT-e?