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
M

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

M

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)
M

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

M

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.

M

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??

M

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
M

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

M

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

M

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

M

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."

M

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
A

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
A

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??

P

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,

A

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…

A
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?

A

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

A

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

A

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());"
A

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???

A

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);
A
<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??

A

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

A

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???

A

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!

A

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

A

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?

A

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

A

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

A

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???

A

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);
        }
    }
}
A

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

A

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

A

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.

A

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

[email removido]

R

n da

R

Ja enviei

A

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

A

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