<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.caelum.com.br &#187; wsdl</title>
	<atom:link href="http://blog.caelum.com.br/tag/wsdl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caelum.com.br</link>
	<description>blog dos desenvolvedores da Caelum</description>
	<lastBuildDate>Thu, 09 Feb 2012 13:04:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SOA sem tentar vender middleware?</title>
		<link>http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/</link>
		<comments>http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 09:58:11 +0000</pubDate>
		<dc:creator>Fabio Kung</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[buzzword]]></category>
		<category><![CDATA[corba]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[pox]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[rpc]]></category>
		<category><![CDATA[serviço]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/?p=671</guid>
		<description><![CDATA[Na última sexta-feira, estive junto com o Alexandre Magno em um evento organizado pelo pessoal da Stefanini, no Rio de Janeiro. O Alexandre falou um pouco sobre a sua especialidade, Scrum. Eu dei uma palestra sobre SOA e como sempre a expectativa do pessoal era ouvir mais uma palestra cheia de buzzword, que de alguma <a href="http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/#more-671'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Na última sexta-feira, estive junto com o <a href="http://amagno.blogspot.com/">Alexandre Magno</a> em um evento organizado pelo pessoal da Stefanini, no Rio de Janeiro. O Alexandre falou um pouco sobre a sua especialidade, Scrum. Eu dei uma palestra sobre SOA e como sempre a expectativa do pessoal era ouvir mais uma palestra cheia de <a href="http://en.wikipedia.org/wiki/Buzzword">buzzword</a>, que de alguma forma tenta empurrar algum produto de integração e que tenha ESB (Enterprise Service Bus) no nome.</p>
<p>O público era bem misto, com pessoal técnico e não técnico. Bastante gente veio conversar comigo no fim da palestra e demonstraram surpresa com relação a abordagem diferente sobre SOA. Um pouco na linha do fantástico <a href="http://www.infoq.com/interviews/jim-webber-qcon-london">Guerrilla SOA</a> do Jim Webber, tentei falar sobre o assunto sem tentar vender nenhum produto gigante <em>middleware-de-integração</em>. Se você ainda não viu: <a href="http://jim.webber.name/downloads/presentations/2009-01-SOA-Forum.zip">veja <strong>agora</strong></a>, sério. A minha palestra fala um pouco sobre como <em>SOA não precisa ser buzzword</em>, <strong>SOA é integração</strong>:</p>
<p>
<div style="width:425px;text-align:left" id="__ss_1158360"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/fabiokung/soa-no-precisa-ser-buzzword?type=presentation" title="SOA não precisa ser buzzword">SOA não precisa ser buzzword</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=soa-090317105205-phpapp02&#038;rel=0&#038;stripped_title=soa-no-precisa-ser-buzzword" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=soa-090317105205-phpapp02&#038;rel=0&#038;stripped_title=soa-no-precisa-ser-buzzword" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/fabiokung">Fabio Kung</a>.</div>
</div>
<p><br/></p>
<p>Talvez a palestra não faça tanto sentido para quem não esteve presente, mas fiquem a vontade para dar uma olhada e comentar a respeito.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Os 7 hábitos dos desenvolvedores de WebServices altamente eficazes</title>
		<link>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/</link>
		<comments>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 10:38:30 +0000</pubDate>
		<dc:creator>Paulo Silveira</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[ceara]]></category>
		<category><![CDATA[cejug]]></category>
		<category><![CDATA[fj-31]]></category>
		<category><![CDATA[fj-91]]></category>
		<category><![CDATA[fortaleza]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[pox]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservices]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/2008/02/18/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/</guid>
		<description><![CDATA[Esta semana tive o prazer de palestrar no Café Com Tapioca, evento do CeJUG realizado em Fortaleza. Estavam presentes dois conhecidos evangelistas da Sun: Reggie Hutcherson e Simon Ritter. O agradecimento fica ao Rafael Carneiro, do PortalJava e do CeJUG, pela organização geral do evento. Agradeço também à equipe do grupo Fortes pela minha vinda <a href="http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/#more-186'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://farm3.static.flickr.com/2018/2261621995_814a044b52_m.jpg" width="240" />
		</p><p>Esta semana tive o prazer de palestrar no <a href="http://www.cejug.org/display/cejug/2008/02/03/Recheio+da+Tapioca+de+Coco">Café Com Tapioca</a>, evento do <a href="http://www.cejug.org/">CeJUG</a> realizado em Fortaleza. Estavam presentes dois conhecidos evangelistas da Sun: Reggie Hutcherson e <a href="http://blogs.sun.com/simonri/">Simon Ritter</a>.</p>
<p><center><br />
<a href="http://www.flickr.com/photos/silveira/2261620995/" title="DSC01766 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2045/2261620995_19718597e1_m.jpg" width="240" height="180" alt="DSC01766" /></a> <a href="http://www.flickr.com/photos/silveira/2261621995/" title="DSC01773 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2018/2261621995_814a044b52_m.jpg" width="240" height="180" alt="DSC01773" /></a><br />
<a href="http://www.flickr.com/photos/silveira/2261621465/" title="DSC01770 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2403/2261621465_02e8082782_m.jpg" width="240" height="180" alt="DSC01770" /></a> <a href="http://www.flickr.com/photos/silveira/2261620513/" title="DSC01763 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2403/2261620513_67bbd9b9b6_m.jpg" width="240" height="180" alt="DSC01763" /></a><br />
</center></p>
<p>O agradecimento fica ao <a href="http://www.rafaelcarneiro.org/blog/">Rafael Carneiro</a>, do PortalJava e do CeJUG, pela organização geral do evento. Agradeço também à equipe do grupo Fortes pela minha vinda ao Ceará: ao Clavius Tales, <a href="http://www.igocoelho.com.br/">Igo Coelho</a>, Antônio Israel, <a href="http://blog.ronaldomoreira.com/">Ronaldo Moreira</a>, <a href="http://tiagomoraes.blogspot.com/">Tiago Moraes</a>, <a href="http://thinkabouttests.blogspot.com/">Rodrigo Maia</a> e tantos outros. Vale reparar como a comunidade java cearense é ativa nos blogs! Nesse sábado também ministrei um<a href="http://www.cejug.org/pages/viewpage.action?pageId=17530896">workshop sobre Arquitetura e Design Java</a> aqui em Fortaleza.</p>
<p>Durante esses dias aqui, muitas pessoas perguntaram bastante sobre webservices: em especial JSON e Rest. Compilei alguns dos pontos que foram recorrentes nas discussões e considerados como boas práticas:</p>
<p><strong>Cuidado com a granularidade</strong> &#8211; a granularidade do seu serviço não pode ser muito fina, caso contrário seus seviços sofrerão dos mesmos problemas que o EntityBean do EJB2 exposto remotamente: uma enorme quantidade de requisições serão disparadas para executar pequenas tarefas, como getters! Seus serviços devem realizar uma quantidade significativa de tarefas, para evitar um número alto de roundtrips!</p>
<p><strong>Exponha serviços, não dados</strong> &#8211; é comum ouvir a frase &#8220;<em>Vou criar webservices para expor os meus dados</em>&#8220;. O grande perigo aqui é deixar toda a lógica de negócio na mão do cliente, o que descentralizará seu serviço e forçará o cliente a realizar muitas requisições ao servidor. Devemos expor serviços, e não dados em sua forma mais crua.</p>
<p><strong>Nunca parsear WSDL/SOAP manualmente</strong> &#8211; antes das ferramentas que trabalham com webservices terem atingido sua maturidade, era muito comum ver por aí as pessoas gerando o SOAP manualmente, através de bibliotecas XML ou às vezes até mesmo concatenando <code>String</code> com o uso de <code>StringBuffer</code>! O SOAP é o protocolo de comunicação, e assim como quando você usa RMI/CORBA e você não enxerga absolutamente nada do JRMP/IIOP, você nunca deveria ter contato direto com o protocolo de comunicação! O SOAP e o WSDL devem ser utilizados por ferramentas, e não pela sua própria aplicação. Hoje em dia qualquer ferramenta como o Apache Axis, Apache CXF, ou mesmo o <a href="http://blog.caelum.com.br/2007/07/11/webservices-sem-servidor-de-aplicacao-no-java-6/">wsimport</a>, que já vem no JDK 6, auxilia nossa tarefa de gerar Stubs que sabem trabalhar com o SOAP, sem que você nem mesmo precise ve-lo um dia. Se você está usando um servidor de aplicação, <a href="http://blog.caelum.com.br/2006/08/17/criando-um-webservice-com-a-jsr-181/">esta tarefa é ainda mais fácil</a>, até mesmo para fazer o deploy do serviço.</p>
<p><strong>Não enviar XML dentro de XML</strong> &#8211; outra prática comumente encontrada em aplicações antigas que usam Webservices: dentro do SOAP é enviado um outro XML como um dos parâmetros, então mesmo usando ferramentas para gerar os stubs você fica com uma <code>String</code> que dentro dela há um XML e este precisa ser parseado por sua própria aplicação. Isto é uma má interpretação do conceito que &#8220;<em>Webservices é comunicação via XML</em>&#8220;. Concordo que em alguns raros casos isso possa fazer sentido, como por exemplo se o valor do que você quer realmente é um outro XML, mas no geral isto é feito sem necessidade nenhuma, como é o famoso caso do <a href="http://www.correios.com.br/parcerias/cep/office2003/">WebService MS Office dos Correios do Brasil</a>.</p>
<p><strong>Considerar protocolo binário</strong> &#8211;  são muitas as reclamações de que o SOAP acaba sendo um XML grande e pesado para ser transportado. Hoje em dia há muitas formas de contornar isso, como o uso do padrão <a href="http://java.sun.com/developer/technicalArticles/xml/fastinfoset/">Fast InfoSet</a> para compressão do XML. Uma outra forma seria o uso de protocolos proprietários, como o <a href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=3&#038;url=http%3A%2F%2Fdownload.macromedia.com%2Fpub%2Flabs%2Famf%2Famf3_spec_121207.pdf&#038;ei=yz-2R4r1LKXaefWTuPAM&#038;usg=AFQjCNEpZD9SPSQD-pukeDrZduoOFTuhow&#038;sig2=ikzhe6DLaBpXOBmP4ggL6A">AMF</a> da Adobe, que é uma opção comum no uso do Flex.</p>
<p><strong>Considerar não usar WSDL/SOAP</strong> &#8211; pelas diversas críticas a burocracia exagerada do WSDL/SOAP, muitas pessoas estão optando por usar algo mais simples, como o bom e velho XML (POX), JSON ou até mesmo uma forma qualquer de estruturar dados. Caso você precise de simplicidade e velocidade no desenvolvimento com outras plataformas, essa é uma boa opção. <strong>Cuidado</strong>: muita gente está considerando qualquer webservice que não use WSDL/SOAP como sendo REST. Os <a href="http://www.flickr.com/services/api/">webservices do flickr</a> e da <a href="http://aws.amazon.com/">Amazon</a> são um bom exemplo: tudo é via GET (as vezes POST) e não há recurso identificado pela URI. Na verdade ele usa apenas um esquema HTTP+XML (POX), <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=7a2f3df2-83f7-471b-bbe6-2d8462060263/">considerado apenas em parte como RESTful</a>. Você pode ver que esses webservices são muito diferentes do modelo RESTful do <a href="http://tools.ietf.org/html/rfc5023">Atom Publishing Protocol</a>. <a href="http://www.xml.com/pub/a/2004/12/01/restful-web.html">Criar um protocolo realmente REST como este</a> não é fácil: porém teremos esse trabalho bastante simplificado com a  <a href="http://jcp.org/en/jsr/detail?id=311 ">JAX-RS (JSR 311)</a>, e já podemos ver isso através do <a href="https://jersey.dev.java.net/">Glassfish Jersey</a>.</p>
<p><strong>Considerar usar JSON</strong> &#8211; <a href="http://www.json.org/">JSON</a> é um formato que tem ganho muita popularidade. Não é a toa: além de ser um simples para debugar, parsear e gerar, com javascript basta fazer um <code>eval</code> em um resultado JSON que ele já estará pronto para usar. É uma excelente opção para o consumo via AJAX e criação de mashups. JSON tem ganho bastante força na comunidade Flex, tornando-o uma ótima opção como ponte entre Flex e Java. A escolha por JSON abre portas para muitos tipos diferentes de clientes, e em especial o browser, que é nossa plataforma global. </p>
<p><em>Update</em>: numa abordagem mais REST, a granularidade pode ser sim fina (e focada nos dados), tomando cuidado para deixar isso explícito, e sempre atento aos headers que possibilitarão o cache. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Criando um WebService com a JSR 181</title>
		<link>http://blog.caelum.com.br/criando-um-webservice-com-a-jsr-181/</link>
		<comments>http://blog.caelum.com.br/criando-um-webservice-com-a-jsr-181/#comments</comments>
		<pubDate>Thu, 17 Aug 2006 04:03:48 +0000</pubDate>
		<dc:creator>Guilherme Silveira</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[fj-31]]></category>
		<category><![CDATA[jee]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservice]]></category>
		<category><![CDATA[wsdl]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/2006/08/17/criando-um-webservice-com-a-jsr-181/</guid>
		<description><![CDATA[O Paulo colocou um capítulo de webservices no curso de EJB, com o intuito de aumentar a abrangência do curso em relação as novidades do Java EE 5 e aos poucos diminuir a pesada carga da 1.4, conforme o mercado assimila mais a nova versão. Fui ver então como ele podia inserir um tema que <a href="http://blog.caelum.com.br/criando-um-webservice-com-a-jsr-181/#more-16'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>O Paulo colocou um capítulo de webservices no <a href="http://www.caelum.com.br/curso/fj-31-java-ee-web-services/">curso de EJB</a>, com o intuito de aumentar a abrangência do curso em relação as novidades do Java EE 5 e aos poucos diminuir a pesada carga da 1.4, conforme o mercado assimila mais a nova versão.</p>
<p>Fui ver então como ele podia inserir um tema que tem tantos detalhes e conceitos em um curso que já era pesado. Ele está usando a <a href="http://jcp.org/en/jsr/detail?id=181">JSR 181</a>, que define anotações para a criação de um webservice para qualquer bean que você deseje deixar acessível. Fiquei muito impressionado com a simplicidade. Vamos direto ao código:</p>
<pre class="brush: java; title: ; notranslate">
@WebService
public class AgenteDeReservaBean {
  @WebMethod
    public boolean reserva(@WebParam(name = &quot;nome&quot;) String nome,
                                         @WebParam(name = &quot;voo&quot;) String voo) {

    // acesso ao EntityManager injetado
    // logica de negocios, ou delegacao para o BO
    return false
  }
}
</pre>
<p><code>@WebParam</code> é opcional, mas como o bytecode do java 5 não retém os nomes dos parâmetros (em outras palavras, por reflection você não obtém essa informação), o WSDL gerado iria gerar nomes automáticos para os parâmetros (<code>arg0</code>, <code>arg1</code>, etc).</p>
<p>Como ativar esse webservice? XMLs gigantes de configuração? Não! Basta um container que já faz tudo isso para você.</p>
<p>Existem algumas opções de implementações da JSR-181. O pessoal do <a href="http://www.guj.com.br/">GUJ</a> gosta do <a href="http://xfire.codehaus.org/">XFire</a>, mas como ele não é um container Java EE 5, você precisa fazer algumas configurações (tais como o web.xml e um outro xml dele próprio) para realizar o deploy.</p>
<p>O <a href="http://labs.jboss.com/portal/jbossws">JBossWS </a> é uma opção extremamente simples: anote sua classe com <code>@Stateless</code>, instale o JBoss 4.0.x com suporte a ejb3, ligue-o, gere o <code>viagens.jar</code> com essa única classe, deploy, e acesse:</p>
<p><Code>http://localhost:8080/viagens/AgenteDeReserva?wsdl</code></p>
<p>Seu webservice já está respondendo nesse memo endereço (sem o <code>?wsdl</code> no final, claro). Um monte de defaults foram usados (nome do serviço, das operações, do resultado, complex types, etc), você poderia configurar tudo isso através das anotações.</p>
<p>Você ainda pode gerar a interface do endpoint necessária através do <code>wstools</code> que acompanha o jboss. Uma maneira extramamente mais simples é já criar um endpoint, definindo essa interface como <code>@WebService</code>, e no seu bean você pode indicar que essa interface é o seu endpoint, evitando assim a geração de código java.</p>
<p>É, e você pensava que o <a href="http://ws.apache.org/axis/">Apache Axis</a> te ajudava bastante para criar um webservice... </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/criando-um-webservice-com-a-jsr-181/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>

