protected void updateClassResourceProviders(Endpoint ep) { for (ClassResourceInfo cri : serviceFactory.getClassResourceInfo()) { if (cri.getResourceProvider() == null) { ResourceProvider rp = resourceProviders.get(cri.getResourceClass()); if (rp != null) { cri.setResourceProvider(rp); } else { setDefaultResourceProvider(cri); } } if (cri.getResourceProvider() instanceof SingletonResourceProvider) { ((SingletonResourceProvider)cri.getResourceProvider()).init(ep); } } }
private ResourceProvider getResourceProvider(Exchange exchange) { Object provider = exchange.remove(JAXRSUtils.ROOT_PROVIDER); if (provider == null) { OperationResourceInfo ori = exchange.get(OperationResourceInfo.class); ClassResourceInfo cri = ori.getClassResourceInfo(); return cri.getResourceProvider(); } return (ResourceProvider)provider; }
private ResourceProvider getResourceProvider(Exchange exchange) { Object provider = exchange.remove(JAXRSUtils.ROOT_PROVIDER); if (provider == null) { OperationResourceInfo ori = exchange.get(OperationResourceInfo.class); ClassResourceInfo cri = ori.getClassResourceInfo(); return cri.getResourceProvider(); } else { return (ResourceProvider)provider; } }
public Object getServiceObject(Exchange exchange) { Object root = exchange.remove(JAXRSUtils.ROOT_INSTANCE); if (root != null) { return root; } OperationResourceInfo ori = exchange.get(OperationResourceInfo.class); ClassResourceInfo cri = ori.getClassResourceInfo(); return cri.getResourceProvider().getInstance(exchange.getInMessage()); }
public Object getServiceObject(Exchange exchange) { Object root = exchange.remove(JAXRSUtils.ROOT_INSTANCE); if (root != null) { return root; } OperationResourceInfo ori = exchange.get(OperationResourceInfo.class); ClassResourceInfo cri = ori.getClassResourceInfo(); return cri.getResourceProvider().getInstance(exchange.getInMessage()); }
public void handleMessage(Message message) { final OperationResourceInfo operationResource = message.getExchange().get(OperationResourceInfo.class); if (operationResource == null) { log.info("OperationResourceInfo is not available, skipping validation"); return; } final ClassResourceInfo classResource = operationResource.getClassResourceInfo(); if (classResource == null) { log.info("ClassResourceInfo is not available, skipping validation"); return; } final ResourceProvider resourceProvider = classResource.getResourceProvider(); if (resourceProvider == null) { log.info("ResourceProvider is not available, skipping validation"); return; } final List<Object> arguments = MessageContentsList.getContentsList(message); final Method method = operationResource.getAnnotatedMethod(); final Object instance = resourceProvider.getInstance(message); if (method != null && arguments != null) { //validate the parameters(arguments) over the invoked method validate(method, arguments.toArray(), instance); //validate the fields of each argument for (Object arg : arguments) { if (arg != null) validate(arg); } } }
protected void updateClassResourceProviders() { for (ClassResourceInfo cri : serviceFactory.getClassResourceInfo()) { if (cri.getResourceProvider() != null) { continue; } ResourceProvider rp = resourceProviders.get(cri.getResourceClass()); if (rp != null) { cri.setResourceProvider(rp); } else { //default lifecycle is per-request rp = new PerRequestResourceProvider(cri.getResourceClass()); cri.setResourceProvider(rp); } } injectContexts(); }
private void injectContexts() { Application application = appProvider == null ? null : appProvider.getProvider(); for (ClassResourceInfo cri : serviceFactory.getClassResourceInfo()) { if (cri.isSingleton()) { InjectionUtils.injectContextProxiesAndApplication(cri, cri.getResourceProvider().getInstance(null), application); } } if (application != null) { InjectionUtils.injectContextProxiesAndApplication(appProvider, application, null); } }
public static Object getResourceInstance(Message message) { final OperationResourceInfo ori = message.getExchange().get(OperationResourceInfo.class); if (ori == null) { return null; } if (!ori.getClassResourceInfo().isRoot()) { return message.getExchange().get("org.apache.cxf.service.object.last"); } final ResourceProvider resourceProvider = ori.getClassResourceInfo().getResourceProvider(); if (!resourceProvider.isSingleton()) { String error = "Service object is not a singleton, use a custom invoker to validate"; LOG.warning(error); return null; } return resourceProvider.getInstance(message); }
protected void injectContexts(ServerProviderFactory factory, ApplicationInfo fallback) { // Sometimes the application provider (ApplicationInfo) is injected through // the endpoint, not JAXRSServerFactoryBean (like for example OpenApiFeature // or Swagger2Feature do). As such, without consulting the endpoint, the injection // may not work properly. final ApplicationInfo appInfoProvider = (appProvider == null) ? fallback : appProvider; final Application application = appInfoProvider == null ? null : appInfoProvider.getProvider(); for (ClassResourceInfo cri : serviceFactory.getClassResourceInfo()) { if (cri.isSingleton()) { InjectionUtils.injectContextProxiesAndApplication(cri, cri.getResourceProvider().getInstance(null), application, factory); } } if (application != null) { InjectionUtils.injectContextProxiesAndApplication(appInfoProvider, application, null, null); } }
private void setExchangeProperties(Message message, Exchange exchange, OperationResourceInfo ori, MultivaluedMap<String, String> values, int numberOfResources) { final ClassResourceInfo cri = ori.getClassResourceInfo(); exchange.put(OperationResourceInfo.class, ori); exchange.put(JAXRSUtils.ROOT_RESOURCE_CLASS, cri); message.put(RESOURCE_METHOD, ori.getMethodToInvoke()); message.put(URITemplate.TEMPLATE_PARAMETERS, values); String plainOperationName = ori.getMethodToInvoke().getName(); if (numberOfResources > 1) { plainOperationName = cri.getServiceClass().getSimpleName() + "#" + plainOperationName; } exchange.put(RESOURCE_OPERATION_NAME, plainOperationName); if (ori.isOneway() || PropertyUtils.isTrue(HttpUtils.getProtocolHeader(message, Message.ONE_WAY_REQUEST, null))) { exchange.setOneWay(true); } ResourceProvider rp = cri.getResourceProvider(); if (rp instanceof SingletonResourceProvider) { //cri.isSingleton is not guaranteed to indicate we have a 'pure' singleton exchange.put(Message.SERVICE_OBJECT, rp.getInstance(message)); } }
@Override public void handleMessage(XMLMessage message) throws Fault { Exchange exchange = message.getExchange(); // TODO break out into a strategy (not JAXRS-specific) OperationResourceInfo operationResourceInfo = exchange.get(OperationResourceInfo.class); if (operationResourceInfo == null) { message.getInterceptorChain().doIntercept(message); return; } // TODO annotate with a better name? String methodName = operationResourceInfo.getMethodToInvoke().getName(); // TODO annotate with a better name? Object key = operationResourceInfo.getClassResourceInfo().getResourceProvider() .getInstance(); if (!(key instanceof Timeable)) { message.getInterceptorChain().doIntercept(message); return; } EventMetricCollector collector = timer.getCollector(); collector.startTiming((Timeable) key, methodName); try { message.getInterceptorChain().doIntercept(message); } finally { collector.stopTiming(); } } }