WebService

Galera to com um problema para realizar a comunicação com um webservice da nfse, pegeui os xsd e gerei todas as classes necessario

a url de conexao com o serviço é https://www.marmeleiro.pr.gov.br:8082/nfsewsteste/Services.svc

e eu recebo o seguinte erro quando tento transmitir o xml de dados da nota


javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.InputRecord.read(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 sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
	at com.consisa.global.utils.conexao.seguranca.HttpsConnectionSsl.transmitir(HttpsConnectionSsl.java:72)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.consultarNfsePorRps(ControleMensagemWSNFSe.java:215)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.consultarAtualizarDocumentoIntegracao(ControleMensagemWSNFSe.java:83)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.consultarIntegracaoDocumento(ControleMensagemWSNFSe.java:77)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.criarLoteSincrono(ControleMensagemWSNFSe.java:48)
	at com.consisa.dfe.teste.abrasf.TesteEnvioNFSE.main(TesteEnvioNFSE.java:56)
com.consisa.global.utils.excecao.MyException: Erro de envio de dados ao executar serviço
	at com.consisa.global.utils.conexao.seguranca.HttpsConnectionSsl.transmitir(HttpsConnectionSsl.java:99)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.consultarNfsePorRps(ControleMensagemWSNFSe.java:215)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.consultarAtualizarDocumentoIntegracao(ControleMensagemWSNFSe.java:83)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.consultarIntegracaoDocumento(ControleMensagemWSNFSe.java:77)
	at com.consisa.dfe.msgws.ControleMensagemWSNFSe.criarLoteSincrono(ControleMensagemWSNFSe.java:48)
	at com.consisa.dfe.teste.abrasf.TesteEnvioNFSE.main(TesteEnvioNFSE.java:56)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.InputRecord.read(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 sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
	at com.consisa.global.utils.conexao.seguranca.HttpsConnectionSsl.transmitir(HttpsConnectionSsl.java:72)
	... 5 more

Alguma sugestão do que esta ocorrendo ?

A comunicação é SOAP? Se sim, você tem o WSDL ?

Imagino que seje com soap o problema é que tem um diabo de um framework aqui da empresa por tras de todo esse dmonio, naum sei direito nem o que usa…

mas se é um webservice SOAP você precisa do WSDL dele pra poder acessar, senão não tem como.

bom conversei com um colega na empresa e segundo ele o wsdl não é necessario se voce quiser fazer apenas a comunicação com o web service …

se você quiser enviar as coisas no formato correto, é bom ter o WSDL, a não ser que saiba qual são os dados corretos.

como você está tentando acessar? tem como postar o código ?

metodos de conexao e de transmissao do xml

public URLConnection conectar(String url, CertificadoBean certPrivado) {

        URLConnection uc = null;
		try {
			uc = new URL("http://www.marmeleiro.pr.gov.br:8082/nfsewsteste/Services.svc").openConnection();
		} catch (MalformedURLException e) {
			throw new MyException(CSMessageSys._ERR_NAO_IDENTIFICADO,"URL inválida ao executar serviço",e);
		} catch (IOException e) {
			throw new MyException(CSMessageSys._ERR_NAO_IDENTIFICADO,"Erro de envio de dados ao executar serviço",e);
		}
        
        connection = (HttpURLConnection) uc;
		//connection.setSSLSocketFactory(CredentialManager.createSSLSocketFactory(certPrivado.getKeyManagers(), uc.getURL()));
        connection.setConnectTimeout(30000);
        connection.setReadTimeout(30000);
        connection.setDoOutput(true);
        connection.setDoInput(true);
        try {
			connection.setRequestMethod("POST");
		} catch (ProtocolException e) {
			e.printStackTrace();
		}
		
		return uc;
	}

	public void desconectar() {
		if (connection != null) {
			connection.disconnect();
		}
	}

	public String transmitir(String xmlEnvio,
			                 String soapAction,
			                 String contentType,
			                 String tagRetornoMsgResposta) {

		connection.setRequestProperty("SOAPAction", soapAction);
        connection.setRequestProperty("Content-Length", String.valueOf(xmlEnvio.length()));
        connection.setRequestProperty("Content-Type", contentType);

        Writer writer = null;
		try {
			
			writer = new OutputStreamWriter(connection.getOutputStream());
	        writer.write(xmlEnvio);
	        writer.flush();
	        writer.close();

	        InputStreamReader reader = new InputStreamReader(connection.getInputStream());
	        BufferedReader bufferedReader = new BufferedReader(reader);
	        
	        StringBuilder strRetorno = new StringBuilder();
            
            String xmlRetorno = "";

            while ((xmlRetorno = bufferedReader.readLine()) != null)
            {
            	strRetorno.append(xmlRetorno);
            }
            
            xmlRetorno = new String(strRetorno);

            if (tagRetornoMsgResposta != null) {
                return XmlUtil.tratarRetornoMsgSOAP(xmlRetorno, tagRetornoMsgResposta);
            } else {
            	return xmlRetorno;
            }
		} catch (SocketTimeoutException e) {
			throw new MyException(CSMessageSys._ERR_NAO_IDENTIFICADO,"Tempo limite excedido ao executar serviço",e);
		} catch (IOException e) {
			throw new MyException(CSMessageSys._ERR_NAO_IDENTIFICADO,"Erro de envio de dados ao executar serviço",e);
		}
	}

Acho que você precisa enviar uma SOAPMessage.

Pelo statcktrace, você não está utilizando SSL na conexão para consumir o WebService. Pelo seu código, a parte que seta o SSl está comentada.

quando usava o https com o ssl tava aquele erro entaum tirei o https deixei http e o ssl tambem saquei fora

dai comecei a consegui a escrever o xml no outputstream da connection mais quando eu tendo pegar o inputstream na linha seguinte recebe o erro: error http code 415

que o tipo de erro para tipo de midia naum suportada

Por favor, quando postar um statcktrace, poste o código que deu o erro, pois senão vamos chegar a conclusões erradas.

Se mudou o erro e/ou o código, poste o statcktrace e o código correspondente.

Claro, peço desculpas acabei mudando o codigo e na hora postei e nem lembrei que tinha alterado, desculpa pessoal…