Conexão SOAP

Pessoal,

Estou tentando conectar ao webservice da cvm.gov.br. Segundo as instruções do site (http://www.cvm.gov.br/webservices/Sistemas/SCW/CDocs/WsDownloadInfs.asmx?op=Login) devo enviar um arquivo xml conforme o indicado. Acredito que estou fazendo certo, como vocês poderão ver no meu código.

Segundo o manual do Sistema, eu devo fazer o seguinte:

[quote]1- Login no CVMWeb:

Para que um sistema cliente possa acessar determinadas funcionalidades do web service, deve-se inicialmente efetuar o Login no CVMWeb.

Para isso, o método Login deve ser chamado, passando como parâmetros o identificador do sistema e a senha de acesso, fornecidos via e-mail após o processo de cadastro.

Esse método, assim como os demais, utiliza recurso de SOAP HEADER. O SOAP HEADER, chama-se sessaoIdHeader e é instanciado pelo próprio método.

Em chamadas subseqüentes a outros métodos, o mesmo SOAP HEADER deve ser enviado ao web service.
[/quote]

Ocorre que independente do conteúdo da minha mensagem xml, desde que bem formada, eu não consigo obter resposta. Ocorre uma mensagem de erro ed NullPointerException dentro da classe HttpSOAPConnection, conforme visualizado após o código.

Alguém tem idéia? Será que o URL (http://www.cvm.gov.br/webservices/Sistemas/SCW/CDocs/WsDownloadInfs.asmx) é esse mesmo?

[code]import java.io.ByteArrayInputStream;
import javax.xml.soap.*;

public class TestClient {

public static void main(String [] args) {
	    
	try {
		String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
			+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
			+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
			+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
			+ "<soap:Header>"
			+ "<sessaoIdHeader xmlns=\"http://www.cvm.gov.br/webservices/\">"
			+ "<Guid>nonono</Guid>"
			+ "<IdSessao>1010</IdSessao>"
			+ "</sessaoIdHeader>"
			+ "</soap:Header>"
			+ "<soap:Body>"
			+ "<Login xmlns=\"http://www.cvm.gov.br/webservices/\">"
			+ "<iNrSist>1111</iNrSist>"
			+ "<strSenha>11111</strSenha>"
			+ "</Login>"
			+ "</soap:Body>"
			+ "</soap:Envelope>";

		MessageFactory mf = MessageFactory.newInstance();
		SOAPMessage smsg = mf.createMessage(new MimeHeaders(), new ByteArrayInputStream(xmlString.getBytes()));
		SOAPPart sp = smsg.getSOAPPart();
		SOAPEnvelope se =  (SOAPEnvelope)sp.getEnvelope();
		
		SOAPConnection conn = SOAPConnectionFactory.newInstance().createConnection();
		SOAPMessage response = conn.call(smsg, "http://www.cvm.gov.br/webservices/Sistemas/SCW/CDocs/WsDownloadInfs.asmx");
		
		System.out.println("Response : " + response.getSOAPBody());
	} catch (Exception e) {
		e.printStackTrace();
	}
}

}[/code]

Stack Trace:
20/02/2011 08:55:15 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
SEVERE: SAAJ0010: Unable to read response
java.lang.NullPointerException
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.readFully(HttpSOAPConnection.java:643)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:390)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:180)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:151)
at TestClient.main(TestClient.java:33)
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: null
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:157)
at TestClient.main(TestClient.java:33)
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: null
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:151)
… 1 more
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: null
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:414)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:180)
… 3 more

CAUSE:

java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: null
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:151)
at TestClient.main(TestClient.java:33)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: null
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:414)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:180)
… 3 more

CAUSE:

java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: null
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:151)
at TestClient.main(TestClient.java:33)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: null
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:414)
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:180)
… 3 more

Usei o mesmo código para acessar outro serviceweb que encontrei na net (https://testweb.commidea.com/Gateway/Gateway.asmx e aparentemente deu certo.

Isso significa que meu sistema tem erro de parâmetros? Nesse caso não deveria voltar uma mensagem de erro ao invés de mensagem que não consegue ler a resposta?

É engraçado dar erro, pois eu consigo encontrar o wsdl do url indicado para fazer a conexão (http://www.cvm.gov.br/webservices/Sistemas/SCW/CDocs/WsDownloadInfs.asmx).

Segue o código que consegui fazer a consulta no novo webservice.

[code]import java.io.ByteArrayInputStream;
import javax.xml.soap.*;

public class TestClient2 {

public static void main(String [] args) {

	try {
		String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
		+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
		+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
		+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
		+ "<soap:Body>"
		+ "<GetServerStatus xmlns=\"https://www.commidea.webservices.com\" />"
		+ " </soap:Body>"
		+ "</soap:Envelope>";

		MessageFactory mf = MessageFactory.newInstance();
		SOAPMessage smsg = mf.createMessage(new MimeHeaders(), new ByteArrayInputStream(xmlString.getBytes()));
		SOAPPart sp = smsg.getSOAPPart();
		SOAPEnvelope se =  (SOAPEnvelope)sp.getEnvelope();

		SOAPConnection conn = SOAPConnectionFactory.newInstance().createConnection();
		SOAPMessage response = conn.call(smsg, "https://testweb.commidea.com/Gateway/Gateway.asmx");

		response.writeTo(System.out);

	} catch (Exception e) {
		e.printStackTrace();
	}
}

}[/code]