private static boolean checkMethodDispatcher(ClassResourceInfo cr) { if (cr.getMethodDispatcher().getOperationResourceInfos().isEmpty()) { LOG.warning(new org.apache.cxf.common.i18n.Message("NO_RESOURCE_OP_EXC", BUNDLE, cr.getServiceClass().getName()).toString()); return false; } return true; }
public int compare(ClassResourceInfo cr1, ClassResourceInfo cr2) { if (rc != null) { int result = rc.compare(cr1, cr2, message); if (result != 0) { return result; } } return URITemplate.compareTemplates( cr1.getURITemplate(), cr2.getURITemplate()); } }
public void addSubClassResourceInfo(ClassResourceInfo cri) { subResources.putIfAbsent(new SubresourceKey(cri.getResourceClass(), cri.getServiceClass()), cri); }
private ClassResourceInfo getCreatedFromModel(Class<?> realClass) { for (ClassResourceInfo cri : classResourceInfos) { if (cri.isCreatedFromModel() && cri.isRoot() && cri.getServiceClass().isAssignableFrom(realClass)) { return cri; } } return null; }
protected boolean isValidClassResourceInfo(ClassResourceInfo cri) { Class<?> serviceCls = cri.getServiceClass(); return !(cri.isCreatedFromModel() && serviceCls == cri.getResourceClass() && !InjectionUtils.isConcreteClass(serviceCls)); }
private static ClassResourceInfo getAncestorWithSameServiceClass(ClassResourceInfo parent, Class<?> subClass) { if (parent == null) { return null; } if (parent.getServiceClass() == subClass) { return parent; } return getAncestorWithSameServiceClass(parent.getParent(), subClass); }
Map<Parameter, Object> classParams = getClassParameters(cri); List<OperationResourceInfo> sortedOps = sortOperationsByPath(cri.getMethodDispatcher() .getOperationResourceInfos()); ClassResourceInfo subcri = cri.findResource(cls, cls); if (subcri != null && !visitedResources.contains(subcri)) { startResourceTag(sb, subcri.getServiceClass(), ori.getURITemplate().getValue()); handleDocs(subcri.getServiceClass().getAnnotations(), sb, DocTarget.RESOURCE, true, isJson); handlePathAndMatrixParams(sb, ori, isJson);
if (info.getResourceClass() == null) { // possible? continue; final String address = Logs.singleSlash(base, info.getURITemplate().getValue()); final String clazz = uproxyName(info.getResourceClass().getName()); classSize = Math.max(classSize, clazz.length()); addressSize = Math.max(addressSize, address.length()); final MethodDispatcher md = info.getMethodDispatcher(); for (final OperationResourceInfo ori : md.getOperationResourceInfos()) { final String httpMethod = ori.getHttpMethod();
if (getServiceClass() != null) { for (ClassResourceInfo info : serviceFactory.getClassResourceInfo()) { if (info.getServiceClass().isAssignableFrom(getServiceClass()) || getServiceClass().isAssignableFrom(info.getServiceClass())) { cri = info; break; boolean isRoot = cri.getURITemplate() != null; ClientState actualState = getActualState(); ClientProxyImpl proxyImpl = createClientProxy(cri, isRoot, actualState, varValues); initClient(proxyImpl, ep, actualState == null); final Class<?> serviceClassFinal = cri.getServiceClass(); ClassLoader theLoader = AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> proxyLoader == null ? serviceClassFinal.getClassLoader() : proxyLoader); Class<?>[] ifaces = new Class<?>[]{Client.class, InvocationHandlerAware.class, cri.getServiceClass()}; Client actualClient = (Client)ProxyHelper.getProxy(theLoader, ifaces, proxyImpl); proxyImpl.setProxyClient(actualClient); String message = ex.getLocalizedMessage(); if (cri != null) { String expected = cri.getServiceClass().getSimpleName(); if ((expected + " is not an interface").equals(message)) { message += "; make sure CGLIB is on the classpath";
public void setResourceClasses(List<Class<?>> classes) { for (Class<?> resourceClass : classes) { ClassResourceInfo cri = getCreatedFromModel(resourceClass); if (cri != null) { if (!InjectionUtils.isConcreteClass(cri.getServiceClass())) { cri = new ClassResourceInfo(cri); cri.setResourceClass(resourceClass); classResourceInfos.add(cri); } continue; } createResourceInfo(resourceClass, true); } }
OperationResourceInfo ori = cri.getMethodDispatcher().getOperationResourceInfo(m); if (ori == null) { reportInvalidResourceMethod(m, "INVALID_RESOURCE_METHOD"); addNonEmptyPath(builder, ori.getClassResourceInfo().getURITemplate().getValue()); ClassResourceInfo subCri = cri.getSubResource(m.getReturnType(), m.getReturnType()); if (subCri == null) { reportInvalidResourceMethod(m, "INVALID_SUBRESOURCE");
private void doApplyDynamicFeatures(ClassResourceInfo cri) { Set<OperationResourceInfo> oris = cri.getMethodDispatcher().getOperationResourceInfos(); for (OperationResourceInfo ori : oris) { String nameBinding = DEFAULT_FILTER_NAME_BINDING + ori.getClassResourceInfo().getServiceClass().getName() + "." + ori.getMethodToInvoke().toString(); Collection<ClassResourceInfo> subs = cri.getSubResources(); for (ClassResourceInfo sub : subs) { if (sub != cri) {
for (final Class<?> beanClass : resourceClasses) { Optional<ClassResourceInfo> cri = classResourceInfos.stream().filter(c -> c.isCreatedFromModel() && c.isRoot() && c.getServiceClass().isAssignableFrom(beanClass)). findFirst(); if (cri.isPresent()) { if (!InjectionUtils.isConcreteClass(cri.get().getServiceClass())) { cri = Optional.of(new ClassResourceInfo(cri.get())); classResourceInfos.add(cri.get()); cri.get().setResourceClass(beanClass); } else { cri = Optional.ofNullable(ResourceUtils.createClassResourceInfo(
public void setResourceClassesFromBeans(List<Object> beans) { for (Object bean : beans) { Class<?> realClass = ClassHelper.getRealClass(bean); ClassResourceInfo cri = getCreatedFromModel(realClass); if (cri != null) { if (!InjectionUtils.isConcreteClass(cri.getServiceClass())) { cri = new ClassResourceInfo(cri); classResourceInfos.add(cri); } cri.setResourceClass(bean.getClass()); cri.setResourceProvider(new SingletonResourceProvider(bean)); continue; } cri = ResourceUtils.createClassResourceInfo(bean.getClass(), realClass, true, enableStatic, getBus()); if (cri != null) { classResourceInfos.add(cri); cri.setResourceProvider( new SingletonResourceProvider(bean)); } } }
new ClassResourceInfo(sClass, sClass, isRoot, enableStatic, true, model.getConsumes(), model.getProduces(), bus); URITemplate t = URITemplate.createTemplate(model.getPath()); cri.setURITemplate(t); for (Method m : cri.getServiceClass().getMethods()) { if (m.getAnnotation(DefaultMethod.class) != null) { actualMethod.getReturnType(), false, enableStatic, bus); if (subCri != null) { cri.addSubClassResourceInfo(subCri); md.bind(ori, actualMethod); cri.setMethodDispatcher(md); return checkMethodDispatcher(cri) ? cri : null;
protected boolean isValidClassResourceInfo(ClassResourceInfo cri) { // CXF will consider interfaces created for managing model resources // invalid - however it is fine with Camel processors if no service invocation // is requested. return !performInvocation || !cri.getServiceClass().isInterface(); } };
private static void evaluateResourceClass(ClassResourceInfo cri, boolean enableStatic) { MethodDispatcher md = new MethodDispatcher(); Class<?> serviceClass = cri.getServiceClass(); for (Method m : serviceClass.getMethods()) { ClassResourceInfo subCri = cri.findResource(subClass, subClass); if (subCri == null) { ClassResourceInfo ancestor = getAncestorWithSameServiceClass(cri, subClass); subCri = ancestor != null ? ancestor : createClassResourceInfo(subClass, subClass, cri, false, enableStatic, cri.getBus()); cri.addSubClassResourceInfo(subCri); cri.setMethodDispatcher(md);
public ClassResourceInfo(ClassResourceInfo cri) { super(cri.getBus()); if (cri.isCreatedFromModel() && !InjectionUtils.isConcreteClass(cri.getServiceClass())) { this.root = cri.root; this.serviceClass = cri.serviceClass; this.uriTemplate = cri.uriTemplate; this.methodDispatcher = new MethodDispatcher(cri.methodDispatcher, this); this.subResources = cri.subResources; //CHECKSTYLE:OFF this.paramFields = cri.paramFields; this.paramMethods = cri.paramMethods; //CHECKSTYLE:ON this.enableStatic = true; this.nameBindings = cri.nameBindings; this.parent = cri.parent; } else { throw new IllegalArgumentException(); } }
final boolean contextsAvailable = cri.contextsAvailable(); final boolean paramsAvailable = cri.paramsAvailable(); if (contextsAvailable || paramsAvailable) { Object realResourceObject = ClassHelper.getRealObject(resourceObject); if (cri.isRoot()) { ProviderInfo<?> appProvider = (ProviderInfo<?>)exchange.getEndpoint().get(Application.class.getName()); Method resourceMethod = cri.getMethodDispatcher().getMethod(ori); methodToInvoke = cri.getMethodDispatcher().getProxyMethod(resourceMethod); if (methodToInvoke == null) { methodToInvoke = InjectionUtils.checkProxy(resourceMethod, resourceObject); cri.getMethodDispatcher().addProxyMethod(resourceMethod, methodToInvoke); subCri = cri.getSubResource(methodToInvoke.getReturnType(), ClassHelper.getRealClass(result), result); if (subCri == null) {
final List<OperationResourceInfo> sortedOps = sortOperationsByPath(cri.getMethodDispatcher().getOperationResourceInfos()); final ClassResourceInfo subcri = cri.findResource(cls, cls); wadlSubResource = new Resource().withPath(ori.getURITemplate().getValue()); } else if (!visitedResources.contains(subcri)) { LOGGER.info(WadlxCodes.GENERATOR_SUB_RESOURCE, " Processing subresource > " + subcri.getResourceClass().getName()); wadlSubResource = doHandleResource(subcri, ori.getURITemplate().getValue(), visitedResources); } else { LOGGER.info(WadlxCodes.GENERATOR_RECURSIVE_SUB_RESOURCE, " Processing Recursive subresource > " + subcri.getResourceClass().getName()); wadlSubResource = handler.handleResource(subcri, ori.getURITemplate().getValue()); if (wadlSubResource == null) {