我有一个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();
}我在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>我用以下注释注册了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;
}
}当我试图启动服务器时,我会得到以下错误:
org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider :无法将org.glassfish.jersey.server.spi.ComponentProvider转换为java.lang.ClassCastException
我已经读过这样的问题:Jersey 2 injection source for multipart formdata和How can I define a JAX-RS service that processes multi-part data in JEE?,但我找不到解决办法。有什么建议吗?
-Log生产
警告:焊缝-000411:观察者方法BackedAnnotatedMethod BackedAnnotatedMethod ProcessAnnotatedType,BeanManager)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod私有BackedAnnotatedMethod ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod BackedAnnotatedMethod ProcessAnnotatedType,BeanManager)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod私有BackedAnnotatedMethod ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。警告:焊缝-000411:观察者方法BackedAnnotatedMethod public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType)接收所有注释类型的事件。考虑使用@WithAnnotations或带界的泛型类型限制事件。
发布于 2016-03-15 10:41:20
我终于找到解决办法了。关于第一个问题:
不能将org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionInterceptorProvider转换为org.glassfish.jersey.server.spi.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);
}
}https://stackoverflow.com/questions/36006394
复制相似问题