我有一个使用JEE 7(在glassfish 4中部署)的jax-rs REST服务,该服务具有一种处理资源上的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();
    }

我在ejb中的pom.xml是:
<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>

我用这些注释注册了其余资源:
@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.lang.ClassCastException:无法转换
org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider
到org.glassfish.jersey.server.spi.ComponentProvider

我已经阅读了以下问题:Jersey 2 injection source for multipart formdataHow can I define a JAX-RS service that processes multi-part data in JEE?,但找不到解决方案。有什么建议?

-日志产生

警告:WELD-000411:观察者方法[BackedAnnotatedMethod]
org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes
ProcessAnnotatedType,BeanManager)接收所有事件
带注释的类型。考虑使用@WithAnnotations限制事件,或者
有界限的泛型类型。警告:WELD-000411:观察者方法
[BackedAnnotatedMethod]私有
org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes
ProcessAnnotatedType)接收所有带注释类型的事件。
考虑使用@WithAnnotations或通用类型限制事件
有界。警告:WELD-000411:观察者方法
[BackedAnnotatedMethod]
org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes
ProcessAnnotatedType,BeanManager)接收所有事件
带注释的类型。考虑使用@WithAnnotations限制事件,或者
有界限的泛型类型。警告:WELD-000411:观察者方法
[BackedAnnotatedMethod]公共
org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes
ProcessAnnotatedType)接收所有带注释类型的事件。
考虑使用@WithAnnotations或通用类型限制事件
有界。警告:WELD-000411:观察者方法
[BackedAnnotatedMethod]私有
org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes
ProcessAnnotatedType)接收所有带注释类型的事件。
考虑使用@WithAnnotations或通用类型限制事件
有界。警告:WELD-000411:观察者方法
[BackedAnnotatedMethod]公共
org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes
ProcessAnnotatedType)接收所有带注释类型的事件。
考虑使用@WithAnnotations或通用类型限制事件
有界。

最佳答案

终于我找到了解决方案。
对于第一个问题:

无法投射
org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider
到org.glassfish.jersey.server.spi.ComponentProvider

解决方案是@peeskillet提供的解决方案。

我真正的问题有所不同,因为我错过了向Rest Resource注册所有软件包的机会。无论如何,我在这里发布此问题的解决方案:

        @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);
            }
        }

09-25 18:01