visual type source parameter injection found formularios formdataparam for ejemplos java jersey tomcat7 jax-rs multipartform-data

java - type - ejemplos de formularios mdi en visual basic



Fuente de inyección de Jersey 2 para formularios múltiples (5)

Debe habilitar la función MultiPart en su aplicación. Habilitar esta función inyecta los lectores de mensajes necesarios, escritores a su aplicación Jersey 2. Así es como los registras:

En el lado del servidor (servidor http):

final ResourceConfig resourceConfig = new ResourceConfig(MultiPartResource.class); resourceConfig.register(MultiPartFeature.class);

En el lado del servidor (despliegue de servlet):

import org.glassfish.jersey.filter.LoggingFilter; import org.glassfish.jersey.media.multipart.MultiPartFeature; import javax.ws.rs.core.Application; import java.util.HashSet; import java.util.Set; public class MyApplication extends Application { @Override public Set<Class<?>> getClasses() { final Set<Class<?>> classes = new HashSet<Class<?>>(); // register resources and features classes.add(MultiPartFeature.class); classes.add(MultiPartResource.class); classes.add(LoggingFilter.class); return classes; } }

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>Jersey Servlet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.aruld.jersey.multipart.MyApplication</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey Servlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>

En el lado del cliente:

final ClientConfig clientConfig = new ClientConfig(); clientConfig.register(MultiPartFeature.class); Client client = ClientFactory.newClient(clientConfig);

Aquí armé una muestra completa de Jersey 2 MultiPart en Github.

Tuve un método:

@POST @Consumes("multipart/form-data") @Produces( {"text/xml"}) public Response processForm( @FormDataParam("myparam") InputStream is, @FormDataParam("myparam") FormDataContentDisposition detail)

que funcionó bien con Jersey 1.x.

Estoy actualizando a 2.0 m11.

Ahora me sale el siguiente error:

12/01/2013 11:15:04 AM org.glassfish.jersey.server.ApplicationHandler initialize INFO: Initiating Jersey application, version Jersey: 2.0-m11 2012-12-21 12:34:15... 12/01/2013 11:15:04 AM org.glassfish.jersey.internal.Errors processErrors SEVERE: The following errors and warnings have been detected: WARNING: No injection source found for a parameter of type public javax.ws.rs.core.Response com.plutext.FileUpload.processForm(java.io.InputStream,org.glassfish .jersey.media.multipart.FormDataContentDisposition) at index 0.

Encontré http://java.net/jira/browse/JERSEY-1413 y confirmo http://java.net/projects/jersey/lists/commits/archive/2012-09/message/126 que parece relevante, pero es No es obvio para mí qué hacer para solucionar el problema.

ACTUALIZADO

Hice un servlet, que se ejecuta en Tomcat antes de org.glassfish.jersey.server.ApplicationHandler:

public class Jersey2Init extends HttpServlet { private static final Logger jul = Logger.getLogger(Jersey2Init.class .getName()); static { System.out.println("/n/nrunning Jersey2Init/n/n"); final ResourceConfig resourceConfig1 = new ResourceConfig(XFormService.class); resourceConfig1.registerInstances(new LoggingFilter(jul, true)); resourceConfig1.register(MultiPartFeature.class); final ResourceConfig resourceConfig2 = new ResourceConfig(AssembleService.class); resourceConfig2.registerInstances(new LoggingFilter(jul, true)); resourceConfig2.register(MultiPartFeature.class); } }

Definitivamente se está ejecutando primero:

INFO: Deploying web application archive C:/Java/apache-tomcat-7.0.29/webapps/Foo-Services.war running Jersey2Init 18/01/2013 9:09:51 PM org.glassfish.jersey.server.ApplicationHandler initialize INFO: Initiating Jersey application, version Jersey: 2.0-m11 2012-12-21 12:34:15... 18/01/2013 9:09:52 PM org.glassfish.jersey.internal.Errors processErrors SEVERE: The following errors and warnings have been detected:

Pero sigo teniendo el mismo error.


Después de luchar mucho, encontré que tienes que importar import org.glassfish.jersey.media.multipart.FormDataParam; no import javax.ws.rs.FormParam; para que puedas usar @FormDataParam


Estaba tratando de usar Jersey 2 para fileupload. Quería evitar crear una aplicación personalizada o una clase ResourceConfig para habilitar MultiPart. No está bien documentado, pero si desea agregar la funcionalidad de varias partes, todo lo que tiene que hacer es agregar esto a su configuración de servlet de Jersey en web.xml:

<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>

Como puedes ver, también agregué un filtro de registro.


Estaba usando Jersey 2.7 y estaba recibiendo el mismo error. Se resolvió mejorando a Jersey 2.9.


Y usando una instancia de aplicación anotada ...

@ApplicationPath("restAPI") public class ServiceApplication extends ResourceConfig { public ServiceApplication() { register(JAXBContextResolver.class); register(JacksonFeature.class); register(MultiPartFeature.class); registerInstances(new LoggingFilter(Logger.getLogger(ServiceApplication.class.getName()), true)); } }