mirror of https://github.com/apache/druid.git
Move Jackson Guice adapters into io.druid
* Removes access to protected methods in com.fasterxml * Eliminates druid-common's use of foreign package com.fasterxml
This commit is contained in:
parent
7816d67148
commit
1df4baf489
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* Druid - a distributed column store.
|
||||
* Copyright 2012 - 2015 Metamarkets Group Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.fasterxml.jackson.databind.introspect;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JacksonInject;
|
||||
import com.google.inject.BindingAnnotation;
|
||||
import com.google.inject.Key;
|
||||
import com.metamx.common.IAE;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class GuiceAnnotationIntrospector extends NopAnnotationIntrospector
|
||||
{
|
||||
@Override
|
||||
public Object findInjectableValueId(AnnotatedMember m)
|
||||
{
|
||||
if (m.getAnnotation(JacksonInject.class) == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Annotation guiceAnnotation = null;
|
||||
for (Annotation annotation : m.getAllAnnotations()._annotations.values()) {
|
||||
if (annotation.annotationType().isAnnotationPresent(BindingAnnotation.class)) {
|
||||
guiceAnnotation = annotation;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (guiceAnnotation == null) {
|
||||
if (m instanceof AnnotatedMethod) {
|
||||
throw new IAE("Annotated methods don't work very well yet...");
|
||||
}
|
||||
return Key.get(m.getGenericType());
|
||||
}
|
||||
return Key.get(m.getGenericType(), guiceAnnotation);
|
||||
}
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
/*
|
||||
* Druid - a distributed column store.
|
||||
* Copyright 2012 - 2015 Metamarkets Group Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.fasterxml.jackson.databind.introspect;
|
||||
|
||||
import com.fasterxml.jackson.databind.BeanProperty;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.InjectableValues;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.metamx.common.IAE;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class GuiceInjectableValues extends InjectableValues
|
||||
{
|
||||
private final Injector injector;
|
||||
|
||||
public GuiceInjectableValues(Injector injector) {this.injector = injector;}
|
||||
|
||||
@Override
|
||||
public Object findInjectableValue(
|
||||
Object valueId, DeserializationContext ctxt, BeanProperty forProperty, Object beanInstance
|
||||
)
|
||||
{
|
||||
// From the docs: "Object that identifies value to inject; may be a simple name or more complex identifier object,
|
||||
// whatever provider needs"
|
||||
// Currently we should only be dealing with `Key` instances, and anything more advanced should be handled with
|
||||
// great care
|
||||
if(valueId instanceof Key){
|
||||
return injector.getInstance((Key) valueId);
|
||||
}
|
||||
throw new IAE("Unknown class type [%s] for valueId [%s]", valueId.getClass().getCanonicalName(), valueId.toString());
|
||||
}
|
||||
}
|
|
@ -19,8 +19,6 @@ package io.druid.guice;
|
|||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceAnnotationIntrospector;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceInjectableValues;
|
||||
import com.google.inject.Binder;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Licensed to Metamarkets Group Inc. (Metamarkets) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Metamarkets licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package io.druid.guice;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JacksonInject;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
|
||||
import com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector;
|
||||
import com.google.inject.BindingAnnotation;
|
||||
import com.google.inject.Key;
|
||||
import com.metamx.common.IAE;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class GuiceAnnotationIntrospector extends NopAnnotationIntrospector
|
||||
{
|
||||
@Override
|
||||
public Object findInjectableValueId(AnnotatedMember m)
|
||||
{
|
||||
if (m.getAnnotation(JacksonInject.class) == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Annotation guiceAnnotation = null;
|
||||
for (Annotation annotation : m.annotations()) {
|
||||
if (annotation.annotationType().isAnnotationPresent(BindingAnnotation.class)) {
|
||||
guiceAnnotation = annotation;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (guiceAnnotation == null) {
|
||||
if (m instanceof AnnotatedMethod) {
|
||||
throw new IAE("Annotated methods don't work very well yet...");
|
||||
}
|
||||
return Key.get(m.getGenericType());
|
||||
}
|
||||
return Key.get(m.getGenericType(), guiceAnnotation);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Licensed to Metamarkets Group Inc. (Metamarkets) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Metamarkets licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package io.druid.guice;
|
||||
|
||||
import com.fasterxml.jackson.databind.BeanProperty;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.InjectableValues;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.metamx.common.IAE;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class GuiceInjectableValues extends InjectableValues
|
||||
{
|
||||
private final Injector injector;
|
||||
|
||||
public GuiceInjectableValues(Injector injector) {this.injector = injector;}
|
||||
|
||||
@Override
|
||||
public Object findInjectableValue(
|
||||
Object valueId, DeserializationContext ctxt, BeanProperty forProperty, Object beanInstance
|
||||
)
|
||||
{
|
||||
// From the docs: "Object that identifies value to inject; may be a simple name or more complex identifier object,
|
||||
// whatever provider needs"
|
||||
// Currently we should only be dealing with `Key` instances, and anything more advanced should be handled with
|
||||
// great care
|
||||
if (valueId instanceof Key) {
|
||||
return injector.getInstance((Key) valueId);
|
||||
}
|
||||
throw new IAE(
|
||||
"Unknown class type [%s] for valueId [%s]",
|
||||
valueId.getClass().getCanonicalName(),
|
||||
valueId.toString()
|
||||
);
|
||||
}
|
||||
}
|
|
@ -21,8 +21,8 @@ package io.druid.query.extraction.namespace;
|
|||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceAnnotationIntrospector;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceInjectableValues;
|
||||
import io.druid.guice.GuiceAnnotationIntrospector;
|
||||
import io.druid.guice.GuiceInjectableValues;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.inject.Binder;
|
||||
|
|
|
@ -19,8 +19,8 @@ package io.druid.indexing.firehose;
|
|||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceAnnotationIntrospector;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceInjectableValues;
|
||||
import io.druid.guice.GuiceAnnotationIntrospector;
|
||||
import io.druid.guice.GuiceInjectableValues;
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
|
|
@ -18,21 +18,15 @@
|
|||
package io.druid.segment.loading;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||
import com.fasterxml.jackson.core.Version;
|
||||
import com.fasterxml.jackson.databind.BeanProperty;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.InjectableValues;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceAnnotationIntrospector;
|
||||
import com.fasterxml.jackson.databind.introspect.GuiceInjectableValues;
|
||||
import io.druid.guice.GuiceAnnotationIntrospector;
|
||||
import io.druid.guice.GuiceInjectableValues;
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.Binder;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.Module;
|
||||
import com.metamx.common.IAE;
|
||||
import io.druid.guice.GuiceInjectors;
|
||||
import io.druid.jackson.DefaultObjectMapper;
|
||||
import org.junit.Assert;
|
||||
|
|
Loading…
Reference in New Issue