Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Use Apache Wink com o processador Jackson JSON

Integração mais simples de JAX-RS com Ajax

Nick Maynard, Scenario Analyst, IBM
Author photo
Nick Maynard trabalha para a equipe IBM Software Solutions Transformation em Hursley, Reino Unido. Ele especializou-se ou programação da Web, Linux, serviços da Web e tecnologias de integração de negócios. É possível entrar em contato com Nick pelo nick.maynard@uk.ibm.com.

Resumo:  Apache Wink está se tornando rapidamente uma das implementações da especificação JAX-RS 1.0. Os provedores incluídos com a distribuição Apache Wink padrão para serialização e desserialização JSON, como JSON.org e Jettison, têm alguns problemas com representação de array e tipos de retorno limitados. Criar código para serviços JAX-RS e seu JavaScript Assíncrono cliente e aplicativos XML (Ajax) pode ser difícil. Neste artigo, aprenda um método para configurar um aplicativo da Web existente ativado para Apache Wink ativado para usar o provedor Jackson JSON para resolver alguns dos problemas. Um exemplo, com código de amostra para um serviço da Web JAX-RS simples ativado para Jackson, ilustra as vantagens deste provedor.

Data:  17/Mai/2011
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  918 visualizações
Comentários:  


Introdução

Apache Wink está se tornando rapidamente uma das implementações da especificação JAX-RS. JSON.org e Jettison, os provedores padrão para sincronização JSON, têm alguns problemas. Por exemplo, sua representação de array e tipos de retorno limitados dificulta a codificação de serviços JAX-RS e de seus aplicativos Ajax clientes.

Este artigo detalha um método para configurar um aplicativo da Web existente ativado para Apache Wink ativado para usar o provedor Jackson JSON. Saiba sobre as vantagens deste provedor usando código de amostra para um serviço da Web JAX-RS simples ativado para Jackson.


Provedores JSON fornecidos com Apache Wink

Apache Wink fornece dois provedores JSON como parte da distribuição padrão: implementações JSON.org e Jettison. Ambos os provedores têm problemas que dificultam a integração de serviços Wink com aplicativos Ajax. Nenhum dos provedores pode serializar diretamente uma Lista Java para JSON como um tipo de retorno, devido ao requisito JAXB de um elemento XML abrangente. Ambos os provedores também têm problemas adicionais, tais como:

JSON.org
A serialização de array com o provedor JSON.org é previsível, mas o comportamento é indesejável ao interagir com Ajax. Quando encontra arrays de tamanhos diferentes, JSON.org as representa de forma diferente:
  • 2+ : Serialização de arrays "correta". Por exemplo: object : { array : ["element1", "element2"] }
  • 1 : Reduz a array. Por exemplo: object : { array : "element1" }
  • 0 : Remove a array completamente. Por exemplo: object : { }

Está claro que as concessões do código para as diferentes estruturas no Javascript levam a complexidade adicional indesejada.

Jettison
Jettison usa a convenção Badgerfish para geração de JSON, produzindo estruturas que podem ser de difícil navegação após serem convertidas em objetos Javascript.

Jackson

Em seu núcleo, Jackson é um processador JSON usado para geração e análise de declarações JSON de objetos Java. Jackson também pode ser configurado como um provedor de serialização JSON para implementações JAX-RS.

Como provedor de serialização JAX-RS, Jackson tem várias vantagens em relação a JSON.org e Jettison, como descrito abaixo.


Tabela 1. Vantagens do Jackson
VantagemDescrição
Capacidade de serializar Listas de movo nativoJackson pode retornar diretamente uma Lista de objetos de cadeia de caractere de um serviço sem um elemento XML de wrapper.
Manipulação de arrays Jackson tem recursos de serialização de arrays excelentes e previsíveis.
Agilidade Comprovadamente mais rápido que outros provedores.
LicenciamentoA Licença Apache 2.0 é bem entendida. Componentes usando essa licença são usados em produtos comerciais e de software livre.

Configurando Apache Wink para Jackson

As instruções para o exemplo neste artigo partem do pressuposto de que:

  • Você tem um projeto dinâmico da Web existente configurado para usar Apache Wink como provedor JAX-RS.
  • O servlet do Wink, org.apache.wink.server.internal.servlet.RestServlet, está configurado no arquivo web.xml para usar um aplicativo JAX-RS, como mostra a Listagem 1.

Listagem 1. Fragmento de web.xml para servlet Wink
	
<servlet>
  <servlet-name>WinkServlet</servlet-name>
  <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.ibm.developerworks.winkJackson.WinkApplication</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>WinkServlet</servlet-name>
  <url-pattern>/services/*</url-pattern>
</servlet-mapping>
			

Faça o download e instale as bibliotecas do Jackson

No Web site do Jackson, faça o download da versão mais recente do provedor Jackson (consulte Recursos para obter um link). Nesse momento, a equipe Jackson não fornece um recurso único de download para todas as bibliotecas exigidas para usar Jackson com Apache Wink. São necessárias versões ASL ou LGPL dos arquivos JAR, conforme a seguir.

  • core-(asl/lgpl): as funções essenciais do Jackson
  • mapper-(asl/lgpl): serialização POJO <-> JSON
  • jax-rs: a interface entre Wink e Jackson
  • jax-xc: compatibilidade reversa com anotações JAXB

Os arquivos JAR devem estar presentes no caminho de classe do seu projeto da Web. A maneira mais simples de fazer isso é colocá-los no seu diretório WEB-INF/lib. (É provável que seus arquivos JAR do Apache Wink já estejam nesse diretório.)

Participe do grupo do Apache Wink no My developerWorks

Discuta tópicos e compartilhe recursos com outros desenvolvedores sobre desenvolvimento de serviços da Web RESTful com Apache Wink no grupo de Apache Wink do My developerWorks.

Não é membro do My developerWorks? Cadastre-se já!

Configure Apache Wink para usar o provedor Jackson para serialização JSON

Neste momento, o provedor JSON Jackson está sendo carregado como parte do seu aplicativo da Web, mas Apache Wink não recebeu a ordem de usá-lo para serialização JSON.

Ajuste o aplicativo configurado do servlet do Wink para carregar o provedor, como mostra a Listagem 2.


Listagem 2. WinkApplication.java de amostra
				
package com.ibm.developerworks.winkJackson;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

// Jackson imports
import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
import org.codehaus.jackson.map.AnnotationIntrospector;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;

public class WinkApplication extends Application {

  /**
   * Get the list of service classes provided by this JAX-RS application
   */
  @Override
  public Set<Class<?>> getClasses() {
    Set<Class<?>> serviceClasses = new HashSet<Class<?>>();
    serviceClasses.add(HelloWorlds.class);
    return serviceClasses;
  }

  @Override
  public Set<Object> getSingletons() {
    Set<Object> s = new HashSet<Object>();

    // Register the Jackson provider for JSON

    // Make (de)serializer use a subset of JAXB and (afterwards) Jackson annotations
    // See http://wiki.fasterxml.com/JacksonJAXBAnnotations for more information
    ObjectMapper mapper = new ObjectMapper();
    AnnotationIntrospector primary = new JaxbAnnotationIntrospector();
    AnnotationIntrospector secondary = new JacksonAnnotationIntrospector();
    AnnotationIntrospector pair = new AnnotationIntrospector.Pair(primary, secondary);
    mapper.getDeserializationConfig().setAnnotationIntrospector(pair);
    mapper.getSerializationConfig().setAnnotationIntrospector(pair);

    // Set up the provider
    JacksonJaxbJsonProvider jaxbProvider = new JacksonJaxbJsonProvider();
    jaxbProvider.setMapper(mapper);

    s.add(jaxbProvider);
    return s;
  }

}


Lista Direta <?> serialização

Jackson oferece a oportunidade de retornar Listas Java facilmente a partir de suas funções, sem a necessidade de um elemento XML JAXB wrapper. A Listagem 3 mostra um exemplo.


Listagem 3. HelloWorlds.java
				
package com.ibm.developerworks.winkJackson;

import java.util.Arrays;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("helloworlds")
@Produces(MediaType.APPLICATION_JSON)
public class HelloWorlds {
  
  @GET
  public List<String> helloWorlds() {
    return Arrays.asList(new String [] {"Hello Earth!",  "Hello Mars!" });
  }
	
}  


Resumo

Apache Wink é cada vez mais usado como uma implementação da especificação JAX-RS. JSON.org e Jettison, os provedores padrão para sincronização JSON, têm alguns problemas. Neste artigo, você aprendeu um método para configurar um aplicativo da Web existente ativado para Apache Wink para usar o provedor Jackson JSON. Um exemplo destacou a vantagem desse provedor ao usar código de amostra para um serviço da Web JAX-RS ativado para Jackson.



Download

DescriçãoNomeTamanhoMétodo de download
Sample HelloWorlds Eclipse project archiveHelloWorlds.zip8KBHTTP

Informações sobre métodos de download


Recursos

Aprender

Obter produtos e tecnologias

Discutir

Sobre o autor

Author photo

Nick Maynard trabalha para a equipe IBM Software Solutions Transformation em Hursley, Reino Unido. Ele especializou-se ou programação da Web, Linux, serviços da Web e tecnologias de integração de negócios. É possível entrar em contato com Nick pelo nick.maynard@uk.ibm.com.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Tecnologia Java
ArticleID=657276
ArticleTitle=Use Apache Wink com o processador Jackson JSON
publish-date=05172011
author1-email=nick.maynard@uk.ibm.com
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).