@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"); } }
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; }
public static void convertResult(MethodResult result) { Object convertArgument = convertArgument(result.getClassName(), result.getArg()); result.setArg(convertArgument); }
public static void convertResult(MethodResult result) { Object convertArgument = convertArgument(result.getClassName(), result.getArg()); result.setArg(convertArgument); }
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())) {
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().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())) {
@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; }