@Nullable @Override protected Function<ContainerRequest, ?> createValueProvider(Parameter parameter) { if (!parameter.isAnnotationPresent(Auth.class)) { return null; } else if (principalClassSet.contains(parameter.getRawType())) { return request -> new PrincipalContainerRequestValueFactory(request).provide(); } else { final boolean isOptionalPrincipal = parameter.getRawType() == Optional.class && ParameterizedType.class.isAssignableFrom(parameter.getType().getClass()) && principalClassSet.contains(((ParameterizedType) parameter.getType()).getActualTypeArguments()[0]); return isOptionalPrincipal ? request -> new OptionalPrincipalContainerRequestValueFactory(request).provide() : null; } }
@Nullable @Override protected Function<ContainerRequest, ?> createValueProvider(Parameter parameter) { if (!parameter.isAnnotationPresent(Auth.class)) { return null; } else if (principalClass.equals(parameter.getRawType())) { return request -> new PrincipalContainerRequestValueFactory(request).provide(); } else { final boolean isOptionalPrincipal = parameter.getRawType() == Optional.class && ParameterizedType.class.isAssignableFrom(parameter.getType().getClass()) && principalClass == ((ParameterizedType) parameter.getType()).getActualTypeArguments()[0]; return isOptionalPrincipal ? request -> new OptionalPrincipalContainerRequestValueFactory(request).provide() : null; } }
@Override public Object apply(ContainerRequest containerRequest) { final Class<?> rawType = parameter.getRawType(); Object value; if ((Request.class.isAssignableFrom(rawType) || ContainerRequestContext.class.isAssignableFrom(rawType)) && rawType.isInstance(containerRequest)) { value = containerRequest; } else { value = containerRequest.readEntity(rawType, parameter.getType(), parameter.getAnnotations()); if (rawType.isPrimitive() && value == null) { throw new BadRequestException(Response.status(Response.Status.BAD_REQUEST) .entity(LocalizationMessages.ERROR_PRIMITIVE_TYPE_NULL()).build()); } } return value; } }
@Override public Object apply(ContainerRequest containerRequest) { final Class<?> rawType = parameter.getRawType(); Object value; if ((Request.class.isAssignableFrom(rawType) || ContainerRequestContext.class.isAssignableFrom(rawType)) && rawType.isInstance(containerRequest)) { value = containerRequest; } else { value = containerRequest.readEntity(rawType, parameter.getType(), parameter.getAnnotations()); if (rawType.isPrimitive() && value == null) { throw new BadRequestException(Response.status(Response.Status.BAD_REQUEST) .entity(LocalizationMessages.ERROR_PRIMITIVE_TYPE_NULL()).build()); } } return value; } }
private List<MediaType> getEffectiveInputTypes(final ResourceMethod resourceMethod) { if (!resourceMethod.getConsumedTypes().isEmpty()) { return resourceMethod.getConsumedTypes(); } List<MediaType> result = new LinkedList<>(); if (workers != null) { for (Parameter p : resourceMethod.getInvocable().getParameters()) { if (p.getSource() == Parameter.Source.ENTITY) { result.addAll(workers.getMessageBodyReaderMediaTypes( p.getRawType(), p.getType(), p.getDeclaredAnnotations())); } } } return result.isEmpty() ? StarTypeList : result; }
private List<MediaType> getEffectiveInputTypes(final ResourceMethod resourceMethod) { if (!resourceMethod.getConsumedTypes().isEmpty()) { return resourceMethod.getConsumedTypes(); } List<MediaType> result = new LinkedList<>(); if (workers != null) { for (Parameter p : resourceMethod.getInvocable().getParameters()) { if (p.getSource() == Parameter.Source.ENTITY) { result.addAll(workers.getMessageBodyReaderMediaTypes( p.getRawType(), p.getType(), p.getDeclaredAnnotations())); } } } return result.isEmpty() ? StarTypeList : result; }
@Override public Function<ContainerRequest, ?> createValueProvider(Parameter parameter) { String parameterName = parameter.getSourceName(); if (parameterName == null || parameterName.length() == 0) { // Invalid URI parameter name return null; } final Class<?> rawParameterType = parameter.getRawType(); if (rawParameterType == PathSegment.class) { return new PathParamPathSegmentValueSupplier(parameterName, !parameter.isEncoded()); } else if (rawParameterType == List.class && parameter.getType() instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) parameter.getType(); Type[] targs = pt.getActualTypeArguments(); if (targs.length == 1 && targs[0] == PathSegment.class) { return new PathParamListPathSegmentValueSupplier(parameterName, !parameter.isEncoded()); } } MultivaluedParameterExtractor<?> e = get(parameter); if (e == null) { return null; } return new PathParamValueProvider(e, !parameter.isEncoded()); }
@Override public Function<ContainerRequest, ?> createValueProvider(Parameter parameter) { String parameterName = parameter.getSourceName(); if (parameterName == null || parameterName.length() == 0) { // Invalid URI parameter name return null; } final Class<?> rawParameterType = parameter.getRawType(); if (rawParameterType == PathSegment.class) { return new PathParamPathSegmentValueSupplier(parameterName, !parameter.isEncoded()); } else if (rawParameterType == List.class && parameter.getType() instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) parameter.getType(); Type[] targs = pt.getActualTypeArguments(); if (targs.length == 1 && targs[0] == PathSegment.class) { return new PathParamListPathSegmentValueSupplier(parameterName, !parameter.isEncoded()); } } MultivaluedParameterExtractor<?> e = get(parameter); if (e == null) { return null; } return new PathParamValueProvider(e, !parameter.isEncoded()); }
/** * @param ar abstract resource * @param am abstract method * @param p parameter * @return parameter * @see org.glassfish.jersey.server.wadl.WadlGenerator#createParam(org.glassfish.jersey.server.model.Resource, * org.glassfish.jersey.server.model.ResourceMethod, org.glassfish.jersey.server.model.Parameter) */ public Param createParam(final org.glassfish.jersey.server.model.Resource ar, final org.glassfish.jersey.server.model.ResourceMethod am, final Parameter p) { final Param param = wadlGeneratorDelegate.createParam(ar, am, p); // If the parameter is an entity we probably want to convert this to XML if (p.getSource() == Parameter.Source.ENTITY) { nameCallbacks.add(new TypeCallbackPair( new GenericType(p.getType()), new NameCallbackSetter() { public void setName(final QName name) { param.setType(name); } })); } return param; }
/** * @param ar abstract resource * @param am abstract method * @param p parameter * @return parameter * @see org.glassfish.jersey.server.wadl.WadlGenerator#createParam(org.glassfish.jersey.server.model.Resource, * org.glassfish.jersey.server.model.ResourceMethod, org.glassfish.jersey.server.model.Parameter) */ public Param createParam(final org.glassfish.jersey.server.model.Resource ar, final org.glassfish.jersey.server.model.ResourceMethod am, final Parameter p) { final Param param = wadlGeneratorDelegate.createParam(ar, am, p); // If the parameter is an entity we probably want to convert this to XML if (p.getSource() == Parameter.Source.ENTITY) { nameCallbacks.add(new TypeCallbackPair( new GenericType(p.getType()), new NameCallbackSetter() { public void setName(final QName name) { param.setType(name); } })); } return param; }
private boolean isReadable(final RequestSpecificConsumesProducesAcceptor candidate) { final Invocable invocable = candidate.methodRouting.method.getInvocable(); final Method handlingMethod = invocable.getHandlingMethod(); final Parameter entityParam = getEntityParam(invocable); if (entityParam == null) { return true; } else { final Class<?> entityType = entityParam.getRawType(); for (final ReaderModel model : workers.getReaderModelsForType(entityType)) { if (model.isReadable( entityType, entityParam.getType(), handlingMethod.getDeclaredAnnotations(), candidate.consumes.combinedType)) { return true; } } } return false; }
private boolean isReadable(final RequestSpecificConsumesProducesAcceptor candidate) { final Invocable invocable = candidate.methodRouting.method.getInvocable(); final Method handlingMethod = invocable.getHandlingMethod(); final Parameter entityParam = getEntityParam(invocable); if (entityParam == null) { return true; } else { final Class<?> entityType = entityParam.getRawType(); for (final ReaderModel model : workers.getReaderModelsForType(entityType)) { if (model.isReadable( entityType, entityParam.getType(), handlingMethod.getDeclaredAnnotations(), candidate.consumes.combinedType)) { return true; } } } return false; }
@Override public void run() { int counter = 0; final Annotation[] annotations = parameter.getAnnotations(); for (Annotation a : annotations) { if (PARAM_ANNOTATION_SET.contains(a.annotationType())) { if (injectionsForbidden) { Errors.fatal(source, LocalizationMessages.SINGLETON_INJECTS_PARAMETER(reportedSourceName, reportedParameterName)); break; } counter++; if (counter > 1) { Errors.warning(source, LocalizationMessages.AMBIGUOUS_PARAMETER(reportedSourceName, reportedParameterName)); break; } } } final Type paramType = parameter.getType(); if (!isConcreteType(paramType)) { Errors.warning(source, LocalizationMessages.PARAMETER_UNRESOLVABLE(reportedParameterName, paramType, reportedSourceName)); } } });
@Override public void run() { int counter = 0; final Annotation[] annotations = parameter.getAnnotations(); for (Annotation a : annotations) { if (PARAM_ANNOTATION_SET.contains(a.annotationType())) { if (injectionsForbidden) { Errors.fatal(source, LocalizationMessages.SINGLETON_INJECTS_PARAMETER(reportedSourceName, reportedParameterName)); break; } counter++; if (counter > 1) { Errors.warning(source, LocalizationMessages.AMBIGUOUS_PARAMETER(reportedSourceName, reportedParameterName)); break; } } } final Type paramType = parameter.getType(); if (!isConcreteType(paramType)) { Errors.warning(source, LocalizationMessages.PARAMETER_UNRESOLVABLE(reportedParameterName, paramType, reportedSourceName)); } } });
@Override public MultivaluedParameterExtractor<?> get(final Parameter p) { return process( paramConverterFactory.get(), p.getDefaultValue(), p.getRawType(), p.getType(), p.getAnnotations(), p.getSourceName()); }
@Override public MultivaluedParameterExtractor<?> get(final Parameter p) { return process( paramConverterFactory.get(), p.getDefaultValue(), p.getRawType(), p.getType(), p.getAnnotations(), p.getSourceName()); }
/** * @param ar abstract resource * @param arm abstract resource method * @param mt media type * @return respresentation type * @see org.glassfish.jersey.server.wadl.WadlGenerator#createRequestRepresentation(org.glassfish.jersey.server.model.Resource, * org.glassfish.jersey.server.model.ResourceMethod, javax.ws.rs.core.MediaType) */ public Representation createRequestRepresentation( final org.glassfish.jersey.server.model.Resource ar, final org.glassfish.jersey.server.model.ResourceMethod arm, final MediaType mt) { final Representation rt = wadlGeneratorDelegate.createRequestRepresentation(ar, arm, mt); for (final Parameter p : arm.getInvocable().getParameters()) { if (p.getSource() == Parameter.Source.ENTITY) { nameCallbacks.add(new TypeCallbackPair( new GenericType(p.getType()), new NameCallbackSetter() { @Override public void setName(final QName name) { rt.setElement(name); } })); } } return rt; }
/** * Creates a new object {@link Injectee} corresponding to the injecting point. The injectee contains basic information * about the injection point types and {@link ForeignDescriptor} of the underlying DI provider to make delegated injection * resolver as simple as possible. * * @param parameter jersey-like parameter corresponding to one resource-method's parameter. * @return injectee instance as a source of the information about the injecting point. */ private Injectee getInjectee(Parameter parameter) { InjecteeImpl injectee = new InjecteeImpl(); injectee.setRequiredType(parameter.getType()); injectee.setInjecteeClass(parameter.getRawType()); ForeignDescriptor proxyDescriptor = descriptorCache.apply(parameter); if (proxyDescriptor != null) { injectee.setInjecteeDescriptor(proxyDescriptor); } return injectee; }
/** * @param ar abstract resource * @param arm abstract resource method * @param mt media type * @return respresentation type * @see org.glassfish.jersey.server.wadl.WadlGenerator#createRequestRepresentation(org.glassfish.jersey.server.model.Resource, * org.glassfish.jersey.server.model.ResourceMethod, javax.ws.rs.core.MediaType) */ public Representation createRequestRepresentation( final org.glassfish.jersey.server.model.Resource ar, final org.glassfish.jersey.server.model.ResourceMethod arm, final MediaType mt) { final Representation rt = wadlGeneratorDelegate.createRequestRepresentation(ar, arm, mt); for (final Parameter p : arm.getInvocable().getParameters()) { if (p.getSource() == Parameter.Source.ENTITY) { nameCallbacks.add(new TypeCallbackPair( new GenericType(p.getType()), new NameCallbackSetter() { @Override public void setName(final QName name) { rt.setElement(name); } })); } } return rt; }
/** * Creates a new object {@link Injectee} corresponding to the injecting point. The injectee contains basic information * about the injection point types and {@link ForeignDescriptor} of the underlying DI provider to make delegated injection * resolver as simple as possible. * * @param parameter jersey-like parameter corresponding to one resource-method's parameter. * @return injectee instance as a source of the information about the injecting point. */ private Injectee getInjectee(Parameter parameter) { InjecteeImpl injectee = new InjecteeImpl(); injectee.setRequiredType(parameter.getType()); injectee.setInjecteeClass(parameter.getRawType()); ForeignDescriptor proxyDescriptor = descriptorCache.apply(parameter); if (proxyDescriptor != null) { injectee.setInjecteeDescriptor(proxyDescriptor); } return injectee; }