2017-03-16 2 views
0

Je développe une API REST qui est un @POST et @Consumes deux MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON. J'ai besoin de mettre en œuvre des validations pour la demande entrante. Je ne veux pas avoir la validation du niveau Bean JSR-303. J'ai besoin d'une classe de validation qui gère toutes les validations et j'ai besoin de configurer l'intercepteur pour la requête XML entrante avant Unmarshalling. J'ai regardé dans les intercepteurs Apache cxf et c'est principalement si vous activez les Validations de Bean. Comment dois-je faire?Interceptor pour valider la demande XML API REST

+0

Il est 'BeanValidationFeature' qui doit être activé. Si vous utilisez une configuration basée sur XML, vous devez injecter cette fonctionnalité comme ceci: http://cxf.apache.org/docs/features.html –

Répondre

0

J'ai trouvé le moyen de le faire sans l'utilisation de BeanValidationFeature.

public class YourFilter implements ContainerRequestFilter{ 

    @Override 
     public void filter(ContainerRequestContext request){ 
     ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
     final InputStream inputStream = request.getEntityStream(); 
     final StringBuilder builder = new StringBuilder(); 
     try 
     { 
      IOUtils.copy(inputStream, outStream); 
      byte[] requestEntity = outStream.toByteArray(); 
      if (requestEntity.length == 0) { 
       builder.append(""); 
      } else { 
       builder.append(new String(requestEntity,"UTF-8")); 
       request.setEntityStream(new ByteArrayInputStream(requestEntity)); 
       setRequest(builder.toString()); 
       validateYourRequest(builder.toString()); 
      } 
     }catch (Exception ex) { 
      logger.log(Level.TRACE,"Error occured while converting the request into Stream",ex.getCause()); 
     } 
    } 
} 

Et application.context.xml

<bean id="YourFilter" class="com.test.YourFilter"/> 

<jaxrs:server id="restContainer" address="/"> 

    <jaxrs:serviceBeans> 
     <bean class="com.test.YourController" /> 
    </jaxrs:serviceBeans> 

    <jaxrs:extensionMappings> 
     <entry key="json" value="application/json" /> 
     <entry key="xml" value="application/xml" /> 
    </jaxrs:extensionMappings> 

    <jaxrs:providers> 
     <ref bean="jsonProvider" /> 
     <ref bean="jaxbXmlProvider" /> 
     <ref bean="YourFilter"/> 
    </jaxrs:providers> 
</jaxrs:server>