2011. 5. 24.

Jackson JSON 프로세서와 Apache Wink의 조합

JAX-RS와 Ajax를 간단히 통합한다.

apache wink 는 JAX-RX 1.0사양의 구현체이다.
wink에는 json마샬러 및 언마살러를 위해 json.org 및 jettison등의 프로바이더가 포함되어 있지만,
이들 프로바이더는 배열의 표시에 조금 문제가 있으며 또한 리턴값이 제한되어 있다.
따라서, JAX-RS 서비스 코딩 및, JAX-RS 서비스 클라이언트로서의 Ajax어플리케이션 코딩이 간단치 않다.
JSON 프로바이더로서 Jackson을 사용하면 기존 Apache Wink 대응 웹 어플리케이션 구성시,
위와 같은 문제점을 해결 할 수 있다.



원문기사 url : http://www.ibm.com/developerworks/jp/web/library/wa-aj-jackson/index.html

----------------------------------
Jackson JSON을 위한 web.xml의 구성

<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>

--------------------
WinkApplication 샘플

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;
}
}

댓글 없음: