Liberty Repository[8.5.5.6 이상]

JAX-RS 2.0 동작 변경사항

JAX-RS 2.0 구현에는 JAX-RS 1.1로부터 마이그레이션된 애플리케이션이 JAX-RS 2.0에서 다르게 동작하거나 실패하도록 하는 몇 가지 동작 변경사항이 포함되어 있습니다.

다음 목록에는 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() 메소드로부터 리턴된 인스턴스가 사용됩니다. 예:
    @Override
    public SetObject getSingletons() {
        SetObject objs = new HashSetObject();
        objs.add(new CDIInjectResource());
        objs.add(new EJBInjectResource());
        return objs;
    }
  • JAX-RS 1.1에서 써드파티 패키지로 노출되었던 jackson 패키지가 JAX-RS 2.0에서는 더 이상 노출되지 않습니다. 애플리케이션에서 org.codehaus.jackson API를 사용하려는 경우에는 애플리케이션 내에 jackson 패키지를 압축해야 합니다.
  • web.xml 파일에 javax.ws.rs.core.Application을 서블릿 이름으로 지정하면 @Context에 의해 삽입되는 Application 오브젝트의 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로 어노테이션이 지정될 수 있는 클래스입니다. POJO 제공자 인터페이스를 구현하지 않으나 제공자 인터페이스를 참조하는 @Local 어노테이션이 있는 클래스가 있는 시나리오에서 이 클래스는 올바르지 않은 제공자입니다. 예:
    @Stateless
    @Local(OneLocalInterfaceMyOtherStuffMessageBodyWriter.class)
    public class OneLocalInterfaceMyOtherStuffProvide
  • MessageBodyReader 및 MessageBodyWriter @Consumes, @Produces 어노테이션을 사용하는 경우에는 일부 지원되는 매체 유형이 제한될 수 있습니다. 매체 유형을 확인하려면 isReadable 또는 isWriteable 메소드를 사용하십시오. 예:
    @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에서는 스레드를 처리하는 데 비동기 처리를 사용할 수 있습니다. 자세한 정보는 비동기 처리의 내용을 참조하십시오.
  • 써드파티 API로 노출되는 Wink API는 지원되지 않습니다. 다음 목록은 지원되지 않는 Wink API를 설명합니다(다른 API에도 적용될 수 있음).
    • org.apache.wink.common.model.atom.AtomEntry. JAX-RS 2.0에서 이 API는 Wink 런타임에 적용됩니다.
    • 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 자원 보안의 내용을 참조하십시오.
    • org.apache.wink.server.internal.providers.exception.EJBAccessExceptionMapper. 이 API는 Wink 고유의 ExceptionMapper이므로 더 이상 지원되지 않습니다. 사용자는 EJBAccessException을 맵핑하기 위해 자신의 ExceptionMapper를 정의할 수 있습니다.
    • com.ibm.websphere.jaxrs.server.IBMRestFilter. 이 API는 Wink 필터를 기반으로 하므로 더 이상 지원되지 않습니다.
  • JAX-RS 2.0 클라이언트에서 사용할 수 있는 지원되는 클라이언트 특성에 대한 자세한 정보는 JAX-RS 2.0 클라이언트 구성을 참조하십시오.
  • JAX-RS 2.0에서 SSL(Secure Sockets Layer) 기능을 사용하려면 다음 단계를 수행하십시오.
    1. ssl-1.0 또는 appSecurity-2.0 기능을 사용으로 설정하십시오. LTPA 토큰 기능의 경우에는 appSecurity-2.0 기능이 필요합니다.
      참고: ssl-1.0 기능은 appSecurity-2.0 기능의 하위 기능입니다. jaxrsClient-2.0ssl-1.0 기능을 사용으로 설정하면 appSecurity-2.0 기능이 자동으로 사용으로 설정됩니다.
    2. JAX-RS 2.0 클라이언트 코드에서 com.ibm.ws.jaxrs.client.ssl.config 특성을 다음과 같이 사용으로 설정하십시오.
      ClientBuilder cb = ClientBuilder.newBuilder();
      Client c = cb.build();
      c.property("com.ibm.ws.jaxrs.client.ssl.config", "mySSLConfig"); //mySSLConfig is the ssl ref id in Liberty server.xml
      참고: 이 특성은 Liberty SSL 구성을 ClientBuilder, Client 및 WebTarget의 범위에 바인드할 수 있습니다.
  • JAX-RS 2.0 서버 런타임에서 Wink 클라이언트를 사용하려면 다음 단계를 수행하십시오.
    1. 참고: JAX-RS 2.0 기능이 사용으로 설정되지 않은 경우에는 JAX-RS API를 다운로드하여 third-party lib 디렉토리에 추가해야 합니다. https://jax-rs-spec.java.net/nonav/에서 이 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장을 참조하십시오.

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

Information Center 이용 약관 | 피드백


시간소인 아이콘 마지막 업데이트 날짜: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_jaxrs_behavior
파일 이름: cwlp_jaxrs_behavior.html