From 347b86dcc1d4ed63ca4197065b4bf4e60f7f00f6 Mon Sep 17 00:00:00 2001 From: rfeng Date: Tue, 29 Mar 2011 23:39:48 +0000 Subject: Allow WebApplicationException to pass back to wink so that the correct response code is returned git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1086805 13f79535-47bb-0310-9956-ffa450edef68 --- .../JAXRSOperationSelectorInterceptor.java | 74 ++++++++++++---------- 1 file changed, 39 insertions(+), 35 deletions(-) (limited to 'sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding') diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorInterceptor.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorInterceptor.java index f66ecfdbb5..c47473b3ee 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorInterceptor.java +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorInterceptor.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.StringWriter; +import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; import java.net.URLDecoder; import java.util.List; @@ -81,51 +82,54 @@ public class JAXRSOperationSelectorInterceptor implements Interceptor { } public Message invoke(Message msg) { - try { - HTTPContext bindingContext = (HTTPContext)msg.getBindingContext(); - - // By-pass the operation selector - if (bindingContext == null) { - return getNext().invoke(msg); - } - String path = URLDecoder.decode(HTTPUtils.getRequestPath(bindingContext.getHttpRequest()), "UTF-8"); + HTTPContext bindingContext = (HTTPContext)msg.getBindingContext(); - if (path.startsWith("/")) { - path = path.substring(1); - } + // By-pass the operation selector + if (bindingContext == null) { + return getNext().invoke(msg); + } - List operations = - filterOperationsByHttpMethod(interfaceContract, bindingContext.getHttpRequest().getMethod()); + String path = null; + try { + path = URLDecoder.decode(HTTPUtils.getRequestPath(bindingContext.getHttpRequest()), "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new IllegalArgumentException(e); + } - Operation operation = findOperation(path, operations); + if (path.startsWith("/")) { + path = path.substring(1); + } - final JavaOperation javaOperation = (JavaOperation)operation; - final Method method = javaOperation.getJavaMethod(); + List operations = + filterOperationsByHttpMethod(interfaceContract, bindingContext.getHttpRequest().getMethod()); - if (path != null && path.length() > 0) { - if (method.getAnnotation(Path.class) != null) { - msg.setBody(new Object[] {path}); - } - } + Operation operation = findOperation(path, operations); - // FIXME: [rfeng] We should follow JAX-RS rules to identify the entity parameter - Class[] paramTypes = method.getParameterTypes(); - if (paramTypes.length == 1) { - Class type = paramTypes[0]; - InputStream is = (InputStream)((Object[])msg.getBody())[0]; - Object target = convert(is, bindingContext.getHttpRequest().getContentType(), type); - msg.setBody(new Object[] {target}); - } else if (paramTypes.length == 0) { - msg.setBody(null); - } + final JavaOperation javaOperation = (JavaOperation)operation; + final Method method = javaOperation.getJavaMethod(); - msg.setOperation(operation); + if (path != null && path.length() > 0) { + if (method.getAnnotation(Path.class) != null) { + msg.setBody(new Object[] {path}); + } + } - return getNext().invoke(msg); - } catch (Exception e) { - throw new RuntimeException(e); + // FIXME: [rfeng] We should follow JAX-RS rules to identify the entity parameter + Class[] paramTypes = method.getParameterTypes(); + if (paramTypes.length == 1) { + Class type = paramTypes[0]; + InputStream is = (InputStream)((Object[])msg.getBody())[0]; + Object target = convert(is, bindingContext.getHttpRequest().getContentType(), type); + msg.setBody(new Object[] {target}); + } else if (paramTypes.length == 0) { + msg.setBody(null); } + + msg.setOperation(operation); + + return getNext().invoke(msg); + } private Object convert(InputStream content, String contentType, Class type) { -- cgit v1.2.3