From: Scot F. <sf...@re...> - 2014-06-03 19:56:25
|
All, I am attempting to perform XSD validation on incoming XML to REST. I'm using REST 2.3.7.Final (in EAP 6.2.2.GA). I found a few decent articles...one discussing @Decorator / @DecoratorTypes ( http://stackoverflow.com/questions/7570326/jboss-resteasy-jax-rs-jaxb-schema-validation-with-decorator/ )..also found a few references to defining a MessageBodyReaderInterceptor (additionally noting its in the 2.3.7 docs - http://docs.jboss.org/resteasy/docs/2.3.7.Final/userguide/html_single/#MessageBodyInterceptors ). I initially considered using the @Decorator option - but decided against it as I'll need to annotate a bunch of params on a bunch of methods across a bunch of classes. Truthfully, I'll want XSD validation enabled for all calls - which is why I'm leaning toward MessageBodyReaderInterceptor. As a side note, I was able to get both options working. Only caveat is with the MessageBodyReaderInterceptor - it works, but I am hesitant to consider the "working" version working "correctly." I'll explain shortly... I note the documentation states " You must call MessageBodyReaderContext.proceed() or MessageBodyWriterContext.proceed() to go to the next interceptor or, if there are no more interceptors to invoke, the readFrom() or writeTo() method of the MessageBodyReader or MessageBodyWriter." In order for me to XSD validate the XML coming over, I have 2 options - I can use a Schema creating a new Validator and having it validate using the MessageBodyReaderContext's input stream...or I can set the schema on an unmarshaller and have it unmarshal an object. The problem is, in both instances I am consuming the input stream. I could return the unmarshalled object - but then no more interceptors (if there are any) will get an opportunity to process. If I attempt to return MessageBodyReaderContext.proceed(), the stream is now closed as I consumed it via the unmarshal. I had no luck trying to reset the input stream as I get an IOException "mark/reset not supported." I'm certain I'm not seeing the proper way to do this, or am approaching this problem incorrectly. As I mentioned above the MessageBodyReaderContext version I have works if I return the unmarshalled object - but while it works, I think its improper way to deal with this scenario. Thanks ahead of time! Flossy -- Make It So Number One |