Référentiel Liberty[8.5.5.6 ou ultérieure]

Modifications du comportement de JAX-RS 2.0

L'implémentation de JAX-RS 2.0 inclut des modifications de comportement. Par conséquent, des applications qui sont migrées depuis JAX-RS 1.1 peuvent se comporter différemment ou échouer dans JAX-RS 2.0.

Les différences entre JAX-RS 1.1 et JAX-RS 2.0 sont les suivantes :
  • Dans JAX-RS 1.1 et Jersey, si une classe EJB ou CDI crée une nouvelle instance et que celle-ci est retournée par la méthode JAX-RS application.getSingletons(), l'instance retournée est utilisée par le moteur, lequel n'essaie pas d'accéder à l'instance depuis le conteneur EJB ou CDI. Dans JAX-RS 2.0, dans ce même scénario, le moteur essaie d'accéder à l'instance depuis le conteneur EJB ou CDI. Si l'instance est accessible, l'instance extraite est utilisée. Dans le cas contraire, l'instance retournée par la méthode getSingletons() est utilisée. Exemple :
    @Override
    public SetObject getSingletons() {
        SetObject objs = new HashSetObject();
        objs.add(new CDIInjectResource());
        objs.add(new EJBInjectResource());
        return objs;
    }
  • Les packages jackson qui sont exposés en tant qu'API tierce dans JAX-RS 1.1 ne sont plus exposés dans JAX-RS 2.0. Si vous voulez utiliser des API org.codehaus.jackson dans votre application, vous devez compresser les packages jackson dans votre application.
  • Si vous indiquez javax.ws.rs.core.Application comme nom de servlet dans le fichier web.xml, la méthode getClasses de l'objet Application, qui est injectée par @Context, ne renvoie pas les classes de ressource.
    	<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>
  • D'après la spécification JAX-RS 2.0, un fournisseur est une classe qui implémente une ou plusieurs interfaces JAX-RS et qui peut être annotée avec @Provider pour la reconnaissance automatique. Dans le cas où une classe comporte l'annotation @Local qui fait référence à une interface de fournisseur, mais qu'elle n'implémente pas d'interface de fournisseur POJO, il s'agit alors d'un fournisseur non valide. Exemple :
    @Stateless
    @Local(OneLocalInterfaceMyOtherStuffMessageBodyWriter.class)
    public class OneLocalInterfaceMyOtherStuffProvide
  • Si vous utilisez les annotations @Consumes et @Produces de MessageBodyReader et MessageBodyWriter, certains types de support pris en charge peuvent être restreints. Utilisez les méthodes isReadable ou isWriteable pour vérifier le type de support. Exemple :
    @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;
        }
    ...
    }
  • Vous pouvez utiliser le traitement asynchrone dans JAX-RS 2.0 pour traiter les unités d'exécution. Pour plus d'informations, voir Traitement asynchrone.
  • Aucune des API Wink exposées en tant qu'API tierces n'est prise en charge. La liste suivante décrit (y compris et sans restriction) les API Wink qui ne sont pas prises en charge :
    • org.apache.wink.common.model.atom.AtomEntry. Dans JAX-RS 2.0, l'API répond dans l'environnement d'exécution Wink.
    • org.apache.wink.client.handlers.BasicAuthSecurityHandler. Si vous voulez utiliser l'authentification de base dans JAX-RS 2.0, consulter les fragments de code suivants :
      1. Utilisez ClientRequestFilter via l'API JAX-RS 2.0 client standard comme illustré dans l'exemple de code :
        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. Enregistrez dans ClientBuilder :
        ClientBuilder cb = ClientBuilder.newBuilder();
        cb.register(new BasicAuthFilter("user","password"));
    • org.apache.wink.client.handlers.LtpaAuthSecurityHandler. Si vous voulez utiliser le client de sécurité basé sur LTPA pour sécuriser les ressources en aval, voir Sécurisation des ressources JAX-RS en aval.
    • org.apache.wink.server.internal.providers.exception.EJBAccessExceptionMapper. Cette API n'est plus prise en charge car il s'agit d'une exception spécifiée par Wink. Vous pouvez définir votre élément ExceptionMapper pour mapper l'élément EJBAccessException.
    • com.ibm.websphere.jaxrs.server.IBMRestFilter. Cette API n'est plus prise en charge car elle est basée sur un filtre Wink.
  • Pour plus d'informations sur les propriétés client prises en charge qui peuvent être utilisées dans le client JAX-RS 2.0, voir Configuration du client JAX-RS 2.0.
  • Si vous voulez utiliser la fonction Secure Sockets Layer (SSL) dans JAX-RS 2.0, procédez comme suit :
    1. Activez la fonction ssl-1.0 ou la fonction appSecurity-2.0. Pour la fonction de jeton LTPA, la fonction appSecurity-2.0 est obligatoire.
      Remarque : La fonction ssl-1.0 est une sous-fonction de la fonction appSecurity-2.0. Si vous activez les fonctions jaxrsClient-2.0 et ssl-1.0, la fonction appSecurity-2.0 est automatiquement activée.
    2. Activez la propriété com.ibm.ws.jaxrs.client.ssl.config dans le code client de JAX-RS 2.0 comme suit :
      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
      Remarque : Cette propriété peut lier la propriété SSL Liberty aux portées de ClientBuilder, Client et WebTarget.
  • Si vous voulez utiliser Wink Client sur le serveur JAX-RS 2.0, procédez comme suit :
    1. Remarque : Si la fonction JAX-RS 2.0 n'est pas activée, vous devez aussi télécharger et ajouter l'API JAX-RS à la bibliothèque tierce. Téléchargez l'API depuis https://jax-rs-spec.java.net/nonav/.
    2. Sauvegardez tous les fichiers JAR dans le répertoire <third-party lib>.
    3. Ajoutez l'emplacement de <third-party lib> dans le fichier 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> 
Remarque : Pour plus d'informations sur le traitement asynchrone dans les API Client et Server, consultez le chapitre 8 du manuel JSR 339: JAX-RS 2.0: The Java API for RESTful Web Services (la "Spécification").

Icône indiquant le type de rubrique Rubrique de concept

Dispositions pour les centres de documentation | Commentaires


Icône d'horodatage Dernière mise à jour: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_jaxrs_behavior
Nom du fichier : cwlp_jaxrs_behavior.html