Problema com Web Service

82 respostas
R

Olá, tento acessar um Web Service ja pronto, e está dando erro, alguem pode me ajudar?
Segue o código de acesso:

public class ClienteServico {
public static void main(String[] args) {

System.setProperty("http.proxyHost", "200.214.130.55"); 
	System.setProperty("http.proxyPort", "9443"); 
	
	Date dt = new Date();
	SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
	String data = "16/02/2012";
	Calendar c = format.getCalendar();
	MedicamentoDTO[] m = new MedicamentoDTO[2];
	MedicamentoDTO v = new MedicamentoDTO();
	SolicitacaoDTO s = new SolicitacaoDTO();
	UsuarioFarmaciaDTO u = new UsuarioFarmaciaDTO();
	AutorizacaoDTO a = new AutorizacaoDTO();

	v.setCoCodigoBarra("78961121114185");
	v.setQtSolicitada(1);
	v.setVlPrecoVenda(9.59);
	v.setQtPrescrita(30);

	m[0] = v;

	s.setCoSolicitacaoFarmacia("1");
	s.setNuCnpj("111");
	s.setNuCpf("[CPF removido]");
	s.setNuCrm("23218");
	s.setSgUfCrm("SP");
	s.setDtEmissaoReceita(c);
	s.setDnaEstacao("");
	s.setArrMedicamentoDTO(m);

	u.setUsuarioFarmacia("6546120");
	u.setSenhaFarmacia("39331");
	u.setUsuarioVendedor("342.811.888.19");
	u.setSenhaVendedor("1238");
                            Properties env = new Properties();   
                            env.put(Context.SECURITY_PRINCIPAL, "guest" );   
                           env.put(Context.SECURITY_CREDENTIALS, "guest" );           
                           env.put(Context.INITIAL_CONTEXT_FACTORY,"java.naming.factory.initial");
                          env.put(Context.PROVIDER_URL, "http://200.214.130.55:9443");  
	
	try {  
                                Context context = new InitialContext(env);  
                                ServicoSolicitacaoWSSoapBindingStub soap = (ServicoSolicitacaoWSSoapBindingStub) context.lookup("FarmaciaPopular/remote"); 
                                  a = soap.executarSolicitacao(s, u);

    } catch (NamingException e) {  
        e.printStackTrace();  
    } catch (RemoteException e) {  
        e.printStackTrace();  
    }
	
}

}

82 Respostas

R

Segue o Erro:

javax.naming.NoInitialContextException: Cannot instantiate class: java.naming.factory.initial [Root exception is java.lang.ClassNotFoundException: java.naming.factory.initial]

at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.init(Unknown Source)

at javax.naming.InitialContext.(Unknown Source)

at comunicacaoWebervice.ClienteServico.main(ClienteServico.java:78)

Caused by: java.lang.ClassNotFoundException: java.naming.factory.initial

at java.net.URLClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Unknown Source)

at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)

 5 more
mauricioadl

troque isso:

java.naming.factory.initial

por isso

com.sun.jndi.ldap.LdapCtxFactory

e faça um teste.

[]'s

R

Oi, valeu pela atenção cara…
mudei e deu outro erro:

javax.naming.NamingException: Cannot parse url: <a href="http://200.214.130.55:9443">http://200.214.130.55:9443</a> [Root exception is java.net.MalformedURLException: Not an LDAP URL: <a href="http://200.214.130.55:9443">http://200.214.130.55:9443</a>]

at com.sun.jndi.ldap.LdapURL.(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source)

at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.init(Unknown Source)

at javax.naming.InitialContext.(Unknown Source)

at comunicacaoWebervice.ClienteServico.main(ClienteServico.java:81)

Caused by: java.net.MalformedURLException: Not an LDAP URL: <a href="http://200.214.130.55:9443">http://200.214.130.55:9443</a> 10 more

fala do IP do serviço, mas o IP esta certo :S

mauricioadl

tente trocar o http:// por ldap://

R

Ou erro agora:

javax.naming.ServiceUnavailableException: 200.214.130.55:9443; socket closed

at com.sun.jndi.ldap.Connection.readReply(Unknown Source)

at com.sun.jndi.ldap.LdapClient.ldapBind(Unknown Source)

at com.sun.jndi.ldap.LdapClient.authenticate(Unknown Source)

at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source)

at com.sun.jndi.ldap.LdapCtx.(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source)

at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.init(Unknown Source)

at javax.naming.InitialContext.(Unknown Source)

at comunicacaoWebervice.ClienteServico.main(ClienteServico.java:81)
mauricioadl

esse erro ae eh q o servidor esta indisponivel.

ele esta on line? o endereço esta correto?

nao sei se esse servico eh publico, mas tentei “pingar” ele e esta off line. talvez seja por isso.

R

Cara, creio que sim, é da Farmacia Popular…
O endereço é esse
https://200.214.130.55:9443/farmaciapopular/services/ServicoSolicitacaoWS?wsdl

mauricioadl

o problema eh p endereco que vc esta passando. essas URLs são sensiveis a caixa alta, tente passar o nome em minusculo igual esta na url que vc me passou.

mauricioadl

uma pergunta, vc usou alguma ferramenta para gerar as classes java? ex: wsimport, apache, etc.

R

Não, criei pelo eclipse mesmo o WS client importei, e automaticamente gerou as classes do servico…

R

Cara, meu projeto é desktop, tem alguma coisa a v??

mauricioadl

vc pode usar em desktop normalmente.

tente fazer um teste usando os metodos diretamente, assim:

ServicoSolicitacaoWS service = new ServicoSolicitacaoWSServiceLocator().getServicoSolicitacaoWS(); service.confirmarAutorizacao(in0, in1) service.confirmarRecebimento(in0, in1) service.executarEstorno(in0, in1) service.executarSolicitacao(in0, in1) service.pesquisarAutorizacoes(in0, in1)

R

coloquei assim:

Properties env = new Properties();

env.put(Context.SECURITY_PRINCIPAL, guest);

env.put(Context.SECURITY_CREDENTIALS, guest);

env.put(Context.INITIAL_CONTEXT_FACTORY,

com.sun.jndi.ldap.LdapCtxFactory);

env.put(Context.PROVIDER_URL, ldap://200.214.130.55:9443);
try {
		ServicoSolicitacaoWS service;
		try {
			service = new ServicoSolicitacaoWSServiceLocator()
					.getServicoSolicitacaoWS();
			service.executarSolicitacao(s, u);
		} catch (ServiceException e) {
			e.printStackTrace();
		}
	} catch (RemoteException e) {
		e.printStackTrace();
	}
R

e eu deu esses erros:

15/02/2012 08:25:20 org.apache.axis.utils.JavaUtils isAttachmentSupported

WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.

AxisFault

faultCode: {<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>}Server.userException

faultSubcode:

faultString: java.io.IOException: Unexpected EOF from proxy

faultActor:

faultNode:

faultDetail:

{<a href="http://xml.apache.org/axis/">http://xml.apache.org/axis/</a>}stackTrace:java.io.IOException: Unexpected EOF from proxy

at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:156)

at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)

at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)

at comunicacaoWebervice.ClienteServico.main(ClienteServico.java:87)
{http://xml.apache.org/axis/}hostname:RodrigoP
java.io.IOException: Unexpected EOF from proxy

at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)

at comunicacaoWebervice.ClienteServico.main(ClienteServico.java:87)

Caused by: java.io.IOException: Unexpected EOF from proxy

at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:156)

at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)

at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)

 11 more
mauricioadl

esse codigo nao eh necessario

Properties env = new Properties(); env.put(Context.SECURITY_PRINCIPAL, "guest"); env.put(Context.SECURITY_CREDENTIALS, "guest"); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://200.214.130.55:9443");

R

entendi, mas continua com o mesmo erro…
Sera que é alguma configuração que eu não fiz?? :S

mauricioadl

fiz um teste aqui e ele reclamou de certificado, esse serviço tem alguma coisa desse tipo?

R

não, que eu saiba não, no site não fala nada sobre isso…
Esse é o site que fornece o serviço…
https://aplicacao.saude.gov.br/portalfarmacia/ajuda/protocolo.jsf

mauricioadl

pesquisei e tem certificado sim, vc vai precisar correr atras disso tbm.
depois que vc tiver instalado ele, o codigo para consumir o webservice eh simples assim:

try { ServicoSolicitacaoWS service = new ServicoSolicitacaoWSServiceLocator().getServicoSolicitacaoWS(); SolicitacaoDTO sdto = new SolicitacaoDTO(); //sdto.set... todos os sets necessarios UsuarioFarmaciaDTO udto = new UsuarioFarmaciaDTO(); //udto.set... todos os sets necessarios service.executarSolicitacao(sdto, udto); } catch (Exception e) { e.printStackTrace(); }

[]'s

mauricioadl

roodrigo.p:
não, que eu saiba não, no site não fala nada sobre isso…
Esse é o site que fornece o serviço…
https://aplicacao.saude.gov.br/portalfarmacia/ajuda/protocolo.jsf

repare que quando entra no site o navegador ja reclama do certificado.

R

Mas então esses erros são relativos à certificação??

R

tem executavel que gera um código, e esse código vai na classe SolicitacaoDTO, será que pode ser isso??

no Site ta assim:
"* O dnaEstacao é um identificador único da transação. Ele deve ser obtido à cada requisição (1.fase) pela chamada ao módulo de segurança. Faça o download do software módulo de segurança, disponível no Portal da Farmácia. Descompacte o software. Dentro da pasta descompactada estará o software gbasmsb.exe. Para cada trasanção enviada ao Ministério da Saúde, faça a seguinte chamada:

gbasmsb.exe --solicitacao CPF CNPJ CRM UF CRM DTEMISSAO RECEITA

O resultado desta chamada corresponderá ao dnaEstacao."

mauricioadl

roodrigo.p:
tem executavel que gera um código, e esse código vai na classe SolicitacaoDTO, será que pode ser isso??

no Site ta assim:
"* O dnaEstacao é um identificador único da transação. Ele deve ser obtido à cada requisição (1.fase) pela chamada ao módulo de segurança. Faça o download do software módulo de segurança, disponível no Portal da Farmácia. Descompacte o software. Dentro da pasta descompactada estará o software gbasmsb.exe. Para cada trasanção enviada ao Ministério da Saúde, faça a seguinte chamada:

gbasmsb.exe --solicitacao CPF CNPJ CRM UF CRM DTEMISSAO RECEITA

O resultado desta chamada corresponderá ao dnaEstacao."

tente fazer isso que ele esta falando, verifique no site se existe um ambiente de homologação para vc fazer testes.

R

cara arrumei e ainda continua dando o erro, o que ele significa??

15/02/2012 09:41:18 org.apache.axis.utils.JavaUtils isAttachmentSupported

WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.

AxisFault

faultCode: {<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>}Server.userException

faultSubcode:

faultString: java.io.IOException: Unexpected EOF from proxy

faultActor:

faultNode:

faultDetail:

{<a href="http://xml.apache.org/axis/">http://xml.apache.org/axis/</a>}stackTrace:java.io.IOException: Unexpected EOF from proxy

at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:156)

at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)

at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)

at comunicacaoWebervice.ClienteServico.main(ClienteServico.java:73)
{http://xml.apache.org/axis/}hostname:RodrigoP
java.io.IOException: Unexpected EOF from proxy

at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)

at comunicacaoWebervice.ClienteServico.main(ClienteServico.java:73)

Caused by: java.io.IOException: Unexpected EOF from proxy

at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:156)

at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)

at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)

 11 more
aix

WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart)

parece estar faltando jar ai do Axis ex:(mail.jar.), porque não consumiu com o JAX ?

R

Foi padrão do eclipse, porque nem mexi nisso :S
Pode ser que esteja faltano o jar então?

R
17/02/2012 09:00:30 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
	at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
	at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)
	at ServicosWS.Solicitacao.main(Solicitacao.java:63)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
	at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
	at sun.security.validator.Validator.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	... 23 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
	at java.security.cert.CertPathBuilder.build(Unknown Source)
	... 29 more

	{http://xml.apache.org/axis/}hostname:RodrigoP

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)
	at ServicosWS.Solicitacao.main(Solicitacao.java:63)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
	at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
	at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
	... 11 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
	at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
	at sun.security.validator.Validator.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	... 23 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
	at java.security.cert.CertPathBuilder.build(Unknown Source)
	... 29 more
aix

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

precisa de certificado para acessar.

R

Entao cara, mas ja importei os certificados dentro do navegador ja e não adiantou…
Tem que importar pra dentro do projetoo??

pedruhenrik

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

precisa de certificado para acessar.

vc faz o load do arquivo correto?

algum tempo atrás eu fiz um passo a passo com axis:

espero q ajude:

http://www.guj.com.br/java/237281-tutorial-consumir-webservice-nfe-20

att,

aix

roodrigo.p:
Entao cara, mas ja importei os certificados dentro do navegador ja e não adiantou…
Tem que importar pra dentro do projetoo??

não brother, significa que precisa consumir o ws por https, precisa habilitar ssl na aplicação, tem uma classe chamada InstallCert.java aqui mesmo no guj tem varios exemplos que fazem o serviço, ela gera um arquivo truststore, que vc le ao consumir o serviço.

http://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java

se preferir pode fazer tudo com a ferramenta keytool do java.

R

Hum, mas eu executo a IntallClient junto na hora que chamo o serviço?
Não intendi muito bem…

aix
roodrigo.p:
Hum, mas eu executo a IntallClient junto na hora que chamo o serviço? Não intendi muito bem....

executa uma unica vez sómente para gerar o arquivo com as chaves. depois de feito isto e antes de consumir o serviço, faça assim:

System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
	        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

	        System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
	        System.setProperty("javax.net.ssl.keyStore", "C:/certificadoDoCliente.pfx");
	        System.setProperty("javax.net.ssl.keyStorePassword", "123456");

	        System.setProperty("javax.net.ssl.trustStoreType", "JKS");
	        System.setProperty("javax.net.ssl.trustStore", "arquivo gerado pela IntallCet aqui");
R

Hum… entendi…
Da uma olhada eu executo e da a seguinte msg…

Usage: java InstallCert [:port] [passphrase]
Oque significa?

aix

roodrigo.p:
Hum… entendi…
Da uma olhada eu executo e da a seguinte msg…

Usage: java InstallCert [:port] [passphrase]
Oque significa?

esta dizendo como deve usar, ou seja passar o host e a porta.
brother procura esta classe no forum javaC, pois l aja tem ela melhorada, ficara mais facil de entender, eu não te envio agora a minha, pois estou no trabalho e aqui são outros projetos.

R

PQP isso ta me dano uma dor de cabeça cara… rsrs
To tentano usar a Keytool, mas nela eu tenho que jogar um certificado .ce para pegar o arq q preciso?

R

A cara intendi, gerei um arq .jks,
agora jogo nas configurações…

System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true"); System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); System.setProperty("javax.net.ssl.keyStoreType", "PKCS12"); System.setProperty("javax.net.ssl.keyStore", cert); System.setProperty("javax.net.ssl.keyStorePassword", senhaCert); System.setProperty("javax.net.ssl.trustStoreType", "JKS"); System.setProperty("javax.net.ssl.trustStore", keystore);

certo?
e no System.setProperty(“javax.net.ssl.keyStore”, cert); coloco o caminho do meu certificado que baxei do navegador?
E outra…
ta dano erro na linha
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

Valeu pela atenção cara… to quase lá eu acho! rsrsrs
abss

aix

roodrigo.p:
PQP isso ta me dano uma dor de cabeça cara… rsrs
To tentano usar a Keytool, mas nela eu tenho que jogar um certificado .ce para pegar o arq q preciso?

velho acredite: vai ser mais facil usar a InstallCert do que o keytool, agora se não tem pressa:

http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/keytool.html

http://www.guj.com.br/articles/141

R

E que não intendi como usa o InstallCert cara, eu executo e não da em nada

aix

sem problemas, se ja gerou o jks blz, não é que ela não faça nada, ela espera que você passe parametros, mas qualqer duvida posta ai, se eu não souber corremos atras :wink:

R

Valeu cara, agradeço mesmo...
Então gerei um arq jks...

e fiz o código ficou assim:
try {	
			new Certificado().configurarSSL("", "C:/Users/Suelen/Documents/certificado.jks", "123456");
			
			ServicoSolicitacaoWS service;
			try {
				service = new ServicoSolicitacaoWSServiceLocator()
						.getServicoSolicitacaoWS();
				service.executarSolicitacao(s, u);
			} catch (ServiceException e) {
				e.printStackTrace();
			}
		} catch (RemoteException e) {
			e.printStackTrace();
		}
e na outra classe que configura ssl:
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
		System.setProperty("java.protocol.handler.pkgs",
				"com.sun.net.ssl.internal.www.protocol");
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
		System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
		System.setProperty("javax.net.ssl.keyStore", cert);
		System.setProperty("javax.net.ssl.keyStorePassword", senhaCert);
		System.setProperty("javax.net.ssl.trustStoreType", "JKS");
		System.setProperty("javax.net.ssl.trustStore", keystore);
oq to fazendo errado mas ta dano erro na linha "Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());"
aix

qual o erro ? esta usando netbeans ? o que diz ? não consegue fazer o import ?

R

Description Resource Path Location Type
Access restriction: The constructor Provider() is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\jsse.jar Certificado.java /FarmaciaPopular/src/ServicosWS line 12 Java Problem

Description Resource Path Location Type
Access restriction: The type Provider is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\jsse.jar Certificado.java /FarmaciaPopular/src/ServicosWS line 12 Java Problem

da esses dois erros…
uso o eclipse

R
Arrumei a linha e agr da o seguinte erro:
17/02/2012 12:58:21 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
	at javax.net.ssl.DefaultSSLSocketFactory.throwException(Unknown Source)
	at javax.net.ssl.DefaultSSLSocketFactory.createSocket(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:92)
	at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
	at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)
	at ServicosWS.Solicitacao.main(Solicitacao.java:77)
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
	at java.security.Provider$Service.newInstance(Unknown Source)
	at sun.security.jca.GetInstance.getInstance(Unknown Source)
	at sun.security.jca.GetInstance.getInstance(Unknown Source)
	at javax.net.ssl.SSLContext.getInstance(Unknown Source)
	at javax.net.ssl.SSLContext.getDefault(Unknown Source)
	at javax.net.ssl.SSLSocketFactory.getDefault(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
	... 14 more
Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
	at sun.security.util.DerInputStream.getLength(Unknown Source)
	at sun.security.util.DerValue.init(Unknown Source)
	at sun.security.util.DerValue.&lt;init&gt;(Unknown Source)
	at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source)
	at java.security.KeyStore.load(Unknown Source)
	at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(Unknown Source)
	at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.&lt;init&gt;(Unknown Source)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	... 22 more

	{http://xml.apache.org/axis/}hostname:RodrigoP

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)
	at ServicosWS.Solicitacao.main(Solicitacao.java:77)
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
	at javax.net.ssl.DefaultSSLSocketFactory.throwException(Unknown Source)
	at javax.net.ssl.DefaultSSLSocketFactory.createSocket(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:92)
	at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
	at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
	... 11 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
	at java.security.Provider$Service.newInstance(Unknown Source)
	at sun.security.jca.GetInstance.getInstance(Unknown Source)
	at sun.security.jca.GetInstance.getInstance(Unknown Source)
	at javax.net.ssl.SSLContext.getInstance(Unknown Source)
	at javax.net.ssl.SSLContext.getDefault(Unknown Source)
	at javax.net.ssl.SSLSocketFactory.getDefault(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
	... 14 more
Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
	at sun.security.util.DerInputStream.getLength(Unknown Source)
	at sun.security.util.DerValue.init(Unknown Source)
	at sun.security.util.DerValue.<init>(Unknown Source)
	at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source)
	at java.security.KeyStore.load(Unknown Source)
	at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(Unknown Source)
	at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(Unknown Source)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	... 22 more

alguma sugestão???

aix

agora não sei, mas pela mensagem acredito ainda ser rolo na parte do certificado, falando nisto, se gerou o .jks por keytool deve também importar toda cadeia da raiz certificadora para o arquivo de chaves.

R
Eu consegui gerar o arquivo pelo InstallCert

Agora o que eu deveria fazer???

isso?

System.setProperty(sun.security.ssl.allowUnsafeRenegotiation, true);

System.setProperty(java.protocol.handler.pkgs,

com.sun.net.ssl.internal.www.protocol);

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

System.setProperty(javax.net.ssl.keyStoreType, PKCS12);

System.setProperty(javax.net.ssl.keyStore, “”);

System.setProperty(javax.net.ssl.keyStorePassword, “”);

System.setProperty(javax.net.ssl.trustStoreType, JKS);

System.setProperty(javax.net.ssl.trustStore, jssecacerts);
aix
<blockquote><div class="quote-author">roodrigo.p:</div>Eu consegui gerar o arquivo pelo InstallCert…

Agora o que eu deveria fazer???

isso?

System.setProperty(“sun.security.ssl.allowUnsafeRenegotiation”, “true”);

System.setProperty(“java.protocol.handler.pkgs”,

“com.sun.net.ssl.internal.www.protocol”);

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12”);

System.setProperty(“javax.net.ssl.keyStore”, “”);

System.setProperty(“javax.net.ssl.keyStorePassword”, “”);

System.setProperty(“javax.net.ssl.trustStoreType”, “JKS”);

System.setProperty(“javax.net.ssl.trustStore”, “jssecacerts”);</blockquote>

sim, acheque isto ja estava pronto rsrsrsrs.

R

Estava… kkk… to entrando em tanta coisa aqui e pesquisando, e ainda n consegui faze essa merda…
Mas bom…
Agora esta acusando senha do keystore incorreta

R
Pronto arrumei, agora deu outro erro:
17/02/2012 13:45:07 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: java.lang.NullPointerException
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}hostname:srvjhdf42.saude.gov

java.lang.NullPointerException
	at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
	at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
	at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at org.datasus.service.ServicoSolicitacaoWSSoapBindingStub.executarSolicitacao(ServicoSolicitacaoWSSoapBindingStub.java:318)
	at ServicosWS.Solicitacao.main(Solicitacao.java:68)

uma pergunta, na hora de configurar o SSL eu envio o jssecacerts, e mais 2 parametros...
no meu caso eu to mandando o jssecacerts, e o outro arquivo jks q criei com o keytool e a senha que cria tbm...

Estou fazendo certo??

aix

ta falando dessas linhas ?

System.setProperty("javax.net.ssl.keyStore", "");
System.setProperty("javax.net.ssl.keyStorePassword", "");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
R

System.setProperty("javax.net.ssl.keyStoreType", "JKS"); System.setProperty("javax.net.ssl.keyStore", cert); System.setProperty("javax.net.ssl.keyStorePassword", senhaCert); System.setProperty("javax.net.ssl.trustStoreType", "JKS"); System.setProperty("javax.net.ssl.trustStore", keystore);

essas quatro linhas, to achano que estou mandando errado

aix

System.setProperty(“javax.net.ssl.keyStore”, cert);

cert é um certificado valido né ?

R

Ó, criei o arq jssecacerts e coloco ele na linha: System.setProperty(“javax.net.ssl.trustStore”, keystore);

Depois criei pelo keytool o arq certificado.jks e coloquei ele na linha: System.setProperty(“javax.net.ssl.keyStore”, cert);

E na coloquei a senha que criei quando criei o arq certificado.jks no keytool, na linha: System.setProperty(“javax.net.ssl.keyStorePassword”, senhaCert);

deve ta errado isso :S
E sobre o erro que coloquei ali em cime vc sabe algo???

aix

roodrigo.p:
Ó, criei o arq jssecacerts e coloco ele na linha: System.setProperty(“javax.net.ssl.trustStore”, keystore);

Depois criei pelo keytool o arq certificado.jks e coloquei ele na linha: System.setProperty(“javax.net.ssl.keyStore”, cert);

E na coloquei a senha que criei quando criei o arq certificado.jks no keytool, na linha: System.setProperty(“javax.net.ssl.keyStorePassword”, senhaCert);

deve ta errado isso :S
E sobre o erro que coloquei ali em cime vc sabe algo???

aqui : Depois criei pelo keytool o arq certificado.jks e coloquei ele na linha: System.setProperty(“javax.net.ssl.keyStore”, cert);

pergunto: vc esta consumindo o WS de algum serviço certo ? se sim, eles devem prover o certifcado e não vc criar um, sacou ?

é a mesma coisa que quando consomi um serviço da sefaz, vc precisa comprar um certificado para então consumir o serviço.

R

AAAA INTENDI, intao no keystore é o certificado do servico, eu to tentano consumir o webservice da farmacia popular…
entao la eu coloco o caminha do certificado no meu pc ou só o nome do certificado, por exemplo: DRT2015.SAUDE.GOV.BR
?

Tamo quase… rsrs
Valeu pela ajuda mais uma vez!

aix

roodrigo.p:
AAAA INTENDI, intao no keystore é o certificado do servico, eu to tentano consumir o webservice da farmacia popular…
entao la eu coloco o caminha do certificado no meu pc ou só o nome do certificado, por exemplo: DRT2015.SAUDE.GOV.BR
?

Tamo quase… rsrs
Valeu pela ajuda mais uma vez!

isso coloca o caminho até o certificado que deve ser um arquivo.pfx que eles disponibilizam.

R

Hum…
tem q ser .pfx?
pq ate agora só consegui certificados .cer

aix

roodrigo.p:
Hum…
tem q ser .pfx?
pq ate agora só consegui certificados .cer

pode ser sim, da até pra converter.
pfx, p12 – são PKCS #12 DER encoded

R

Não estou conseguindo o .pfx e os outros tipo dão invalidos…
O unico que deu certo foi o .jks que gerei pelo keytool

E se compilado da aquele erro que coloquei mais acima
Sabe oque pode ser o erro?

aix

só uma duvida que tenho: onde conseguiu o certificado ? falo do .cer ou pfx

R

Desse link que é o meu servico
https://200.214.130.41:9443/farmaciahomologa/services/ServicoSolicitacaoWS?wsdl

aix

roodrigo.p:
Desse link que é o meu servico
https://200.214.130.41:9443/farmaciahomologa/services/ServicoSolicitacaoWS?wsdl

pelo browser vc esxporta para .pfx não esque de marcar a opção exportar toda cadeia de chaves.

R

Entao importei como pfx

Na hora de chamar coloquei assim:
new Certificado().configurarSSL(
“DTR2015.SAUDE.GOV.BR.PFX”,
“jssecacerts”);

e no configurarSSL coloquei a linha assim
System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12”);

e deu o seguinte erro:

Caused by: java.io.IOException: toDerInputStream rejects tag type 45 at sun.security.util.DerValue.toDerInputStream(Unknown Source) at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source) at java.security.KeyStore.load(Unknown Source) at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(Unknown Source) at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) ... 22 more

aix

roodrigo.p:
Entao importei como pfx

Na hora de chamar coloquei assim:
new Certificado().configurarSSL(
“DTR2015.SAUDE.GOV.BR.PFX”,
“jssecacerts”);

e no configurarSSL coloquei a linha assim
System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12”);

e deu o seguinte erro:

Caused by: java.io.IOException: toDerInputStream rejects tag type 45 at sun.security.util.DerValue.toDerInputStream(Unknown Source) at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source) at java.security.KeyStore.load(Unknown Source) at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(Unknown Source) at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) ... 22 more

importou não, exportou não é ?

exportar o .cer do seu browser para um .pfx, geralmente o browser coloca o desktop este arquivo, la nas proparties vc precisa passar o caminho completo, se passar só o nome ele vai considerar que esteja na raiz.

R

EXPORTEI, kkk to ficano doido ja kk

Então mais eu exportei direto dentro da raiz do projeto

R

e ja tentei colocando o caminho tbm…
Como o certificado é pfx, na linha System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12”); eu coloco o PKCS12 mesmo???

aix

cara, gera o arquivo trustore( jks ) por aqui: só antes de gerar troca a url ali pela que esta dentro do wsdl, pois aqui na empresa não consigo abrir o endereço que me passou, alias nem pico este ip. detalhe: ao colocar a url não precisa o inicio hhtps:// e nem o final. depois de gerar o arquivo coloca na raiz da app e coloca o nome la trust_store

package br.com.vinicios.nfe2;

import java.io.*;
import java.security.*;
import java.security.cert.*;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.*;

/**
 * @author dilnei
 * Classe Responsavel por instalar o certificado na aplicacao.
 */
public class InstallCert {

    public static void main(String[] arg) throws Exception {
        List<String> hostList = new ArrayList<String>();
        hostList.add("homologacao.nfe.sefaz.rs.gov.br");
        for (String host : hostList) {
            instala(host);
        }
    }

    public static void instala(String host) throws Exception {
        // Cria o arquivo onde serão adicionados os certificados.
        String trustStoreName = "trust_store";
        File file = new File(trustStoreName);
        if (file.isFile() == false) {
            char SEP = File.separatorChar;
            File dir = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security");
            file = new File(dir, trustStoreName);
            if (file.isFile() == false) {
                file = new File(dir, "cacerts");
            }
        }
        System.out.println("*** " + host + " no arquivo " + file.getAbsolutePath() + " ***");

        int port = 443;
        char[] passphrase = "changeit".toCharArray();

        InputStream in = new FileInputStream(file);
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(in, passphrase);
        in.close();

        SSLContext context = SSLContext.getInstance("TLS");
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
        context.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory factory = context.getSocketFactory();

        // Comunica-se com o servidor para obter os certificados.
        SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
        socket.setSoTimeout(10000);
        try {
            socket.startHandshake();
            socket.close();
        } catch (SSLException e) {
            e.printStackTrace(System.out);
        }

        X509Certificate[] chain = tm.chain;
        if (chain == null) {
            System.out.println("*** Could not obtain server certificate chain");
            return;
        }

        // Processa cada um dos certificados recebidos na cadeia do servidor.
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        for (int i = 0; i < chain.length; i++) {
            X509Certificate cert = chain[i];
            sha1.update(cert.getEncoded());
            md5.update(cert.getEncoded());
        }

        int k = 0;
        X509Certificate cert = chain[k];
        String alias = host + "-" + (k + 1);
        ks.setCertificateEntry(alias, cert);

        OutputStream out = new FileOutputStream(trustStoreName);
        ks.store(out, passphrase);
        out.close();
        System.out.println("*** Added certificate to keystore '" + trustStoreName + "' using alias '" + alias + "'");
    }
    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

    private static String toHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 3);
        for (int b : bytes) {
            b &= 0xff;
            sb.append(HEXDIGITS[b >> 4]);
            sb.append(HEXDIGITS[b & 15]);
            sb.append(' ');
        }
        return sb.toString();
    }

    private static class SavingTrustManager implements X509TrustManager {

        private final X509TrustManager tm;
        private X509Certificate[] chain;

        SavingTrustManager(X509TrustManager tm) {
            this.tm = tm;
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            throw new UnsupportedOperationException();
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            throw new UnsupportedOperationException();
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            this.chain = chain;
            tm.checkServerTrusted(chain, authType);
        }
    }
}
aix

roodrigo.p:
e ja tentei colocando o caminho tbm…
Como o certificado é pfx, na linha System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12”); eu coloco o PKCS12 mesmo???

sim isto diz que é do tipo A1 o certificado.

R
A mano n ta dano certo :/
package ServicosWS;

/**
 * http://blogs.sun.com/andreas/resource/InstallCert.java
 * Use:
 * java InstallCert hostname
 * Example:
 *% java InstallCert ecc.fedora.redhat.com
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
  
/** 
* @author dilnei 
* Classe Responsavel por instalar o certificado na aplicacao. 
*/  
public class InstallCert {  
  
    public static void main(String[] arg) throws Exception {  
        List<String> hostList = new ArrayList<String>();  
        hostList.add("200.214.130.41:9443/farmaciahomologa/services/ServicoSolicitacaoWS");  
        for (String host : hostList) {  
            instala(host);  
        }  
    }  
  
    public static void instala(String host) throws Exception {  
        // Cria o arquivo onde serão adicionados os certificados.  
        String trustStoreName = "trust_store";  
        File file = new File(trustStoreName);  
        if (file.isFile() == false) {  
            char SEP = File.separatorChar;  
            File dir = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security");  
            file = new File(dir, trustStoreName);  
            if (file.isFile() == false) {  
                file = new File(dir, "cacerts");  
            }  
        }  
        System.out.println("*** " + host + " no arquivo " + file.getAbsolutePath() + " ***");  
  
        int port = 443;  
        char[] passphrase = "changeit".toCharArray();  
  
        InputStream in = new FileInputStream(file);  
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());  
        ks.load(in, passphrase);  
        in.close();  
  
        SSLContext context = SSLContext.getInstance("TLS");  
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());  
        tmf.init(ks);  
        X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];  
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);  
        context.init(null, new TrustManager[]{tm}, null);  
        SSLSocketFactory factory = context.getSocketFactory();  
  
        // Comunica-se com o servidor para obter os certificados.  
        SSLSocket socket = (SSLSocket) factory.createSocket(host, port);  
        socket.setSoTimeout(10000);  
        try {  
            socket.startHandshake();  
            socket.close();  
        } catch (SSLException e) {  
            e.printStackTrace(System.out);  
        }  
  
        X509Certificate[] chain = tm.chain;  
        if (chain == null) {  
            System.out.println("*** Could not obtain server certificate chain");  
            return;  
        }  
  
        // Processa cada um dos certificados recebidos na cadeia do servidor.  
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");  
        MessageDigest md5 = MessageDigest.getInstance("MD5");  
        for (int i = 0; i < chain.length; i++) {  
            X509Certificate cert = chain[i];  
            sha1.update(cert.getEncoded());  
            md5.update(cert.getEncoded());  
        }  
  
        int k = 0;  
        X509Certificate cert = chain[k];  
        String alias = host + "-" + (k + 1);  
        ks.setCertificateEntry(alias, cert);  
  
        OutputStream out = new FileOutputStream(trustStoreName);  
        ks.store(out, passphrase);  
        out.close();  
        System.out.println("*** Added certificate to keystore '" + trustStoreName + "' using alias '" + alias + "'");  
    }  
    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();  
  
    private static String toHexString(byte[] bytes) {  
        StringBuilder sb = new StringBuilder(bytes.length * 3);  
        for (int b : bytes) {  
            b &= 0xff;  
            sb.append(HEXDIGITS[b >> 4]);  
            sb.append(HEXDIGITS[b & 15]);  
            sb.append(' ');  
        }  
        return sb.toString();  
    }  
  
    private static class SavingTrustManager implements X509TrustManager {  
  
        private final X509TrustManager tm;  
        private X509Certificate[] chain;  
  
        SavingTrustManager(X509TrustManager tm) {  
            this.tm = tm;  
        }  
  
        @Override  
        public X509Certificate[] getAcceptedIssuers() {  
            throw new UnsupportedOperationException();  
        }  
  
        @Override  
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
            throw new UnsupportedOperationException();  
        }  
  
        @Override  
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
            this.chain = chain;  
            tm.checkServerTrusted(chain, authType);  
        }  
    }  
}

Ja ta encheno o saco isso :S

aix

assim:
hostList.add(“200.214.130.41:9443”);

R

*** 200.214.130.41:9443 no arquivo C:\Program Files\Java\jre1.6.0_06\lib\security\cacerts *** Exception in thread "main" java.net.UnknownHostException: 200.214.130.41:9443 at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(Unknown Source) at ServicosWS.InstallCert.instala(InstallCert.java:76) at ServicosWS.InstallCert.main(InstallCert.java:41)

Da esse erro

aix

roodrigo.p:
*** 200.214.130.41:9443 no arquivo C:\Program Files\Java\jre1.6.0_06\lib\security\cacerts *** Exception in thread "main" java.net.UnknownHostException: 200.214.130.41:9443 at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(Unknown Source) at ServicosWS.InstallCert.instala(InstallCert.java:76) at ServicosWS.InstallCert.main(InstallCert.java:41)

Da esse erro

pinga este ip e veja se responde, pois daqui não cosegui, acho que este endereço esta até errado.

aix

me manda o wsdl pro meu email cara, a rede aqui da empresa é bloqueada.

[email removido]

R

n da

R

Ja enviei

aix

bom dia Roodrigo, conseguiu consumir ?

R

Bom dia…
Ainda não, estou naquele mesmo erro…
quer que eu mande a minha classe de consumir pra voce dar uma olhada???

Abs

aix

roodrigo.p:
Bom dia…
Ainda não, estou naquele mesmo erro…
quer que eu mande a minha classe de consumir pra voce dar uma olhada???

Abs

manda no meu email.

R

Ja enviei, t+

L

ola pessoal , tb estou passando pela mesma dificuldade enviar mensagem para o web service da farmacia popular, tentei importar o wsdl para o netbeans atravez do JAX-WS nao teve jeito so consegui importar atravez do JAX-RPC , e depois das classes gerada, da erro de certificado. aja paciencia.

L

APOS HORAS E HORAS DE PESQUISA CONSEGUI FAZER COM QUE O TAO FAMOSO WEB SERVICE DA FARMACIA POPULAR DESSE SEU PRIMEIRO SINAL DE VIDA , ELE ESTA RESPONDENDO MINHA APLICACAO , POREM , ME RETORNA UMA MENSAGEM QUE NAO ESTOU CONSEGUINDO SOLUCIONAR :
" SOLICITAÇÃO NAO AUTORIZADA , NENHUM MEDICAMENTO AUTORIZADO "

SE ALGUEM TIVER ALGUMA DICA OU JA TENHA PASSADO POR ISSO .

D

E ai Luis tudo bem…

Cara estou com um problema pra acessar um webservice da prefeitura do Rio…
eu li todo o seu problema, mas tenho algumas dúvidas teria como me ajudar?

Tenho um certificado e eu exporto pra .p7b ou .CER

pra consumir esse webservice da farmacia vc usou que tipo de certificado? .pfx ou .jks ?

System.setProperty(sun.security.ssl.allowUnsafeRenegotiation, true);

System.setProperty(java.protocol.handler.pkgs,com.sun.net.ssl.internal.www.protocol);

System.setProperty(javax.net.ssl.keyStoreType, PKCS12);

System.setProperty(javax.net.ssl.keyStore, “”);

System.setProperty(javax.net.ssl.keyStorePassword, “”);

System.setProperty(javax.net.ssl.trustStoreType, JKS);

System.setProperty(javax.net.ssl.trustStore, jssecacerts);

eu não consigo exportar para .pfx ele não dá a opção eu gerei o jks pelo keytool

Tem como me falar passa a passo as etapas?

valeu…

Criado 15 de fevereiro de 2012
Ultima resposta 16 de ago. de 2012
Respostas 82
Participantes 6