Acessar, Consumir WebService com java!

2 respostas
S

Bom Dia a Todos estou precisando acessar um webservice da receita para enviar arquivos da NFP Nota Fiscal Paulista, nao sou um expert em java aida como muito de voces…

mas ja dei uma lida em muito material altes de perguntar a voces, sobre o que é web service tudo mais …
o enderweço do serviço que preciso acessar é esse…

https://www.nfp.fazenda.sp.gov.br/ws/arquivocf.asmx?WSDL

so que eu to usando u axis para fazer as chamas mas os tutoriais que arrumei sao muito simples mas me deu uma ideia de como fazer…
crie uma classe desse geito so par teste…

mas empaco e na hora de acessar os metodos do servico

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Service;
import org.apache.axis.client.Call;


public class NFPKawakami {
	
	public static void main(String[] args) {
		// Endereço, local onde encontra-se o Web Service
		String sServico = "https://www.nfp.fazenda.sp.gov.br/ws/arquivocf.asmx";
		String sBody = new String();

		sBody = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
		sBody += "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">";
		sBody += "<soap12:Header>";
		sBody += "<Autenticacao Usuario=\"user\" Senha=\"senha\" CNPJ=\"0000000000000\" CategoriaUsuario=\"1\" xmlns=\"https://www.nfp.sp.gov.br/ws\"/>";
		sBody += "</soap12:Header>";
		sBody +=		"<soap12:Body>";
		sBody += 				"<Enviar xmlns=\"https://www.nfp.sp.gov.br/ws\">";
		sBody += 						"<NomeArquivo>nomeArquivo</NomeArquivo>";
		sBody += 						"<ConteudoArquivo>0</ConteudoArquivo>";
		sBody +=						"<EnvioNormal>false</EnvioNormal>";
		sBody += 						"<Observacoes></Observacoes>";
		sBody += 				"</Enviar>";
		sBody += 		"</soap12:Body>";
		sBody += "</soap12:Envelope>";
		
	try {
		// Criando e configurando o serviço
		Call call = (Call) new Service().createCall();
		// Configurando o endereço.
		call.setTargetEndpointAddress(sServico);
		// Marcando o método a ser chamado. 
		call.setOperationName("Enviar");
		// Parâmetros da função soma.
		Object[] Parametros = new Object[]{new Integer(2),new Integer(4)};

		//Parametros[0] =  String("");
		
		// Retorno da Função
		
		Integer ret = (Integer)call.invoke(Parametros);
        
		// Imprime o resultado: ret = 2 + 4.
		System.out.println("Resultado : " + ret);
	} catch (ServiceException e) {
		System.out.println("ServiceException : " + e);
	} catch (RemoteException e) {
		System.out.println("RemoteException : " + e);
	}


	}

}

ERRO: RemoteException : Possible SOAP version mismatch: Envelope namespace http://schemas.xmlsoap.org/soap/envelope/ was unexpected. Expecting http://www.w3.org/2003/05/soap-envelope.

Ou seja tenho que passar mais parametros como cabecalho Heander, Envelope igual na String sBody, mas nao sei como fazer isso…

se algem poder me ajudar agradeceria muito…

2 Respostas

H
SOAPMessage criaMsg(String s) {

        SOAPMessage mensagem = null;

        try {
            SOAPFactory sfactory = SOAPFactory.newInstance();
            mensagem = MessageFactory.newInstance().createMessage();
            SOAPElement campo = mensagem.getSOAPBody().addBodyElement(
                    sfactory.createName("ser:consultarNumeracaoReimpressao", "ser", site));
            SOAPElement user = campo.addChildElement(sfactory.createName("usuario", "ser", site));
            SOAPElement pass = campo.addChildElement(sfactory.createName("senha", "ser", site));
            SOAPElement sol = campo.addChildElement(sfactory.createName("numeroSolicitacao", "ser", site));

            user.addTextNode(login);
            pass.addTextNode(senha);
            sol.addTextNode(s);
            mensagem.saveChanges();
            try {
                mensagem.writeTo(System.out);
                System.out.println();
            } catch (IOException ex) {
                Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (SOAPException ex) {
            Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
        }
        mes = mensagem;
        return mes;
    }

Tenta isso ae
public abstract Name createName(String localName, String prefix, String uri) throws SOAPException

alves.Felipe

cara… vc pode usar o Axis 2 para consumir esse serviço… acho que fica mais fácil
segue um exemplo http://ws.apache.org/axis2/tools/1_1/eclipse/wsdl2java-plugin.html#operation2

Criado 23 de agosto de 2008
Ultima resposta 21 de jul. de 2010
Respostas 2
Participantes 3