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
titlePostXML
linenumberstrue
package br.com.totvs.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 ricart.monachesi
 *
 */

public class PostXML {

    /**
	*
	* Use: java PostXML [http://localhost:8080/iw-editor/services/PolicyExecution] 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=UTF-8");
       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 RESTful - Json

Abaixo um exemplo de execução de política usando como entrada um arquivo JSON com os dados de entrada. O retorno também será um JSON.

Bloco de código
languagejava
themeEclipse
titlePostJSON
package br.com.totvs.intellector.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

/**
 * Uma classe generica, via linha de comando para enviar arquivos, e, a intencao
 * eh enviar arquivos JSON para testar os servlets
 * <p>
 * 
 * @author ricart.monachesi
 *
 */

public class PostJSON {

	/**
	 *
	 * Use: java PostJSON
	 * http://localhost:8080/iw-editor/services/policy/execute http://localhost:8080/iw-editor/services/login/perform admin tools01 C:\temp\ent.json
	 * @param args
	 *
	 */
	public static void main(String[] args) throws Exception {
		// passagem de argumentos
		if (args.length != 5) {
			System.out.println(
					"Use: java -classpath <classpath> [-Dorg.apache.commons.logging.simplelog.defaultlog=<loglevel>] PostXML <url> <urlAuth> <usuario> <senha> <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("<urlAuth> - a URL para postar a autenticação");
			System.out.println("<usuario> - usuario");
			System.out.println("<senha> - senha");
			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 a URL autenticação
		String strURLAuth = args[1];

		// Pega o usuário autenticação
		String usuario = args[2];

		// Pega a senha autenticação
		String senha = args[3];

		// Pega o arquivo para ser postado
		String strXMLFilename = args[4];
		File input = new File(strXMLFilename);
		String envio = "";
		try (FileReader reader = new FileReader(strXMLFilename); BufferedReader br = new BufferedReader(reader)) {

			// read line by line
			String line;
			while ((line = br.readLine()) != null) {
				envio = envio.concat(line);
			}

		} catch (IOException e) {
			System.err.format("IOException: %s%n", e);
		}

		HttpResponse httpResponse = null;
		DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
		BufferedReader bufferedReader = null;
		HttpEntity httpEntity = null;
		StringEntity stringEntity = new StringEntity(envio);

		// Autenticar no Intellector
		HttpGet httpGet = new HttpGet(strURLAuth);
		String credential = Base64.encodeBase64String((usuario.concat(":").concat(senha)).getBytes("UTF-8"));
		httpGet.setHeader("Authorization", "Basic " + credential.substring(0, credential.length()));
		httpGet.setHeader("Accept", "application/json");
		httpGet.setHeader("Connection", "close");
		httpEntity = (httpResponse = defaultHttpClient.execute(httpGet)).getEntity();
		httpGet.completed();
		EntityUtils.consume(httpEntity);

		// Enviar os dados para a execução da política
		stringEntity.setContentType("application/json");
		HttpPost httpPost = new HttpPost(strURL);
		httpPost.setHeader("Authorization", "Basic " + credential.substring(0, credential.length()));
		httpPost.setEntity(stringEntity);
		httpEntity = (httpResponse = defaultHttpClient.execute(httpPost)).getEntity();
		if (null != httpEntity) {
			bufferedReader = new BufferedReader(new InputStreamReader(httpEntity.getContent()));
			String output;
			String json;
			for (json = ""; (output = bufferedReader.readLine()) != null; json = (new StringBuilder()).append(json)
					.append(output).toString())
				;
			defaultHttpClient.getConnectionManager().shutdown();
			System.out.println(json);
		} else {
			System.out.println("Execução retornou null");
		}

	}

}


Exemplo de retorno de execução de uma política pelo método REST.

Bloco de código
themeEclipse
titleExemplo de retorno
linenumberstrue
{"data":{"message":"{\"LPT__sAcao\":\"APROVA\",\"LPT__sMsgErro\":\"\",\"LIMITE\":\"200.0\",\"MensagemRetorno\":\"\",\"LPT__iRetorno\":\"0\",\"LPT__CodExecucao\":\"dd66926e-51bd-47ce-9759-ac7e3bdd16c1\"}"}}

...

Usando RESTful XML

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.

...

languagejava
themeEclipse
titlePostWSDL
Bloco de código
themeEclipse
linenumberstrue
package br.com.tools.intellector.util;

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;

/**
* Uma classe generica, via linha de comando para enviar arquivos,
* e, a intencao eh enviar arquivos XML para testar o wsdl/rest
* <p>
* @author claudio cardozo
*
*/
public class PostWSDL {

	// configura a url?wsdl
    private static String url =
        "[http://192.168.0.185:8080/intellector/services/PolicyExecution/executePolicy";]

    /**
* Chamada RESTful via httpClient
* @param args
*/
    public static void main(String[] args) {

       // instancia um HttpClient
       HttpClient client = new HttpClient();

       // instancia um GET HTTP method
       HttpMethod method = new GetMethod(url);

       // configura name-value pairs da string para o metodo
       // definindo um xml com os dados a serem para um uma politica
       NameValuePair nvp1= new NameValuePair("xmlInputString", 
    		    "<raiz>" +
				"<programa>politica_dummy</programa><usuario>admin</usuario>" +
				"<senha>tools01</senha>"+
				"<tipo>credito</tipo>"+
				"<layout>Layout_politica_dummy_credito</layout>"+
				"<CodCpf>21769796304</CodCpf>"+
				"<DataNascimento>30011966</DataNascimento>"+
				"<ValBem>101.34</ValBem>"+
				"<DataAberturaConta>23102008</DataAberturaConta>"+
				"</raiz>");

       // configura as partes de envio
       method.setQueryString(new NameValuePair[]{nvp1});

       try{
           int statusCode = client.executeMethod(method);

           System.out.println("QueryString>> " + method.getQueryString());
           System.out.println("Status Text>> " + HttpStatus.getStatusText(statusCode));

           // pega a resposta como String
           System.out.println("Response>> " + method.getResponseBodyAsString());

           //release da conexao
           method.releaseConnection();
       }
       catch(IOException e) {
           e.printStackTrace();
       }
   }

}

...


Nota: Saiba mais sobre REST
 Consultando Políticas via Web Service (WSDL)

...

Exemplo do XML de retorno:
Bloco de código
languagehtml/xml
linenumberstrue
<list>
  <map>
     <entry>
        <string>retorno</string>
        <string>0</string>
     </entry>
     <entry>
        <string>msgerro</string>
        <string></string>
     </entry>
  </map>
  <map>
     <entry>
        <string>layout</string>
        <string>Layout_politica_dummy</string>
     </entry>
     <entry>
       <string>cod_programa</string>
       <string>politica_dummy</string>
     </entry>
     <entry>
      <string>policyType</string>
      <string>defaulttype</string>
    </entry>
  </map>
  <map>
    <entry>
       <string>layout</string>
       <string>Layout_politica_dummy1</string>
    </entry>
    <entry>
      <string>cod_programa</string>
      <string>politica_dummy1</string>
    </entry>
    <entry>
      <string>policyType</string>
      <string>defaulttype</string>
    </entry>
  </map>
  <map>
    <entry>
      <string>layout</string>
      <string>Layout_politica_dummy2</string>
    </entry>
    <entry>
      <string>cod_programa</string>
      <string>politica_dummy2</string>
    </entry>
    <entry>
      <string>policyType</string>
      <string>defaulttype</string>
    </entry>
  </map>
</list>


...