diff --git a/engine/src/main/java/org/hibernate/search/bridge/impl/TikaBridgeProvider.java b/engine/src/main/java/org/hibernate/search/bridge/impl/TikaBridgeProvider.java index e51f1dfd2d6..f8c19b493b0 100644 --- a/engine/src/main/java/org/hibernate/search/bridge/impl/TikaBridgeProvider.java +++ b/engine/src/main/java/org/hibernate/search/bridge/impl/TikaBridgeProvider.java @@ -36,19 +36,28 @@ class TikaBridgeProvider extends ExtendedBridgeProvider { public FieldBridge provideFieldBridge(ExtendedBridgeProviderContext context) { AnnotatedElement annotatedElement = context.getAnnotatedElement(); if ( annotatedElement.isAnnotationPresent( TikaBridge.class ) ) { - Class returnType = context.getElementOrContainerReturnType(); - if ( ! Blob.class.isAssignableFrom( returnType ) - && ! byte[].class.isAssignableFrom( returnType ) - && ! String.class.isAssignableFrom( returnType ) - && ! URI.class.isAssignableFrom( returnType ) ) { - throw LOG.unsupportedTikaBridgeType( returnType ); - } + validateMemberType( context ); TikaBridge tikaAnnotation = annotatedElement.getAnnotation( TikaBridge.class ); return createTikaBridge( tikaAnnotation, context.getServiceManager() ); } return null; } + private void validateMemberType(ExtendedBridgeProviderContext context) { + Class elementType = context.getReturnType(); + // Example: URI, List, List + if ( ! Blob.class.isAssignableFrom( elementType ) + && ! String.class.isAssignableFrom( elementType ) + && ! byte[].class.isAssignableFrom( elementType ) + && ! URI.class.isAssignableFrom( elementType ) ) { + // byte[] is actually an array but we want to treat it as a simple element + Class returnType = context.getElementOrContainerReturnType(); + if ( ! byte[].class.isAssignableFrom( returnType ) ) { + throw LOG.unsupportedTikaBridgeType( returnType ); + } + } + } + private FieldBridge createTikaBridge(org.hibernate.search.annotations.TikaBridge annotation, ServiceManager serviceManager) { Class tikaBridgeClass; FieldBridge tikaBridge;