@Path("file.upload")
public class UploadFileService {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition fileDetail) {

    System.out.println("-----------------UploadFileService------------------1.");
    //Should we use a disk or DB? Decided to use DISK
    //Path should be read from properties-files
    String uploadedFileLocation = "//uploaded/" + fileDetail.getFileName();

    //save it
    writeToFile(uploadedInputStream, uploadedFileLocation);

    String output = "File uploaded to : " + uploadedFileLocation;
    //All went OK
    return Response.status(200).entity(output).build();

}
 WARNING: No injection source found for a parameter of type public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at index 0.

SEVERE:   WebModule[/insame]StandardWrapper.Throwable
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=MethodHandler{handlerClass=class com.insame.service.UploadFileService, handlerConstructors=[[email protected]]}, handlingMethod=public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), parameters=[Parameter [type=class java.io.InputStream, source=file, defaultValue=null], Parameter [type=class com.sun.jersey.core.header.FormDataContentDisposition, source=file, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:410)
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:157)
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:280)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:277)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:262)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)

He implementado servicio de prueba como esta bajo el UploadFileService:

@GET
@Path("count")
@Produces("text/plain")
public String countREST() {
    return "1 one 1";
}

y tengo esta excepción a registro:

FINE:   [Web-Security] hasResource perm: ("javax.security.jacc.WebResourcePermission" 

"/webresources/file.upload/count" "GET")
SEVERE:   WebModule[/insame]StandardWrapper.Throwable
java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:257)
WARNING:   StandardWrapperValve[com.insame.service.ApplicationConfig]: Allocate exception for servlet com.insame.service.ApplicationConfig
java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:257)
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:205)
    at org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:435)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:261)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)

Entorno

  • Netbeans7.3.1
  • Glassfish 4.0
  • Jersey 2 con Glassfish 4.0
InformationsquelleAutor Sami | 2013-08-15

6 Comentarios

  1. 45

    Con el fin de utilizar de varias partes en su Jersey de la aplicación que necesita para registrar MultiPartFeature en su aplicación, es decir:

    public class ApplicationConfig extends Application {
    
        public Set<Class<?>> getClasses() {
            final Set<Class<?>> resources = new HashSet<Class<?>>();
    
            //Add your resources.
            resources.add(UploadFileService.class);
    
            //Add additional features such as support for Multipart.
            resources.add(MultiPartFeature.class);
    
            return resources;
        }
    }

    Para obtener más información, consulte Multipart sección en el Jersey de la Guía de Usuarios.

    Para el segundo problema que estamos enfrentando pruebe a reiniciar el servidor GlassFish, no estoy seguro de cómo NetBeans se recarga el Jersey de la aplicación después de un cambio (si esto no ayuda, por favor enviar su ApplicationConfig).

    • Muchas gracias! Mensaje de Error cambiado y he encontrado un error en mi pom.xml. Yo estaba usando la vieja multipart versión en mi pom.xml. SOLDADURA-001408 Insatisfecho dependencias de tipo [Proveedores] con los calificadores [@Predeterminado] en el punto de inyección [[BackedAnnotatedParameter] el Parámetro 1 de [BackedAnnotatedConstructor] @Inject pública org.glassfish.jersey.los medios de comunicación.multiparte.interna.MultiPartReaderServerSide(@Contexto de los Proveedores, Proveedor<CloseableService>)]
    • Esto podría estar relacionado con el hecho de tener algunos de los Jersey 2.x bits en su .war (mientras están en el GF classpath al mismo tiempo). ¿Puede usted marcar jersey-media-multipart artefacto en su pom.xml como siempre? Es ya una parte de GF 4.0.
    • Eso fue todo!! Ahora se está trabajando! <dependencia> <groupId>org.glassfish.jersey.los medios de comunicación</groupId> <artifactId>jersey-medios de comunicación-de varias partes</artifactId> <versión>2.2</versión> <ámbito de aplicación>siempre</scope> </dependencia>
    • No estoy utilizando Maven, pero tienen la misma configuración pero la GF4 jersey clases NO se encuentran ! ¿Qué puedo hacer ?
    • He tenido este problema después de la fusión de un viejo Jersey de 1 a Jersey 2 del proyecto. Creo que la solución no es el aceptado respuesta, sino más bien la revisión del POM web y archivos XML…
  2. 32

    Yo tenía el mismo problema y quería evitar la creación de una aplicación personalizada de la clase. No está bien documentado, pero si quieres añadir Varias partes de la funcionalidad, todo lo que tienes que hacer es agregar esto a su web.xml jersey servlet de configuración:

    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
    </init-param>

    También he añadido un loggingfilter.

    • Su solución es la MEJOR!
    • Yo no puedo conseguir que esto funcione bien. Qué se necesita para estar en algún orden específico-sabio? ¿Tienes una idea de todo el pom por casualidad?
    • Este es el método más fácil y funciona como un encanto! Muy recomendable!
  3. 2

    Si está utilizando el servidor jetty y jersey servlet, entonces usted puede resolver este problema agregando el siguiente código en la clase principal donde se ha iniciado el servidor jetty,

    ServletHolder jerseyServlet = contexto.addServlet(
    org.glassfish.jersey.servlet.ServletContainer.class, «/*»); jerseyServlet.setInitOrder(0);

          //Tells the Jersey Servlet which REST service/classes to load.
          jerseyServlet
                  .setInitParameter(
                          "jersey.config.server.provider.classnames",
                          <Your entry point class's canonical name>
                                  + ";org.glassfish.jersey.media.multipart.MultiPartFeature");
  4. 0

    Sólo aclaraciones menores

    Uso

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

    No

    com.sun.jersey.*

    Hizo el trabajo para mí sólo cuando se utiliza org.glassfish.jersey.media.multipart.*

    En ApplicationConfig solo tienes que registrarte MultiPartFeature como

    import org.glassfish.jersey.media.multipart.MultiPartFeature;
    
    @javax.ws.rs.ApplicationPath("webresources")
    public class ApplicationConfig extends Application {
    
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> resources = new java.util.HashSet<>();
            resources.add(UploadFileService.class);
            resources.add(MultiPartFeature.class);
            return resources;
        }
    }
    • Hlleo chicos,estoy usando wildfly servidor, puedo usar import org.glassfish.jersey.los medios de comunicación.de varias partes.* en mi ApplicationConfig , si sí se puede saber qué es la dependencia que debo agregar en mi pom.xml , porque estoy recibiendo este error en mi proyecto : javax.ws.rs.NotSupportedException: no se Pudo encontrar el cuerpo del mensaje lector de tipo: clase com.sol.jersey.núcleo.encabezado.FormDataContentDisposition de tipo de contenido: multipart/form-data;, thak en avanzado.
  5. 0

    Estoy usando Jersey 1.9.1. org.glassfish…… funciona bien con el Jersey 2. Para Jersey 1 es mejor usar el com.sol… clases.

    • En lugar de la adición de dos puestos por su respuesta, me gustaría sugerir que editar tu post de su primer intento de responder a la pregunta (es decir, este post). Gracias.
  6. -1

    Puede utilizar @FormDataParam(«archivo») equivalente de FormDataMultiPart si quieres que el uso de la anotación.

    Utilizan como se indica a continuación muestra el código de extracto de:

    public Response uploadFile( **@FormDataParam("file")** InputStream fileInputStream,
                 @FormDataParam("file") FormDataContentDisposition contentDispositionHeader) {

Dejar respuesta

Please enter your comment!
Please enter your name here