Rest Service Jax-Rs-Post Multipart / data


У меня есть сервис JAX-rs REST, использующий JEE 7 (развернутый в glassfish 4), который имеет метод для обработки HTTP POST на ресурсе:

    import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
    import org.glassfish.jersey.media.multipart.FormDataParam; 


    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadVideo(
            @FormDataParam("files") InputStream uploadedInputStream,
            @FormDataParam("files") FormDataContentDisposition fileDetail) { 
        try {

            //do something

        } catch (Exception e) {

            e.printStackTrace();
        }

        return toReturn.build();
    }

Мой пом.xml в ejb-это:

<dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.22.2</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.22.2</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>2.22.2</version>
        </dependency>

И я зарегистрировал ресурс rest с этими аннотациями:

@ApplicationPath("/rest")
public class JaxRsActivator extends Application {

@Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> resources = new HashSet<>();
        resources.add(MultiPartFeature.class);
        return resources;
    }

    @Override
    public Map<String, Object> getProperties() {
        Map<String, Object> properties = new HashMap<>();
        properties.put("jersey.config.server.provider.packages", "com.myBean.upload");
        return properties;
    }  
}

Когда я пытаюсь запустить сервер, я получаю эту ошибку:

Java.яз..ClassCastException: не удается привести орг..стеклянная рыба.Джерси.доб.cdi1x. транзакция.внутренний.TransactionalExceptionInterceptorprovider к орг..стеклянная рыба.Джерси.сервер.спи.ComponentProvider

Я уже читал эти вопросы: Jersey 2 injection source for multipart formdataи Как я могу определить службу JAX-RS, которая обрабатывает многосоставные данные в JEE? но я не могу найти решения. Есть предложения?

- произведенный журнал

WARN: WELD-000411: Observer method [BackedAnnotatedMethod] орг..стеклянная рыба.ЕГЭ.осущ.ServerSentEventCdiExtension.processAnnotatedType(@наблюдает ProcessAnnotatedType, BeanManager) получает события для всех аннотированные типы. Рассмотрите возможность ограничения событий с помощью @WithAnnotations или универсальный тип с границами. Предупреждение: WELD-000411: метод наблюдателя [BackedAnnotatedMethod] частный орг..стеклянная рыба.Джерси.доб.cdi1x.внутренние.CdiComponentProvider.processAnnotatedType(@наблюдает ProcessAnnotatedType) получает события для всех аннотированных типов. Рассмотрите возможность ограничения событий с помощью @WithAnnotations или универсального типа с границами. ПРЕДУПРЕЖДЕНИЕ: СВАРКА-000411: Метод наблюдателя [BackedAnnotatedMethod] орг..стеклянная рыба.ЕГЭ.осущ.ServerSentEventCdiExtension.processAnnotatedType(@наблюдает ProcessAnnotatedType, BeanManager) получает события для всех аннотированные типы. Рассмотрите возможность ограничения событий с помощью @WithAnnotations или универсальный тип с границами. Предупреждение: WELD-000411: метод наблюдателя [BackedAnnotatedMethod] публика орг..стеклянная рыба.ОМС.инъекция.JMSCDIExtension.processAnnotatedType(@наблюдает ProcessAnnotatedType) получает события для всех аннотированных типы. Рассмотрите возможность ограничения событий с помощью @WithAnnotations или универсального типа с границами. Предупреждение: WELD-000411: метод наблюдателя [BackedAnnotatedMethod] частный орг..стеклянная рыба.Джерси.доб.cdi1x.внутренние.CdiComponentProvider.processAnnotatedType(@наблюдает ProcessAnnotatedType) получает события для всех аннотированных типов. Рассмотрите возможность ограничения событий с помощью @WithAnnotations или универсального типа с границами. Предупреждение: WELD-000411: метод наблюдателя [BackedAnnotatedMethod] публика орг..стеклянная рыба.ОМС.инъекция.JMSCDIExtension.processAnnotatedType(@наблюдает ProcessAnnotatedType) получает события для всех аннотированных типов. Рассмотрите возможность ограничения событий с помощью @WithAnnotations или универсального типа с границами.

1 3

1 ответ:

Наконец-то я нашел решение. Для первой задачи:

Не может бросить орг..стеклянная рыба.Джерси.доб.cdi1x. транзакция.внутренний.TransactionalExceptionInterceptorprovider в орг.стеклянная рыба.Джерси.сервер.спи.ComponentProvider

Решение было дано @peeskillet.

Моя реальная проблема была немного другой, так как я пропустил регистрацию всех пакетов с ресурсом Rest. Я публикую здесь решение этой проблемы в любом случае:

        @ApplicationPath("/rest")
        public class JaxRsActivator extends Application {

        @Override
            public Set<Class<?>> getClasses() {
                final Set<Class<?>> resources = new HashSet<Class<?>>();
                resources.add(MultiPartFeature.class);
                return resources;
            }

            @Override
            public Map<String, Object> getProperties() {
                Map<String, Object> properties = new HashMap<>();
                String array[] = {"com. myBean.home","com. myBean.upload","com.bandyer.search","com.bandyer.mail"};
                properties.put("jersey.config.server.provider.packages", array);
            }
        }