web-dev-qa-db-fra.com

Exception: com.Sun.jersey.spi.inject.Errors $ ErrorMessagesException

J'utilise l'API Jersey pour les services Web. J'envoie les données en plusieurs parties du client au serveur. Je reçois une exception lorsque les services Web commencent à s'exécuter.

@POST
@Path("uploadphoto")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("text/plain")
public String uploadNotices(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) {
    String uploadedFileLocation = "d:/" + fileDetail.getFileName();
    // save it
    try {
        writeToFile(uploadedInputStream, uploadedFileLocation);
    } catch(Exception e) {
        return "no";
    }
    return "yes";
}

// save uploaded file to new location
private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) throws Exception {
    OutputStream out = new FileOutputStream(new File(uploadedFileLocation));
    int read = 0;
    byte[] bytes = new byte[1024];

    out = new FileOutputStream(new File(uploadedFileLocation));
    while ((read = uploadedInputStream.read(bytes)) != -1) {
        out.write(bytes, 0, read);
    }
    out.flush();
    out.close();
}

Trace de la pile:

SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
  SEVERE: Missing dependency for method public Java.lang.String com.homebulletin.resources.NoticeResources.uploadNotices(Java.io.InputStream,com.Sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0
  SEVERE: Missing dependency for method public Java.lang.String com.homebulletin.resources.NoticeResources.uploadNotices(Java.io.InputStream,com.Sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1
  SEVERE: Method, public Java.lang.String com.homebulletin.resources.NoticeResources.uploadNotices(Java.io.InputStream,com.Sun.jersey.core.header.FormDataContentDisposition), annotated with POST of resource, class com.homebulletin.resources.NoticeResources, is not recognized as valid resource method.
Jun 18, 2013 10:55:17 AM org.Apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
com.Sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.Sun.jersey.spi.inject.Errors.processErrorMessages(Errors.Java:170)
    at com.Sun.jersey.spi.inject.Errors.postProcess(Errors.Java:136)
    at com.Sun.jersey.spi.inject.Errors.processWithErrors(Errors.Java:199)
    at com.Sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.Java:765)
    at com.Sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.Java:760)
    at com.Sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.Java:489)
    at com.Sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.Java:319)
    at com.Sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.Java:609)
    at com.Sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.Java:210)
    at com.Sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.Java:374)
    at com.Sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.Java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.Java:212)
    at org.Apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.Java:1161)
    at org.Apache.catalina.core.StandardWrapper.allocate(StandardWrapper.Java:806)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:129)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:175)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:128)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:109)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:286)
    at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:844)
    at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:583)
    at org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:447)
    at Java.lang.Thread.run(Unknown Source)

Jun 18, 2013 10:55:17 AM org.Apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet Home Bulletin
com.Sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.Sun.jersey.spi.inject.Errors.processErrorMessages(Errors.Java:170)
    at com.Sun.jersey.spi.inject.Errors.postProcess(Errors.Java:136)
    at com.Sun.jersey.spi.inject.Errors.processWithErrors(Errors.Java:199)
    at com.Sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.Java:765)
    at com.Sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.Java:760)
    at com.Sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.Java:489)
    at com.Sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.Java:319)
    at com.Sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.Java:609)
    at com.Sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.Java:210)
    at com.Sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.Java:374)
    at com.Sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.Java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.Java:212)
    at org.Apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.Java:1161)
    at org.Apache.catalina.core.StandardWrapper.allocate(StandardWrapper.Java:806)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:129)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:175)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:128)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:109)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:286)
    at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:844)
    at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:583)
    at org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:447)
    at Java.lang.Thread.run(Unknown Source)
21
N Sharma

Il semble que vos quelques pots manquants dans votre projet. Essayez de les ajouter à votre projet:

jersey-multipart.jar  

mimepull.jar

Si vous utilisez maven, vous pouvez ajouter cette dépendance:

<dependency>
        <groupId>com.Sun.jersey.contribs</groupId>
        <artifactId>jersey-multipart</artifactId>
        <version>1.8</version>
    </dependency>

Changer la version de jar si vous avez besoin

Assurez-vous également que la version de votre jersey-multipart jar doit être identique à celle du jersey bundle jar

21
Juned Ahsan

Oublier d'ajouter @POST ou @Get en plus du nom de la méthode provoquera également cette erreur

13

Il m'a fait face à la même erreur parce qu'avoir les mêmes annotations @Path avec les mêmes noms de chemin (chaînes).

@Path('samepath')   /// samepath cause Jersey Error at run time.
/* Method 1*/

@Path('samepath')
/* Method 2 */
5
Yergalem

J'ai vu exactement la même erreur en utilisant @FormParam (qui s'attend à @POST) avec les paramètres @GET.

J'espère que cela aidera quelqu'un car ce n'était pas très intuitif de le savoir.

3
Datageek

com.Sun.jersey.spi.inject.Errors $ ErrorMessagesException

s'est produite lorsque j'avais deux méthodes @GET avec le même chemin mais des paramètres de requête différents.

Cela peut aussi arriver si vous renommez votre classe de contrôleur, faites mvn install sans mvn clean et mettez le fichier war dans le dossier /webapps.

3
Justas

Remplacez votre web.xml par ce code:

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>  org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
1
user4336792

Je sais que c'est trop tard. Mais la mise à jour ici pour les références futures. Mieux vaut vérifier les versions de jar. J'ai eu le même problème. J'utilisais la version 1.16 du noyau et du serveur de jersey, mais celui-ci que j'ai ajouté avec 1.18. Cela a donné la même erreur. Mais ensuite j'ai réalisé et changé à 1,16, puis a bien fonctionné. 

Cela ne fonctionne pas avec différentes versions.

0
Ajanthan

J'ai eu un problème similaire car je n'ai pas réussi à ajouter une annotation "Consume" pour ma méthode POST. J'espère que ça aide quelqu'un.

0
Abhi.P

J'ai rencontré ce problème parce que je n'avais pas de constructeur de paramètres dans ma classe 

@Path("/deviceconfigs")
public class DeviceConfigInterface extends ComInterfaceGen<DeviceConfigApi> {
    public DeviceConfigInterface(Class<DeviceConfigApi> type) {
        super(DeviceConfigApi.class);
    }
}.

Lorsque je n'utilise aucun constructeur de paramètres, le problème est résolu.

0
JiLiang