Gastaldi's Blog

Mais um blog sobre Java …

Arquivos de tags: PASTEBIN

Serviço REST para postar mensagens no Pastebin.com

O PasteBin é um serviço que permite que você publique trechos de código e conteúdo temporário em geral. Normalmente para evitar ter que salvar num arquivo texto e transmitir via email, ou outro protocolo, basta apenas você entrar no site, colar o conteúdo que você deseja compartilhar e aí disponibilizar a URL que ele irá gerar para quem você quiser.

É possível integrar com o JBoss RestEasy para que essa publicação seja encapsulada no Client Framework, usando a API definida em http://pastebin.com/api.php

Crie a interface de serviço

import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.jboss.resteasy.annotations.Form;

/**
 * Publica um conteúdo no Pastebin.com
 *
 * @author George Gastaldi
 * 
 */
@Path("/")
public interface PasteBinService {

	/**
	 * Publica o código fonte e retorna a URL publicada
	 * 
	 * @param pasteCode
	 * @return
	 */
	@POST
	@Path("/api_public.php")
	@Consumes(MediaType.TEXT_PLAIN)
	@Produces(MediaType.TEXT_PLAIN)
	public String publish(@FormParam("paste_code") String pasteCode);
	/**
	 * Publica o código fonte e retorna a URL publicada
	 * 
	 * @param pasteCode
	 * @return
	 */
	@POST
	@Path("/api_public.php")
	@Consumes(MediaType.TEXT_PLAIN)
	@Produces(MediaType.TEXT_PLAIN)
	public String publish(@FormParam("paste_code") String pasteCode, @Form PasteBinParams params);
}

Aqui estou usando um recurso bacana do RestEasy que é o encapsulamento dos parametros em uma classe Java a parte.
Aqui está o código-fonte da classe de parametros:


import javax.ws.rs.FormParam;

public class PasteBinParams {

	/**
	 * - for adding a title or name to your paste.
	 */
	@FormParam("paste_name")
	private String pasteName;

	/**
	 * - for sending confirmation email with paste link.
	 */
	@FormParam("paste_email")
	private String pasteEmail;

	/**
	 * - for using a certain subdomain.
	 */
	@FormParam("paste_subdomain")
	private String pasteSubdomain;

	/**
	 * - for making it public (0) or private (1).
	 */
	@FormParam("paste_private")
	private int pastePrivate;

	/**
	 * - for adding expiration date. N = Never, 10M = 10 Minutes, 1H = 1 Hour,
	 * 1D = 1 Day, 1M = 1 Month.
	 */
	@FormParam("paste_expire_date")
	private String pasteExpireDate;

	/**
	 * - for adding syntax highlighting.
	 */
	@FormParam("paste_format")
	private String pasteFormat;
     
         ... getters e setters omitidos ...
}

Agora é só testar !

	public static void main(String[] args) {
		// Necessário inicializar
		RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
		PasteBinService service = ProxyFactory.create(PasteBinService.class,"http://pastebin.com");
		String url = service.publish("Hello REST World !");

		System.out.println("URL: " + url);

		PasteBinParams params = new PasteBinParams();
		params.setPasteName("George Gastaldi");
		params.setPasteEmail("gastaldi@apache.org");
		params.setPasteFormat("xml");
		params.setPasteSubdomain("gastaldi");
		params.setPasteExpireDate("10M");

		url = service.publish("<root><tag>Hello XML World !</tag></root>",
				params);
		System.out.println("URL: " + url);
	}