[RESOLVIDO]Enviar Nota Fiscal para várias empresas (keystore em cache da JVM)  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Prezados, bom dia.

preciso da ajuda de vocês, fiz um sistema de envio de nota fiscal em Maker (gerador de código Java), funciona beleza, mas quando tento enviar uma NF diferente(ex: mandei a nf da matriz e tento enviar a nota fiscal para uma filial) da erro na autenticação, isso porque a JVM guarda o último keystore enviado... se eu reiniciar o tomcat eu consigo enviar normalmente. Existe uma forma de contornoar essa situação? alguma função em Java que consiga retirar o keystore guardado em cache sem que eu precise reiniciar o tomcat?
Desde já agradeço pela atenção!

This message was edited 1 time. Last update was at 06/10/2010 15:20:50

asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Dê uma olhada no meu blog, eu coloquei uma resolução para este problema : http://alesaudate.com.


[]´s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Colega, Asaudade.

BLz, estou dando uma olhada qualquer dúvida espero poder contar com sua ajuda novamente.
desde já te agradeço pela dica.

para os que estão com o mesmo problema o link é: http://alesaudate.com/2010/08/09/how-to-dynamically-select-a-certificate-alias-when-invoking-web-services/
vou ver se resolvo meu problema e posto o resultado aqui

This message was edited 1 time. Last update was at 15/09/2010 12:22:26

gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Asaudate,

Você utilizou Jboss, sabe dizer se isso é válido para o Tomcat? porque é nele que enfreto esse problema.
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Basta que você coloque as libs do JAX-WS no diretório de lib´s do Tomcat. (eu usei a RI, que dá pra baixar em https://jax-ws.dev.java.net/2.1.1/index.html).

[]´s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Pessoal, alguém sabe como faço para limpar as propriedades da JVM? descobri o erro da minha aplicação, a função para remover na verdade não remove. estou fazendo da seguinte forma:

System.getProperties().remove("key");
e também usei System.clearProperty("key");


mas n removeram nada.

Asaudate, vc é a minha referência nessa parada, se puder dar uma força mais uma vez... hehehe
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

System.getProperties().remove("key"); funciona pra mim. Que parâmetro você está querendo remover?? E como você seta, via parâmetro da VM, mesmo, ou via programação?

[]´s

This message was edited 1 time. Last update was at 16/09/2010 23:48:54


Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Asaudate, Bom dia.

cara seguinte, ontem remexi nesse trem e percebi o seguinte... a função que estou utilizando aqui no Maker envia a NF da seguinte forma:

primeira ela da System.setProperty("javax.net.ssl.keyStore", MinhavariavelKeystore); para guardar os dados no sistema;
em seguida ela utiliza uma classe espicífica pra realizar o envio e depos limpa as propriedades do sistema com
System.getProperties().remove(key);

Quando vi isso pensei que a função n tivesse funcionando, mas coloquei uma série de labels no jsp e percebi que ele está limpando mesmo as propriedades do sistema.
Sendo assim a única solução que consigo pensar é mudar a função e tentar passar esses dados a partir de uma variável e não pegando do sistema, como está sendo feito atualmente.
O problema ainda maior é que a classe q a função importa para enviar os dados pra prefeitura, está num .class e não tenho acesso ao código. vou pesquisar por uma função que realize o envio da NF para o webservice, mas já pergunto se é obrigatório os dados estarem nas propriedades do sistema ou se eles podem ficar numa variável como penso em fazer?
No aguardo, e mais uma vez agradeço a ajuda que tem me dado.(desesperado aqui no trampo p resolver esse negócio, projeto no final e só dependendo desse pepino... affs)

This message was edited 2 times. Last update was at 17/09/2010 11:52:44

gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

alguém sabe me dizer onde encontro um material sobre as bibliotecas:
import org.apache.axis.client.Stub;
import org.apache.axis.wsdl.gen.NoopFactory;
import org.apache.axis.wsdl.symbolTable.*;
import org.apache.axis.wsdl.toJava.*;


dei uma olhada no google mas n achei nada útil, preciso entender como isso funciona para tentar gerar uma classe que envie o XML para o webservice e me de um retorno.

This message was edited 1 time. Last update was at 21/09/2010 13:54:17

gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Pessoal, estou tendo problemas para definir o serviço de envio da nota, no seguinte trecho do código

javax.xml.ws.Service service = javax.xml.ws.Service.create(new java.net.URL(url), new javax.xml.namespace.QName(namespace, serviceName));

apresenta o erro:
javax.xml.ws.WebServiceException: The following WSDL exception occurred: WSDLException: faultCode=WSDL4JWrapper : : WSDLException: faultCode=WSDL4JWrapper : : Received fatal alert: handshake_failure

alguém já passou por isso?
gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Código inteiro do erro:

Exceção Gerada:
javax.xml.ws.WebServiceException: The following WSDL exception occurred: WSDLException: faultCode=WSDL4JWrapper : : WSDLException: faultCode=WSDL4JWrapper : : Received fatal alert: handshake_failure at org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:170) at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:67) at org.apache.axis2.jaxws.description.impl.ServiceDescriptionImpl.setupWsdlDefinition(ServiceDescriptionImpl.java:507) at org.apache.axis2.jaxws.description.impl.ServiceDescriptionImpl.(ServiceDescriptionImpl.java:12 at org.apache.axis2.jaxws.description.impl.DescriptionFactoryImpl.createServiceDescription(DescriptionFactoryImpl.java:101) at org.apache.axis2.jaxws.description.DescriptionFactory.createServiceDescription(DescriptionFactory.java:67) at org.apache.axis2.jaxws.spi.ServiceDelegate.(ServiceDelegate.java:84) at org.apache.axis2.jaxws.spi.Provider.createServiceDelegate(Provider.java:45) at javax.xml.ws.Service.(Service.java:33) at javax.xml.ws.Service.create(Service.java:85) at wfr.com.systems.system_tif.rules.WebrunFunctions.ebfWSCallSSL(WebrunFunctions.java:11323) at wfr.com.systems.system_tif.rules.EnviaLoteNfseWs.run(EnviaLoteNfseWs.java:102) at wfr.rules.WFRRule.start(WFRRule.java:741) at wfr.rules.WFRRule.callRule(WFRRule.java:661) at wfr.com.systems.system_tif.rules.MontaXml.run(MontaXml.java:165) at wfr.rules.WFRRule.start(WFRRule.java:741) at wfr.rules.WFRRule.call(WFRRule.java:1779) at wfr.rules.WFRRule.call(WFRRule.java:53) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269) at java.util.concurrent.FutureTask.run(FutureTask.java:123) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) at java.lang.Thread.run(Thread.java:595) Caused by: WSDLException: faultCode=WSDL4JWrapper : : WSDLException: faultCode=WSDL4JWrapper : : Received fatal alert: handshake_failure: at org.apache.axis2.jaxws.util.WSDL4JWrapper.(WSDL4JWrapper.java:184) at org.apache.axis2.jaxws.description.impl.ServiceDescriptionImpl.setupWsdlDefinition(ServiceDescriptionImpl.java:489) ... 20 more

Causa:
WSDLException: faultCode=WSDL4JWrapper : : WSDLException: faultCode=WSDL4JWrapper : : Received fatal alert: handshake_failure: at org.apache.axis2.jaxws.util.WSDL4JWrapper.(WSDL4JWrapper.java:184) at org.apache.axis2.jaxws.description.impl.ServiceDescriptionImpl.setupWsdlDefinition(ServiceDescriptionImpl.java:489) at org.apache.axis2.jaxws.description.impl.ServiceDescriptionImpl.(ServiceDescriptionImpl.java:12 at org.apache.axis2.jaxws.description.impl.DescriptionFactoryImpl.createServiceDescription(DescriptionFactoryImpl.java:101) at org.apache.axis2.jaxws.description.DescriptionFactory.createServiceDescription(DescriptionFactory.java:67) at org.apache.axis2.jaxws.spi.ServiceDelegate.(ServiceDelegate.java:84) at org.apache.axis2.jaxws.spi.Provider.createServiceDelegate(Provider.java:45) at javax.xml.ws.Service.(Service.java:33) at javax.xml.ws.Service.create(Service.java:85) at wfr.com.systems.system_tif.rules.WebrunFunctions.ebfWSCallSSL(WebrunFunctions.java:11323) at wfr.com.systems.system_tif.rules.EnviaLoteNfseWs.run(EnviaLoteNfseWs.java:102) at wfr.rules.WFRRule.start(WFRRule.java:741) at wfr.rules.WFRRule.callRule(WFRRule.java:661) at wfr.com.systems.system_tif.rules.MontaXml.run(MontaXml.java:165) at wfr.rules.WFRRule.start(WFRRule.java:741) at wfr.rules.WFRRule.call(WFRRule.java:1779) at wfr.rules.WFRRule.call(WFRRule.java:53) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269) at java.util.concurrent.FutureTask.run(FutureTask.java:123) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) at java.lang.Thread.run(Thread.java:595)

estou há dois dias tentando encontrar a causa, mas não identifico, já olhei na documentação do Service.create e ele recebe de fato dois parametros, a URL e o QName com nome do servico e namespace. o engraçado é que tirando a URL e passando apenas o QName ele para de dar erro, mas não posso deixar assim porque sem a url do wsdl as funções de envio não funcionarão.

This message was edited 2 times. Last update was at 24/09/2010 16:08:08

gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Andei pesquisando sobre o erro acima e me parece que no momento do service.create é feita uma requisicao com o wsdl e em webservices que exigem autenticacao é necessário que seja informado o keystore.
Bem assim é a programação, resolvendo um problema e aparecendo outro, a saga da NF parece n ter fim.

Amigos, o erro agora é : java.io.IOException: Keystore was tampered with, or password was incorrect


ele ocorre nessa parte do codigo:

SSLSocketFactoryGenerator sslFactory = new SSLSocketFactoryGenerator(alias.toString(), fileKeyStore.toString(), filepfx.toString(), passKeyStore.toString(), passpfx.toString());

javax.net.ssl.SSLSocketFactory socketFactory = null;

try{
socketFactory = sslFactory.getSSLSocketFactory();
}catch (Exception e){
return new Variant(e.toString());
}

O código do SSLSocketFactoryGenerator me foi cedido pelo nosso amigo Alexandre(que tem me ajudado ate aqui).
segue código:

olhando o código uma coisa que n entendi foi porque vc(alexandre) pega a senha como parametro mas n seta ela na construtora.
gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Prezados,

Creio que o erro está neste trecho:


por alguma razão ele n consegue carregar o ks.load
gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Prezados,

identifiquei o problema, era a instancia que estava setando errado. ali deve-se passar o .pfx e a minha instancia que é PKCS12.

O problema agora é pra converter uma string para o tipo SOAPMessage:




o alerta da exceção diz:

org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name, Envelope , but found cabecalho
gambazinho
Java Ninja
[Avatar]
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline

Prezados, ao que parece é necessário inserir uma tag(algumas na verdade) no XML. googlando encontrei algo assim:


todo o conteudo do meu XML deve ir dentro da soap:body?

This message was edited 1 time. Last update was at 28/09/2010 12:36:12

 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team