JAX-RS 2.0 동작 변경사항

버전 9부터 Liberty는 JAX-RS 2.0을 지원합니다. Liberty에서 JAX-RS를 사용하기 전에 JAX-RS 1.1과 JAX-RS 2.0의 차이점을 알아야 합니다.

다음 항목은 Liberty에서 JAX-RS 1.1과 JAX-RS 2.0의 차이점입니다.
  • JAX-RS 1.1 및 Jersey에서 EJB 또는 CDI 클래스가 JAX-RS application.getSingletons() 메소드가 리턴하는 새 인스턴스를 작성하는 경우 엔진은 리턴된 인스턴스를 사용하며 EJB 또는 CDI 컨테이너의 인스턴스에 대한 액세스를 시도하지 않습니다. JAX-RS 2.0에서는 같은 시나리오에서 엔진이 EJB 또는 CDI 컨테이너의 인스턴스에 액세스하려 시도합니다. 이 인스턴스에 액세스할 수 있는 경우에는 검색된 인스턴스가 사용됩니다. 그러나 인스턴스에 액세스할 수 없는 경우에는 getSingletons() 메소드에서 리턴된 인스턴스가 사용됩니다. For example:
    @Override
    public SetObject getSingletons() {
        SetObject objs = new HashSetObject();
        objs.add(new CDIInjectResource());
        objs.add(new EJBInjectResource());
        return objs;
    }
  • MultiPart 파일을 처리할 때 JAX-RS 2.0에는 다수의 API 변경사항이 포함됩니다. 예를 들어, JAX-RS 1.1에서는 @FormParam을 사용하여 MultiPart 파일을 처리할 수 있지만 JAX-RS 2.0에서는 @IMultipartBody 또는 @IAttachment만을 사용하여 MultiPart 파일을 처리할 수 있습니다. 자세한 정보는 JAX-RS 2.0의 HTML 양식 제출에서 multipart/form-data 파트를 수신하도록 자원 구성의 내용을 참조하십시오.
다음 항목은 Liberty에서 JAX-RS 2.0에 적용됩니다.
  • JAX-RS 1.1에서 써드파티 API에 해당하는 jackson 패키지는 JAX-RS 2.0에 더 이상 표시되지 않습니다. 애플리케이션에서 org.codehaus.jackson API를 사용하려는 경우에는 애플리케이션 내에 jackson 패키지를 압축해야 합니다.
  • web.xml 파일에 서블릿 이름으로 javax.ws.rs.core.Application을 지정하는 경우에는 @Context에 의해 삽입되는 애플리케이션 오브젝트의 getClasses 메소드가 자원 클래스를 리턴하지 않을 수도 있습니다.
    	<servlet>
    		<servlet-name>javax.ws.rs.core.Application</servlet-name>
    	</servlet>    	<servlet-mapping>
    		<servlet-name>javax.ws.rs.core.Application*</servlet-name>
    		<url-pattern>/*</url-pattern>
    	</servlet-mapping>
  • JAX-RS 2.0 스펙에 따르면 제공자는 하나 이상의 JAX-RS 인터페이스를 구현하며 자동 발견을 위해 @Provider로 어노테이션이 지정될 수 있는 클래스입니다. 이 시나리오에서 클래스에는 제공자 인터페이스를 참조하는 @Local 어노테이션이 있지만, 이는 POJO 제공자 인터페이스를 구현하지 않으며 이는 올바르지 않은 제공자입니다. For example:
    @Stateless
    @Local(OneLocalInterfaceMyOtherStuffMessageBodyWriter.class)
    public class OneLocalInterfaceMyOtherStuffProvide
  • MessageBodyReader 및 MessageBodyWriter @Consumes, @Produces 어노테이션을 사용하는 경우에는 일부 지원되는 매체 유형이 제한될 수 있습니다. isReadable 메소드 또는 isWriteable 메소드를 사용하여 매체 유형을 확인하십시오. For example:
    @Provider
    @Consumes("<custom/type>")
    @Produces("<custom/type>")
    @Singleton
    public class MyMessageBodyReaderAndWriter implements MessageBodyReader,MessageBodyWriter {
                    
        public boolean isReadable(Class<?> type,
                                  Type genericType,
                                  Annotation[] annotations,
                                  MediaType mediaType) {
            if (mediaType.toString().equals("<custom/type>"))
                return true;
                                            return false;
        }
    
         public boolean isWriteable(Class<?> type,
                                  Type genericType,
                                  Annotation[] annotations,
                                  MediaType mediaType) {
            if (mediaType.toString().equals("<custom/type>"))
                return true;
                                            return false;
        }
    ...
    }
  • 스레드를 처리하기 위해 JAX-RS 2.0에서 비동기 처리 기술을 사용할 수 있습니다. 자세한 정보는 비동기 처리의 내용을 참조하십시오.
  • JAX-RS 1.1에서 써드파티 API로 표시되는 어떤 Wink API도 JAX-RS 2.0에서 지원되지 않습니다. 일부 목록은 다음과 같습니다.
    • org.apache.wink.common.model.atom.AtomEntry. JAX-RS 2.0과 Atom의 통합에 대한 자세한 정보는 Atom과 JAX-RS 2.0 통합의 내용을 참조하십시오.
    • org.apache.wink.client.handlers.BasicAuthSecurityHandler. JAX-RS 2.0에서 기본 인증을 사용하려는 경우에는 다음 코드 스니펫을 참조하십시오.
      1. 다음 코드 예제에 표시되어 있는 바와 같이 JAX-RS 2.0 표준 클라이언트 API를 통해 ClientRequestFilter를 사용하십시오.
        import java.io.IOException;
        import java.io.UnsupportedEncodingException;
        import javax.ws.rs.client.ClientRequestContext;
        import javax.ws.rs.client.ClientRequestFilter;
        import javax.ws.rs.core.MultivaluedMap;
        import javax.xml.bind.DatatypeConverter;
        
        public class BasicAuthFilter implements ClientRequestFilter {
        
            private final String usr;
            private final String pwd;
        
            public BasicAuthFilter(String usr, String pwd) {
                this.usr = user;
                this.pwd = pwd;
            }
        
            public void filter(ClientRequestContext requestContext) throws IOException {
                MultivaluedMap<String, Object> headers = requestContext.getHeaders();
               
             String token = this.usr + ":" + this.pwd;
             final String basicAuthentication ="Basic " + DatatypeConverter.printBase64Binary(token.getBytes("UTF-8"));
             headers.add("Authorization", basicAuthentication);
            }
        }
      2. ClientBuilder에 등록하십시오.
        ClientBuilder cb = ClientBuilder.newBuilder();
        cb.register(new BasicAuthFilter("user","password"));
    • org.apache.wink.client.handlers.LtpaAuthSecurityHandler. LTPA 기반 보안 클라이언트를 사용하여 다운스트림 자원에 보안을 설정하려면 JAX-RS 2.0의 HTML 양식 제출에서 멀티파트/양식-데이터 파트를 수신하도록 자원 구성의 내용을 참조하십시오.
    • org.apache.wink.server.internal.providers.exception.EJBAccessExceptionMapper. 이 API는 Wink 고유의 ExceptionMapper이므로 더 이상 지원되지 않습니다. 사용자는 EJBAccessException을 맵핑하기 위해 자신의 ExceptionMapper를 정의할 수 있습니다.
    • com.ibm.websphere.jaxrs.server.IBMRestFilter. 이 API는 Wink 필터를 기반으로 하므로 더 이상 지원되지 않습니다.
    참고: 애플리케이션에 wink jar 패키지가 있는지 여부를 찾으십시오. 애플리케이션에 wink 패키지가 있으면 다음 단계를 수행해야 합니다.
    1. 애플리케이션 서브클래스가 정의되어 있는지 확인하십시오.
    2. 최소한 getClassesgetSingletons 중 하나는 널이어야 합니다.
  • JAX-RS 2.0 클라이언트에서 사용할 수 있는 지원되는 클라이언트 특성을 보려면 JAX-RS 2.0 클라이언트 구성을 참조하십시오.
  • JAX-RS 2.0에서 SSL(Secure Sockets Layer) 기능을 사용하려면 ssl-1.0 또는 appSecurity-2.0 기능을 사용으로 설정해야 합니다. LTPA 토큰 기능의 경우 appSecurity-2.0 기능이 반드시 필요합니다.
    참고: ssl-1.0 기능은 appSecurity-2.0 기능의 하위 기능입니다. jaxrsClient-2.0 기능 및 ssl-1.0 기능을 사용으로 설정하면 자동으로 appSecurity-2.0 기능이 사용으로 설정됩니다.
  • JAX-RS 2.0 서버 런타임에서 Wink 클라이언트를 사용하려면 다음 단계를 수행하십시오.
    1. JAX-RS 2.0 서버 런타임에서 Wink 클라이언트를 사용할 수 있는 다음 파일을 다운로드하십시오.
      참고: JAX-RS 2.0 기능이 사용으로 설정되지 않은 경우에는 JAX-RS API를 다운로드하여 third-party lib 디렉토리에 추가해야 합니다. https://jax-rs-spec.java.net/nonav/에서 JAX-RS API를 다운로드하십시오.
    2. 모든 JAR 파일을 <third-party lib> 디렉토리에 저장하십시오.
    3. 다음과 같이 <third-party lib>의 위치를 server.xml 파일에 추가하십시오.
      <library id="thirdPartyLib">
        <fileset dir=" <third-party lib>" includes="*.jar" scanInterval="5s"/>
      	</library><enterpriseApplication id="<Your Ear ID>" location="<Your Ear Name>" name="<Your Ear Name>">
        <classloader commonLibraryRef="thirdPartyLib"/>
      </enterpriseApplication>
참고: 클라이언트 및 서버 API에서의 비동기 처리에 대한 자세한 정보는 JSR 339: JAX-RS 2.0: Java API for RESTful Web Services("스펙")의 8장을 참조하십시오.

주제의 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwlp_jaxrs_behavior
파일 이름: cwlp_jaxrs_behavior.html