public static void convertResult(MethodResult result) { Object convertArgument = convertArgument(result.getClassName(), result.getArg()); result.setArg(convertArgument); }
private MethodResult invokeMethod(Object service, Method method, Object[] args) { MethodResult returnTemplate = new MethodResult(); try { Object result = method.invoke(service, args); if (method.getReturnType().getName().equals("void")) { returnTemplate.setType(ReturnType.Void); } else { returnTemplate.setType(ReturnType.Object); returnTemplate.setArg(result); returnTemplate.setClassName(result.getClass().getName()); } } catch (InvocationTargetException e) { returnTemplate.setType(ReturnType.Exception); returnTemplate.setArg(e.getCause()); returnTemplate.setClassName(e.getClass().getName()); } catch (IllegalAccessException e) { returnTemplate.setType(ReturnType.Exception); returnTemplate.setArg(e); returnTemplate.setClassName(e.getClass().getName()); } return returnTemplate; }
@Override public MethodResultMessage doFilter(MethodCallRequest input, Map<String, Object> metadata) throws FilterException { ObjectMapper objectMapper = JsonUtils.createObjectMapperWithIntroSpectors(); MethodResultMessage resultMessage; try { String jsonString = objectMapper.writeValueAsString(input); String resultString = (String) next.filter(jsonString, metadata); if (resultString == null) { return null; } resultMessage = objectMapper.readValue(resultString, MethodResultMessage.class); } catch (IOException e) { throw new FilterException(e); } MethodResult result = resultMessage.getResult(); if (result.getType().equals(ReturnType.Void)) { result.setArg(null); } else { Class<?> className; try { className = Class.forName(result.getClassName()); } catch (ClassNotFoundException e) { throw new FilterException(e); } Object convertedValue = objectMapper.convertValue(result.getArg(), className); result.setArg(convertedValue); } return resultMessage; }
if (message.getResult().getArg() != null && OpenEngSBModel.class.isAssignableFrom(message.getResult().getArg().getClass())) { LOGGER.debug("try to generate wrapper from model"); OpenEngSBModel model = (OpenEngSBModel) message.getResult().getArg(); OpenEngSBModelWrapper wrapper = ModelUtils.generateWrapperOutOfModel(model); message.getResult().setArg(wrapper); message.getResult().setClassName(OpenEngSBModelWrapper.class.getName()); LOGGER.debug("successfully generated wrapper"); } else if (message.getResult().getArg() != null && List.class.isAssignableFrom(message.getResult().getArg().getClass())) { List<?> list = (List<?>) message.getResult().getArg(); List<Object> arg = new ArrayList<Object>(); if (list.size() > 0 && OpenEngSBModel.class.isAssignableFrom(list.get(0).getClass())) { arg.add(wrapper); message.getResult().setArg(arg);
@Override public SecureResponse doFilter(SecureRequest input, Map<String, Object> metadata) throws FilterException { ObjectMapper objectMapper = createObjectMapper(); SecureResponse resultMessage; try { String jsonString = objectMapper.writeValueAsString(input); String resultString = (String) next.filter(jsonString, metadata); if (resultString == null) { return null; } resultMessage = objectMapper.readValue(resultString, SecureResponse.class); } catch (IOException e) { throw new FilterException(e); } MethodResult result = resultMessage.getMessage().getResult(); if (result.getType().equals(ReturnType.Void)) { result.setArg(null); } else { JsonUtils.convertResult(result); } return resultMessage; }
@Override public Object doInvoke(Object proxy, Method method, Object[] args) throws Throwable { List<Class<?>> paramList = Arrays.asList(method.getParameterTypes()); List<String> paramTypeNames = new ArrayList<String>(); for (Class<?> paramType : paramList) { paramTypeNames.add(paramType.getName()); } MethodCall methodCall = new MethodCall(method.getName(), args, metadata, paramTypeNames); MethodResult callResult = portUtil.sendMethodCallWithResult(portId, destination, methodCall); switch (callResult.getType()) { case Object: return callResult.getArg(); case Void: return null; case Exception: throw new RuntimeException(callResult.getArg().toString()); default: throw new IllegalStateException("Return Type has to be either Void, Object or Exception"); } }
public static MethodResult newVoidResult() { return new MethodResult(null, ReturnType.Void, void.class.getName()); } }
private Document serializeResult(MethodResultMessage result) { DOMResult domResult = new DOMResult(); try { JAXBContext jaxbContext = JAXBContext.newInstance(MethodResultMessage.class, Class.forName(result.getResult().getClassName())); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.marshal(new JAXBElement<MethodResultMessage>( new QName(MethodResultMessage.class.getSimpleName()), MethodResultMessage.class, result), domResult); } catch (JAXBException e) { throw new FilterException(e); } catch (ClassNotFoundException e) { throw new FilterException(e); } return (Document) domResult.getNode(); }
@Override public MethodResult handleCall(MethodCall call) { Map<String, String> metaData = call.getMetaData(); String contextId = metaData.get("contextId"); if (contextId != null) { ContextHolder.get().setCurrentContextId(contextId); } Object service = retrieveOpenEngSBService(call); Method method = findMethod(service, call.getMethodName(), getArgTypes(call)); Object[] args = retrieveArguments(call, method); MethodResult methodResult = invokeMethod(service, method, args); methodResult.setMetaData(call.getMetaData()); return methodResult; }
if (message.getResult().getArg() != null && message.getResult().getArg().getClass().equals(OpenEngSBModelWrapper.class)) { LOGGER.debug("try to generate model out of wrapper"); OpenEngSBModelWrapper wrapper = (OpenEngSBModelWrapper) message.getResult().getArg(); Object modelObject = ModelUtils.generateModelOutOfWrapper(wrapper); LOGGER.debug("successfully generated model"); message.getResult().setArg(modelObject); message.getResult().setClassName(wrapper.getModelClass()); } else if (message.getResult().getArg() != null && List.class.isAssignableFrom(message.getResult().getArg().getClass())) { List<?> list = (List<?>) message.getResult().getArg(); List<Object> arg = new ArrayList<Object>(); if (list.size() > 0 && OpenEngSBModel.class.isAssignableFrom(list.get(0).getClass())) { arg.add(model); message.getResult().setArg(arg);
public static MethodResult newVoidResult() { return new MethodResult(null, ReturnType.Void, void.class.getName()); } }
public static void convertResult(MethodResult result) { Object convertArgument = convertArgument(result.getClassName(), result.getArg()); result.setArg(convertArgument); }
private MethodResultMessage parseMethodResult(Document input) throws JAXBException { MethodResultMessage request = unmarshaller.unmarshal(input, MethodResultMessage.class).getValue(); MethodResult result = request.getResult(); Class<?> resultClass; try { resultClass = Class.forName(result.getClassName()); } catch (ClassNotFoundException e) { throw new FilterException(e); } JAXBContext jaxbContext = JAXBContext.newInstance(MethodResult.class, resultClass); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Object parsedArg = unmarshaller.unmarshal((Node) result.getArg(), resultClass).getValue(); result.setArg(parsedArg); return request; }