APACHE AXIS 1.4 e SOAP 1.2 - RESOLVIDO

3 respostas
R

Amigos,

Preciso consumir um WebService no padrão SOAP 1.2 com apache AXIS 1.4 - um framework que estou usando pela primeira vez. Por uma questão de ordem prática o acesso é feito via DII (Dynamic Invocation Interface) ao invés do uso de stubs gerados via WSDL2Java, etc. Acontece que ao examinar o envelope gerado observei que o AXIS está emitindo tags no padrão SOAP 1.1 ao invés de SOAP 1.2 o que não é o esperado pelo webservice.

Minha pergunta é: como configurar o AXIS para que este utilize o padrão SOAP 1.2 ao invés do SOAP 1.1 ?

A documentação informa que o AXIS 1.4 é compatível com SOAP 1.2 mas não deixa claro como ativar este modo. Sei que o AXIS2 faz isso com o pé nas costas, mas não temos tempo disponível para migrar de framework…

Alguém com experiência em AXIS poderia me ajudar ?

Abraços

3 Respostas

R

realjn:
Amigos,

Preciso consumir um WebService no padrão SOAP 1.2 com apache AXIS 1.4 - um framework que estou usando pela primeira vez. Por uma questão de ordem prática o acesso é feito via DII (Dynamic Invocation Interface) ao invés do uso de stubs gerados via WSDL2Java, etc. Acontece que ao examinar o envelope gerado observei que o AXIS está emitindo tags no padrão SOAP 1.1 ao invés de SOAP 1.2 o que não é o esperado pelo webservice.

Minha pergunta é: como configurar o AXIS para que este utilize o padrão SOAP 1.2 ao invés do SOAP 1.1 ?

A documentação informa que o AXIS 1.4 é compatível com SOAP 1.2 mas não deixa claro como ativar este modo. Sei que o AXIS2 faz isso com o pé nas costas, mas não temos tempo disponível para migrar de framework…

Alguém com experiência em AXIS poderia me ajudar ?

Abraços

Amigo isso é tão simples que até doi. Veja:

call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);
call.setEncodingStyle(Constants.URI_SOAP12_ENV);

A chamada em negrito está dizendo ao objeto Call que o envelope gerado estará em conformidade com o SOAP 1.2. Veja um exemplo:

<?xml version=“1.0” encoding=“UTF-8”?>
<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>
<nfeCabecMsg soapenv:role="" soapenv:mustUnderstand=“false”
xmlns=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2”>
<versaoDados>2.00</versaoDados>
<cUF>29</cUF>
</nfeCabecMsg>
</soapenv:Header>
<soapenv:Body>
<ns1:nfeDadosMsg
xmlns:ns1=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2”>
<consStatServ versao=“2.00”
xmlns=“http://www.portalfiscal.inf.br/nfe”>
<tpAmb>2</tpAmb>
<cUF>29</cUF>
<xServ>STATUS</xServ>
</consStatServ>
</ns1:nfeDadosMsg>
</soapenv:Body>
</soapenv:Envelope>

Observe que em conformidade com o SOAP 1.2, por padrão o envio do header está desabilitado por ser opcional. Caso o serviço exija o header você terá que incluí-lo - o que também é muito simples (ver org.apache.axis.message.SOAPHeaderElement).

Enfim, com AXIS 1.4 é perfeitamente possível consumir webservices SOAP 1.2 utilizando DII ao invés de Stubs gerados via WSDL4Java - Nao precisa sair correndo para o AXIS-2 não !

R

realjn:
realjn:
Amigos,

Preciso consumir um WebService no padrão SOAP 1.2 com apache AXIS 1.4 - um framework que estou usando pela primeira vez. Por uma questão de ordem prática o acesso é feito via DII (Dynamic Invocation Interface) ao invés do uso de stubs gerados via WSDL2Java, etc. Acontece que ao examinar o envelope gerado observei que o AXIS está emitindo tags no padrão SOAP 1.1 ao invés de SOAP 1.2 o que não é o esperado pelo webservice.

Minha pergunta é: como configurar o AXIS para que este utilize o padrão SOAP 1.2 ao invés do SOAP 1.1 ?

A documentação informa que o AXIS 1.4 é compatível com SOAP 1.2 mas não deixa claro como ativar este modo. Sei que o AXIS2 faz isso com o pé nas costas, mas não temos tempo disponível para migrar de framework…

Alguém com experiência em AXIS poderia me ajudar ?

Abraços

Amigo isso é tão simples que até doi. Veja:

call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);
call.setEncodingStyle(Constants.URI_SOAP12_ENV);

A chamada em negrito está dizendo ao objeto Call que o envelope gerado estará em conformidade com o SOAP 1.2. Veja um exemplo:

<?xml version=“1.0” encoding=“UTF-8”?>
<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>
<nfeCabecMsg soapenv:role="" soapenv:mustUnderstand=“false”
xmlns=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2”>
<versaoDados>2.00</versaoDados>
<cUF>29</cUF>
</nfeCabecMsg>
</soapenv:Header>
<soapenv:Body>
<ns1:nfeDadosMsg
xmlns:ns1=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2”>
<consStatServ versao=“2.00”
xmlns=“http://www.portalfiscal.inf.br/nfe”>
<tpAmb>2</tpAmb>
<cUF>29</cUF>
<xServ>STATUS</xServ>
</consStatServ>
</ns1:nfeDadosMsg>
</soapenv:Body>
</soapenv:Envelope>

Observe que em conformidade com o SOAP 1.2, por padrão o envio do header está desabilitado por ser opcional. Caso o serviço exija o header você terá que incluí-lo - o que também é muito simples (ver org.apache.axis.message.SOAPHeaderElement).

Enfim, com AXIS 1.4 é perfeitamente possível consumir webservices SOAP 1.2 utilizando DII ao invés de Stubs gerados via WSDL4Java - Nao precisa sair correndo para o AXIS-2 não !

Valeu e obrigado pela ajuda ! agora estou conseguindo consumir o WS sem problema. A propósito, trata-se de um sistema de emissão de NF-e que usa AXIS 1.4. Com a mudança para o padrão SOAP 1.2 achei que teria de migrar para o AXIS 2 mas isso não será necessário.

Obrigado pelo apoio…

A

realjn:
realjn:
realjn:
Amigos,

Preciso consumir um WebService no padrão SOAP 1.2 com apache AXIS 1.4 - um framework que estou usando pela primeira vez. Por uma questão de ordem prática o acesso é feito via DII (Dynamic Invocation Interface) ao invés do uso de stubs gerados via WSDL2Java, etc. Acontece que ao examinar o envelope gerado observei que o AXIS está emitindo tags no padrão SOAP 1.1 ao invés de SOAP 1.2 o que não é o esperado pelo webservice.

Minha pergunta é: como configurar o AXIS para que este utilize o padrão SOAP 1.2 ao invés do SOAP 1.1 ?

A documentação informa que o AXIS 1.4 é compatível com SOAP 1.2 mas não deixa claro como ativar este modo. Sei que o AXIS2 faz isso com o pé nas costas, mas não temos tempo disponível para migrar de framework…

Alguém com experiência em AXIS poderia me ajudar ?

Abraços

Amigo isso é tão simples que até doi. Veja:

call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);
call.setEncodingStyle(Constants.URI_SOAP12_ENV);

A chamada em negrito está dizendo ao objeto Call que o envelope gerado estará em conformidade com o SOAP 1.2. Veja um exemplo:

<?xml version=“1.0” encoding=“UTF-8”?>
<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>
<nfeCabecMsg soapenv:role="" soapenv:mustUnderstand=“false”
xmlns=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2”>
<versaoDados>2.00</versaoDados>
<cUF>29</cUF>
</nfeCabecMsg>
</soapenv:Header>
<soapenv:Body>
<ns1:nfeDadosMsg
xmlns:ns1=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2”>
<consStatServ versao=“2.00”
xmlns=“http://www.portalfiscal.inf.br/nfe”>
<tpAmb>2</tpAmb>
<cUF>29</cUF>
<xServ>STATUS</xServ>
</consStatServ>
</ns1:nfeDadosMsg>
</soapenv:Body>
</soapenv:Envelope>

Observe que em conformidade com o SOAP 1.2, por padrão o envio do header está desabilitado por ser opcional. Caso o serviço exija o header você terá que incluí-lo - o que também é muito simples (ver org.apache.axis.message.SOAPHeaderElement).

Enfim, com AXIS 1.4 é perfeitamente possível consumir webservices SOAP 1.2 utilizando DII ao invés de Stubs gerados via WSDL4Java - Nao precisa sair correndo para o AXIS-2 não !

Valeu e obrigado pela ajuda ! agora estou conseguindo consumir o WS sem problema. A propósito, trata-se de um sistema de emissão de NF-e que usa AXIS 1.4. Com a mudança para o padrão SOAP 1.2 achei que teria de migrar para o AXIS 2 mas isso não será necessário.

Obrigado pelo apoio…

teria como postar seu código pq aqui ta uma tristesa para fazer isso ai funcionar em axis 1.4

Criado 28 de julho de 2010
Ultima resposta 20 de set. de 2010
Respostas 3
Participantes 2