There's actually not an easy way to do this, partially because few (if
any) clients would actually support this use case.
Most clients (including CXF) would be blocked trying to write the
attachment onto the HTTP connection/socket. Thus, if you don't read the
attachments, they will not ever "unblock". Without unblocking, they would
not get the response. Instead, they would either hang forever or more
likely get some sort of socket timeout.
From your interceptor, you could grab the HTTPServletRequest object and
grab the input stream and "close" it, but even then, the client would get a
socket closed exception, not any sort of response.
Dan
On Mar 19, 2013, at 1:34 AM, Forum User <[hidden
email]<http://user/SendEmail.jtp?type=node&node=5724896&i=0>>
wrote:
Hi,
Using CXF Version 2.7.3
I have created a Provider service which acts as a proxy for all our web
service requests and some of the requests have attachments which are
huge
and I want to create an interceptor which will look at the soap headers
and
reject the message based on the header before the stream is processed
and
the attachment is stored in a temp file (Based on my endpoint settings).
Even when i do a chain.abort(), the attachment is streamed and the fault
i
throw in my interceptor is sent back as the response.
My Question is:
How do I prevent the stream to be processed?
Here is my Interceptor. For ease of reading, i removed all the
unnecessary
code. Lets assume, in all cases, the interceptor throws a fault. So,
when
my client is streaming 200 MB attachment (using MTOM), the response
should
be received in milliseconds but it takes the same amount of time if i
were
to process the message. Please advice. BTW, My interceptor is called,
'coz
i get the fault with the same exception code as below.
public class ValidateHeadersInterceptor extends AbstractPhaseInterceptor
{
public ValidateHeadersInterceptor(){
super(Phase.RECEIVE);
}
@Override
public void handleMessage(Message message) throws Fault {
Fault fault = new Fault(new Exception("Error processing request.
Invalid Header"));
fault.setFaultCode(new QName("Client"));
InterceptorChain chain = message.getInterceptorChain();
chain.abort();
throw fault;
}
}
Thanks,
Sam
--
Daniel Kulp
[hidden email] <http://user/SendEmail.jtp?type=node&node=5724896&i=1> -
http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com
------------------------------
If you reply to this email, your message will be added to the discussion
below:
http://cxf.547215.n5.nabble.com/Reject-Service-Request-based-on-headers-tp5724755p5724896.html
To unsubscribe from Reject Service Request based on headers, click
here<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5724755&code=dGVjaGFjY3QxMjNAZ21haWwuY29tfDU3MjQ3NTV8LTE4MzI4NzMyNg==>
.
NAML<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>