Páginas filhas
  • Intellector 9 - API - Executando Políticas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
languagejava
linenumberstrue
/**
* $Revision: 1.2 $
* $Date: 2008-11-13 20:26:51 $
*/
package br.com.tools.intellector.util;

import java.io.File;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.FileRequestEntity;
import org.apache.commons.httpclient.methods.RequestEntity;

/**
* Uma classe generica, via linha de comando para enviar arquivos,
* e, a intencao eh enviar arquivos XML para testar os servlets
* <p>
* @author claudio cardozo
*
*/
public class PostXML {
    /**
*
* Use: java PostXML [http://www.intellector.com.br:8080/intellector/runpolicy] c:\dummy_pol.xml
*
*  @param args comando na linha de argumentos
*         Argumento 0 eh uma URL para um web server, servlet (wsdl?)
*         Argumento 1 eh arquivo local formato XML (pode ser qq arquivo!)
*
*/
   public static void main(String[] args) throws Exception {
	   // passagem de argumentos
       if (args.length != 2) {
           System.out.println("Use: java -classpath <classpath> [-Dorg.apache.commons.logging.simplelog.defaultlog=<loglevel>] PostXML <url> <arquivo>]");
           System.out.println("<classpath> - deve conter commons-httpclient.jar e commons-logging.jar");
           System.out.println("<loglevel> - nivel de erro, warn, info, debug, trace");
           System.out.println("<url> - a URL para postar o arquivo");
           System.out.println("<arquivo> - arquivo para postar para a URL");
           System.out.println();
           System.exit(1);
       }
       // Pega a URL destino
       String strURL = args[0];
       // Pega o arquivo para ser postado
       String strXMLFilename = args[1];
       File input = new File(strXMLFilename);
       // Prepara o post HTTP
       PostMethod post = new PostMethod(strURL);
       // O conteudo do Request serah retirado diretamento do stream de entrada
       RequestEntity entity = new FileRequestEntity(input, "text/xml; charset=ISO-8859-1");
       post.setRequestEntity(entity);
       // Pega o HTTP client
       HttpClient httpclient = new HttpClient();
       // Executa o request
       try {
           int result = httpclient.executeMethod(post);
           // Mostra o status code
           System.out.println("Response status code: " + result);
           // Mostra o response
           System.out.println("Response body: ");
           System.out.println(post.getResponseBodyAsString());
       } finally {
           // Release da conexao atual para o connection pool de conexoes, uma vez que jah foi feito
           post.releaseConnection();
       }
   }

}



Usando

...

Aqui um pequeno exemplo de chamada usando os utilities do PLSQL do Oracle.

Bloco de código
languagesql
linenumberstrue
create or replace FUNCTION sp_solicitahttp ( szXmlEntrada IN VARCHAR2, lenXmlEntrada IN BINARY_INTEGER, szXmlSaida IN OUT VARCHAR2, lenXmlSaida IN OUT BINARY_INTEGER )
RETURN BINARY_INTEGER
IS
/*------------------------------------------------------------------------------------------------
 DATA         : 02/12/2008
 AUTOR        : LUIZ LIMA
 PRODUTO      : SCE
 MODULO       : BATCH
 SGBD         : ORACLE
-------------------------------------------------------------------------------------------------*/
  o_return_code INTEGER;
  i_urltext VARCHAR2(32767);
  i_timeout INTEGER DEFAULT 60;
  sslreq UTL_HTTP.req;
  rsp UTL_HTTP.resp;
  replymessage VARCHAR2(32767);
  replyline VARCHAR2(32767);
BEGIN
  -- Maquina de Teste
  i_urltext := 'http://192.168.0.172:8080/intellector/runpolicy';
  i_timeout := 50;
  -- Iniciando o Banco
  sslreq := UTL_HTTP.BEGIN_REQUEST(i_urltext,'POST','HTTP/1.0');

  UTL_HTTP.SET_HEADER(sslreq,'Content-Type','text/xml;charset=ISO-8859-1');
  UTL_HTTP.SET_HEADER(sslreq,'Content-Length',lenXmlEntrada);
  UTL_HTTP.SET_TRANSFER_TIMEOUT(i_timeout);
  /* Write information over secure connection */
  /*MyXML := '<?xml version="1.0" encoding="UTF-8"?>' ||
           '<raiz>' ||
              '<programa>politica_dummy</programa>' ||
              '<usuario>admin</usuario>' ||
              '<senha>tools</senha>' ||
              '<tipo>credito</tipo>' ||
              '<layout>Layout_politica_dummy</layout>' ||
              '<CodCpf>21769796304</CodCpf>' ||
              '<DataNascimento>30011966</DataNascimento>' ||
           '</raiz>';
*/
  UTL_HTTP.WRITE_TEXT(sslreq, szXmlEntrada);
  --UTL_HTTP.WRITE_TEXT( sslreq, MyXML);
  /* Initialize Response */
  rsp:=UTL_HTTP.GET_RESPONSE(sslreq);
  replymessage := '';
  /* Retrieve response */
  BEGIN
  LOOP
    UTL_HTTP.READ_LINE(rsp, replyline, TRUE);
    replymessage := replymessage || replyline;
  END LOOP;
  UTL_HTTP.END_RESPONSE(rsp);
  EXCEPTION
    WHEN UTL_HTTP.END_OF_BODY THEN
      UTL_HTTP.END_RESPONSE(rsp);
  END;
  /* Set output information */
  szXmlSaida := replymessage;
  lenXmlSaida := length(szXmlSaida);
  o_return_code := 1;
  RETURN o_return_code;
EXCEPTION
WHEN OTHERS THEN
o_return_code := -1;
szXmlSaida := replymessage || ' erro ' || SQLERRM;
lenXmlSaida := length(szXmlSaida);
return o_return_code;
END;
Usando Active X (VB/ASP)

Aqui um pequeno trecho de código para uma chamada simples ao TOTVS Intellector usando VB/ASP.

Bloco de código
languagejava
linenumberstrue
'-----------------------------------------------------------------
'-- Função que executa o Intellector via HTTP
'-----------------------------------------------------------------
Function SolicitaHTTP( byval asXmlEntrada )

	Dim Url
	Dim objXMLReceive
	Dim objXMLSend
	Dim objSrvHTTP

	'Pego o Host e o path do servelet do intellector para formar a url
	Url = "[http://www.intellector.com.br:8080/intellector/runpolicy"]

        Set objSrvHTTP		= CreateObject("Msxml2.ServerXMLHTTP.3.0")
	Set objXMLSend		= CreateObject("Msxml2.DOMDocument.3.0")
	Set objXMLReceive	= CreateObject("Msxml2.DOMDocument.3.0")

	objXMLSend.async = false

	if not( asXmlEntrada = "" or isnull( asXmlEntrada ) or isempty( asXmlEntrada ) ) then

		'Carrego XML de entrada
		objXMLSend.loadXML asXmlEntrada

		'Seto os Timeouts
		'objXMLSend.setTimeouts(resolveTimeout, connectTimeout,  sendTimeout, receiveTimeout)
		'Valores				 No timeout	,	90 seg ,  2 min ,  5 min
		objSrvHTTP.setTimeouts 0		, 90000	 ,  120000, 3000000

		'Configuro o endereço
		objSrvHTTP.open "POST", Url, false

		'Envio o xml para o servidor
		objSrvHTTP.send objXMLSend

		Response.ContentType = "text/html;charset=ISO-8859-1"

		'Busco o XML de retorno
		objXMLReceive = objSrvHTTP.responseText

		SolicitaHTTP = objXMLReceive
	end if
End Function
Usando RESTful

Uma vez que os exemplos acima, via browser, esclareceram envelope/contrato, segue abaixo um exemplo de chamada via httpClient. REST é apenas um estilo de arquitetura, baseado em estados de transferência.

...