protected Object handleResponse(Message outMessage, Class<?> serviceCls) throws Throwable { try { Response r = setResponseBuilder(outMessage, outMessage.getExchange()).build(); ((ResponseImpl) r).setOutMessage(outMessage); getState().setResponse(r); Method method = outMessage.getExchange().get(Method.class); checkResponse(method, r, outMessage); if (method.getReturnType() == Void.class || method.getReturnType() == Void.TYPE) { return null; } if (method.getReturnType() == Response.class && (r.getEntity() == null || InputStream.class.isAssignableFrom(r.getEntity().getClass()) && ((InputStream) r.getEntity()).available() == 0)) { return r; } if (PropertyUtils.isTrue( super.getConfiguration().getResponseContext().get(BUFFER_PROXY_RESPONSE))) { r.bufferEntity(); } Class<?> returnType = method.getReturnType(); Type genericType = InjectionUtils.processGenericTypeIfNeeded( serviceCls, returnType, method.getGenericReturnType()); returnType = InjectionUtils.updateParamClassToTypeIfNeeded(returnType, genericType); return readBody(r, outMessage, returnType, genericType, method.getDeclaredAnnotations()); } finally { ClientProviderFactory.getInstance(outMessage).clearThreadLocalProxies(); } }
protected void doWriteBody( Message outMessage, Object body, Type bodyType, Annotation[] customAnns, OutputStream os) throws Fault { OperationResourceInfo ori = outMessage.getContent(OperationResourceInfo.class); if (ori == null) { return; } Method method = ori.getMethodToInvoke(); int bodyIndex = (Integer) outMessage.get("BODY_INDEX"); Annotation[] anns = customAnns != null ? customAnns : getMethodAnnotations(ori.getAnnotatedMethod(), bodyIndex); try { if (bodyIndex != -1) { Class<?> paramClass = method.getParameterTypes()[bodyIndex]; Class<?> bodyClass = paramClass.isAssignableFrom(body.getClass()) ? paramClass : body.getClass(); Type genericType = method.getGenericParameterTypes()[bodyIndex]; if (bodyType != null) { genericType = bodyType; } genericType = InjectionUtils.processGenericTypeIfNeeded( ori.getClassResourceInfo().getServiceClass(), bodyClass, genericType); bodyClass = InjectionUtils.updateParamClassToTypeIfNeeded(bodyClass, genericType); writeBody(body, outMessage, bodyClass, genericType, anns, os); } else { Type paramType = body.getClass(); if (bodyType != null) { paramType = bodyType; } writeBody(body, outMessage, body.getClass(), paramType, anns, os); } } catch (Exception ex) { throw new Fault(ex); } }