Fala galeraaa, blz?

Vim mostrar hoje como “consumir” um web service utilizando JSF 2.0 de um jeito bem simples.

Veja como irá ficar:

Vamos lá ?

A unica lib que precisamos adicionar ao projeto, alem da do JSF2, é a dom4j, as classes que estão nesta api são responsáveis por fazer a leitura do web service.

A unica classe para fazer a leitura do web service é essa:

public class CepWebService {

	private String estado = "";
	private String cidade = "";
	private String bairro = "";
	private String tipoLogradouro = "";
	private String logradouro = "";

	private int resultado = 0;

	@SuppressWarnings("rawtypes")
	public CepWebService(String cep) {

		try {
			URL url = new URL(
					"http://cep.republicavirtual.com.br/web_cep.php?cep=" + cep
							+ "&formato=xml");

			Document document = getDocumento(url);

			Element root = document.getRootElement();

			for (Iterator i = root.elementIterator(); i.hasNext();) {
				Element element = (Element) i.next();

				if (element.getQualifiedName().equals("uf"))
					setEstado(element.getText());

				if (element.getQualifiedName().equals("cidade"))
					setCidade(element.getText());

				if (element.getQualifiedName().equals("bairro"))
					setBairro(element.getText());

				if (element.getQualifiedName().equals("tipo_logradouro"))
					setTipoLogradouro(element.getText());

				if (element.getQualifiedName().equals("logradouro"))
					setLogradouro(element.getText());

				if (element.getQualifiedName().equals("resultado"))
					setResultado(Integer.parseInt(element.getText()));
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public Document getDocumento(URL url) throws DocumentException {
		SAXReader reader = new SAXReader();
		Document document = reader.read(url);

		return document;
	}

	// getters and setters

Caso queiram testar, crie uma classe de teste, instanciem essa classe e passem o cep.
Irão ver que já funciona, porém o intuito aqui é mostrar em um “sistema” web.

Vamos criar nosso controller, veja:

@ManagedBean(name = "mbService")
@RequestScoped
public class ServiceBean implements Serializable {
	private static final long serialVersionUID = 1L;

	private String cep = null;

	private String tipoLogradouro;
	private String logradouro;
	private String estado;
	private String cidade;
	private String bairro;

	public void encontraCEP() {
		CepWebService cepWebService = new CepWebService(getCep());

		if (cepWebService.getResultado() == 1) {
			setTipoLogradouro(cepWebService.getTipoLogradouro());
			setLogradouro(cepWebService.getLogradouro());
			setEstado(cepWebService.getEstado());
			setCidade(cepWebService.getCidade());
			setBairro(cepWebService.getBairro());
		} else {

			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Servidor não está respondendo",
							"Servidor não está respondendo"));
		}
	}

	// getters and setters

E por fim nossa view:

<p:dialog appendToBody="true" closable="false" draggable="false"
		footer="/programandojava.wordpress.com - Visite :)"
		header="Web Service CEP" maximizable="true" minimizable="true"
		position="center" resizable="false" showEffect="slide" visible="true">

		<h:form id="frmBusca">
			<h:panelGrid id="pnCEP" columns="3">
				<h:outputText value="CEP: " />
				<p:inputMask mask="99999-999" value="#{mbService.cep}" />

				<p:commandButton value="Pesquisar" icon="ui-icon-search"
					action="#{mbService.encontraCEP}" update=":frmResultado" />
			</h:panelGrid>
		</h:form>

		<h:form id="frmResultado">
			<h:panelGrid id="pnResultado" columns="2">
				<h:outputLabel value="UF: "
					style="font-weight:bold; padding-right: 5px; float: right;" />
				<p:inputText size="5" value="#{mbService.estado}" />

				<h:outputLabel value="Logradouro: "
					style="font-weight:bold; padding-right: 5px; float: right;" />
				<p:inputText size="50"
					value="#{mbService.tipoLogradouro} #{mbService.logradouro}" />

				<h:outputLabel value="Cidade: "
					style="font-weight:bold; padding-right: 5px; float: right;" />
				<p:inputText size="50" value="#{mbService.cidade}" />

				<h:outputLabel value="Bairro: "
					style="font-weight:bold; padding-right: 5px; float: right;" />
				<p:inputText size="25" value="#{mbService.bairro}" />
			</h:panelGrid>
		</h:form>
	</p:dialog>

E é isso galera, vejo muita gente buscando isso na internet. Espero que tenha ajudado aí a galera e até o próximo post.

Download do projeto: web-service.war

Anúncios