2013-07-24 12 views
21

Prima volta sto provando un servizio Web utilizzando la jersey. Il codice seguente che ho ricevuto da alcuni blog. sto ottenendo seguente errore 500 quando sto cercando servizio Web Java utilizzando client magliajersey NoClassDefFoundError: org/objectweb/asm/ClassVisitor exception

javax.servlet.ServletException: Servlet.init() for servlet Jersey Root REST Service threw exception 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    java.lang.Thread.run(Unknown Source) 

root cause 

java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 
    com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79) 
    com.sun.jersey.api.core.servlet.WebAppResourceConfig.init(WebAppResourceConfig.java:102) 
    com.sun.jersey.api.core.servlet.WebAppResourceConfig.<init>(WebAppResourceConfig.java:89) 
    com.sun.jersey.api.core.servlet.WebAppResourceConfig.<init>(WebAppResourceConfig.java:74) 
    com.sun.jersey.spi.container.servlet.WebComponent.getWebAppResourceConfig(WebComponent.java:672) 
    com.sun.jersey.spi.container.servlet.ServletContainer.getDefaultResourceConfig(ServletContainer.java:415) 
    com.sun.jersey.spi.container.servlet.ServletContainer.getDefaultResourceConfig(ServletContainer.java:582) 
    com.sun.jersey.spi.container.servlet.WebServletConfig.getDefaultResourceConfig(WebServletConfig.java:87) 
    com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:703) 
    com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678) 
    com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203) 
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) 
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557) 
    javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    java.lang.Thread.run(Unknown Source)' 

Qui di seguito è il mio file web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>RestFulWeb</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>Jersey Root REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey Root REST Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app>' 

Qui Ho provato ad aggiungere il pacchetto, inoltre, che non ha help:

Aggiunto solo un file jar jersey-bundle-1.14.jar. Quello che segue è il mio server Jersey

package com.rest.server; 

import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import com.rest.data.Hello; 

// POJO, no interface no extends 

// The class registers its methods for the HTTP GET request using the @GET annotation. 
// Using the @Produces annotation, it defines that it can deliver several MIME types, 
// text, XML and HTML. 

// The browser requests per default the HTML MIME type. 

//Sets the path to base URL + /hello 
@Path("/hello") 
public class HelloWorldRest { 

@GET 
@Path("/{param}/") 
public String getMsg(@PathParam("param") String msg) { 

    String output = "Jersey say : " + msg; 

    return output; 

} 
@GET 
@Path("/world") 
public String getFixedMsg(String msg) { 

    String output = "Jersey say : fixed path" + msg; 

    return output; 

} 
// This method is called if TEXT_PLAIN is request 
@GET 
//@Path("helloworld") 
@Produces(MediaType.TEXT_PLAIN) 
public String sayPlainTextHello() { 
    System.out.println("sayPlain"); 
    return "Hello Jersey"; 
} 

// This method is called if XML is request 
@GET 
//@Path("helloworld") 
@Produces(MediaType.TEXT_XML) 
public String sayXMLHello() { 
    System.out.println("sayXML"); 
    return "" + " Hello Jersey" + ""; 
} 

// This method is called if HTML is request 
@GET 
//@Path("helloworld") 
@Produces(MediaType.TEXT_HTML) 
public String sayHtmlHello() { 
    System.out.println("sayHTML"); 
    return "<html> " + "<title>" + "Hello Jersey" + "</title>" 
    + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> "; 
} 

// This method is called if JSON is request 
@GET 
//@Path("helloworld") 
@Produces(MediaType.APPLICATION_JSON) 
public Hello sayJsonHello() { 
    return new Hello("Hello", "Jersey"); 
} 

@POST 
@Produces(MediaType.APPLICATION_JSON) 
public Hello createHello(Hello hello) 
{ 
    System.out.println("post"); 
    return hello; 
} 

}' 

attualmente sto cercando solo con GET che colpisce il seguente URL http://localhost:8080/RestFulWeb/hello, sto ottenendo l'errore 505.

Ho perso tutti i file jar, ma non ho ricevuto alcun errore di compilazione.

+0

Hai aggiunto il vaso richiesto nel tuo progetto ?? – BBdev

+1

@BBdev: grazie, controllato ho perso jar, in precedenza aggiunto solo un jar jersey-bundle-1.14.jar. ora assed asm.jar e json.jar, ora funziona bene. – user2502314

+0

@BBDev, un dubbio come un nuovo bie qui .. se mi sono perso qualche vaso dovrebbe dare un rito di errore in fase di compilazione? – user2502314

risposta

34

Ciò è causato dalla scomparsa di asm.jar,

Aggiungi questa dipendenza

<dependency> 

    <groupId>asm</groupId> 

    <artifactId>asm</artifactId> 

    <version>3.3.1</version> 

</dependency> 
+0

Funziona perfettamente con com.sun.jersey: jersey-bundle: 1.17 – tomtomssi

0

Mentre si scrive un webservice stavo ottenendo seguente errore:

INFO: Scanning for root resource and provider classes in the packages: 
    com.webservice.services 
Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 
    at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79) 
    at com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104) 
    at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78) 
    at com.webservice.StartWebService.startAttrService(StartWebService.java:32) 
    at com.webservice.StartWebService.main(StartWebService.java:20) 
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 5 more 

Ho incluso asm .jar nel mio progetto java e errore andato. Stavo seguendo passi da restful-web-services-first-application-mock-service-using-pure-java

Problemi correlati