Estou tendo que criar um cliente para o webservice disponibilizado pelo www.portaltui.net, porém, para consumir preciso passar junto com o xml SOAP, meu usuario, senha e token.
Estou desenvolvendo utilizando o netbeans, que já utilizei com sucesso para o desenvolviemtno de outros clientes que não exigiam estes dados de validação.
Alguém daqui do forum já teve que utilizar o netbeans para desenvolver um cliente que exige autenticação.
Estou enviando o xml desta forma e o erro permanece.
O código para envio, que estou utilizando é o seguinte.
//Criar HTTP ConnectionURLurl=newURL("http://www.portaltui.net/webservices/PortalTUI.asmx/");HttpURLConnectionurlconn;urlconn=(HttpURLConnection)url.openConnection();//Preparar cabeçalho do HTTP Requesturlconn.setRequestMethod("POST");urlconn.setRequestProperty("Content-Type","text/xml; charset=urf-8");urlconn.addRequestProperty("SOAPAction","http://tempuri.org/EnviarDados\"");urlconn.setDoOutput(true);//Criar conteúdo HTTP RequestOutputStreamout=urlconn.getOutputStream();//Montar SOAP (XML)StringBuildersoapIn=soap();Stringtexto=soapIn.toString();//Na variável Texto contém o xml informado assima.for(inti=0;i<soapIn.length();i++){out.write(soapIn.charAt(i));}Documentdoc;DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();InputStreamconnInputStream=urlconn.getInputStream();doc=db.parse(connInputStream);Stringretorno=doc.getDocumentElement().getFirstChild().getFirstChild().getFirstChild().getFirstChild().getNodeValue();System.out.println("Resultado: "+retorno);
Peço, por favor que me ajudem a resolver este problema.
A
afffernando
Eu não precisei fazer esta parte da chamada e do envio na mão, para isso eu usei o ws-import que o propio netbeans tem.
somente no momento em que faço as chamadas que eu edito o conteudo do SOAP antes do envio.
primeiro crio o handler que vai fazer essa edição:
publicclassLoggingHandlerimplementsSOAPHandler<SOAPMessageContext>{/** Creates a new instance of LoggingHandler */publicLoggingHandler(){}publicjava.io.FileOutputStreamfos;publicbooleanhandleMessage(SOAPMessageContextc){SOAPMessagemsg=c.getMessage();booleanrequest=((Boolean)c.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY)).booleanValue();try{if(request){// This is a request message.// Write the message to the output streamSOAPEnvelopeenvelope=msg.getSOAPPart().getEnvelope();envelope.setPrefix("soap");SOAPHeaderheader=envelope.addHeader();header.setPrefix("soap");SOAPElementel=header.addHeaderElement(envelope.createName("AuthenticationSoapHeader ","","http://tempuri.org/"));SOAPElementel2=el.addChildElement("Pw");el2.setValue(MINHA_SENHA);el2=el.addChildElement("User");el2.setValue(MEU_USER);el2=el.addChildElement("DevToken");el2.setValue(MEU_TOKEN);SOAPBodybody=envelope.getBody();body.setPrefix("soap");msg.saveChanges();}}catch(Exceptione){if(request)System.out.println("erro request:");elseSystem.out.println("erro response:");System.out.println(e);}returntrue;}publicbooleanhandleFault(SOAPMessageContextc){SOAPMessagemsg=c.getMessage();try{this.fos=newjava.io.FileOutputStream("C:/log-erro.txt");msg.writeTo(fos);}catch(Exceptione){System.out.println(e);}returntrue;}publicvoidclose(MessageContextc){}publicjava.util.SetgetHeaders(){// Not required for loggingreturnnull;}}
e no momento em que for ser acionado o serviço, é preciso editar para que passe pelo handler: