2014-04-29 2 views
0

я получаю ERROR что свидетельствует об отсутствии root resource class в Resource Config .Это мой код веб-сервис:ContainerException при попытке построить веб-сервис

public class MapErpService { 

//first a URI for each resource,create using PUT 
DBUtils db; 
MapErpService() 
{ 
    db=new DBUtils("zmaperp", "root", "root"); 
} 

@PUT 
@Path("/{objtype}/{objkey}") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response createGeometry(@PathParam("objtype") String objtype,@PathParam("objkey") String objkey,JSONObject obj) 
{ 
    //generate gisuniqkey here 
    JSONObject geo=(JSONObject) obj.get("geometry"); 
    String gisuniqkey=(String) obj.get("gisuniqkey"); 
    String wkt=db.convertToWKT(geo.toJSONString()); 
    if(db.insertGeometryValues(gisuniqkey, objkey, objtype, wkt)) 
    { 
     System.out.println("Data inserted successfully using PUT with objkey: "+objkey); 
     return Response.status(201).entity("Data inserted successfully using PUT with objkey: "+objkey).build(); 
    } 

    else 
    { 
     System.out.println("Data could not be inserted successfully"); 
     return Response.status(500).entity("Data inserted successfully using PUT with objkey: "+objkey).build(); 
    } 
} 

@POST 
@Path("/{objtype}") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response createGeometryUsingPost(@PathParam("objtype")String objtype,JSONObject obj) 
{ 
    //both gisuniqkey and objkey have to be generated by magic here... 
    JSONObject geo=(JSONObject) obj.get("geometry"); 
    String gisuniqkey=(String) obj.get("gisuniqkey"); 
    String objkey=(String)obj.get("objkey"); 
    String wkt=db.convertToWKT(geo.toJSONString()); 
    if(db.insertGeometryValues(gisuniqkey, objkey, objtype, wkt)) 
    { 
     //set response code to 201(??) here 
     System.out.println("Data inserted successfully using PUT with objkey: "+objkey); 
     return Response.created(URI.create("http://localhost:8180/"+"GoogleMapsLoadingTest/"+objtype+"/"+objkey)).status(201).entity("Data inserted successfully using POST with objkey: "+objkey).build(); 
    } 
    else 
     //set response code 404?? 
     System.out.println("Data could not be inserted successfully"); 
    return Response.status(201).entity("Data could not be inserted successfully").build(); 
} 

@GET 
@Path("/{objtype}/{objkey}") 
@Produces(MediaType.APPLICATION_JSON) 
public JSONObject getGeometry(@PathParam("objtype")String objtype,@PathParam("objkey") String objkey) 
{ 
    ResultSet rs=db.queryValue(objkey, objtype); 
    JSONObject res=null; 
    try { 
     if(rs.next()) 
     { 
      String wkt=rs.getString("AsText(Geometry)"); 
      res=db.convertToGeoJSON2(wkt); 
     } 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return res; 
} 

@PUT 
@Path("/{objtype}/{objkey}") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response updateGeometry(@PathParam("objkey") String objkey,@PathParam("objtype") String objtype,JSONObject obj) 
{ 
    String gisuniqkey=(String) obj.get("gisuniqkey"); 
    JSONObject geo=(JSONObject) obj.get("geometry");  
    String wkt=db.convertToWKT(geo.toJSONString()); 
    if(db.updateGeometryValue(objkey, objtype, wkt)) 
    { 
     System.out.println("The update operation was successful for objkey: "+objkey); 
     return Response.status(200).entity("The update operation was successful for objkey: "+objkey).build(); 
    } 
    else 
     //send 500 Server Error here 
     System.out.println("The update operation failed completely"); 
    return Response.status(500).entity("The update operation failed completely").build(); 
} 

@DELETE 
@Path("/{objkey}/{objtype}") 
public Response deleteGeometry(@PathParam("objkey") String objkey,@PathParam("objtype") String objtype){ 
    if(db.delete(objkey, objtype)){ 
     System.out.println("The delete operation was successful"); 
     return Response.status(200).entity("The delete operation was successful").build(); 
    } 
    else 
    { 

     System.out.println("The delete operation failed miserably"); 
     return Response.status(500).entity("The delete operation failed miserably").build(); 
    } 

} 

//how do I do multiple...a basic attempt using the POST method 
@POST 
@Path("/{objtype}") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public JSONObject getMultiGeometry(@PathParam("objtype") String objtype,JSONObject body){ 
    JSONObject res=null; 
    JSONArray itab= (JSONArray) body.get("itab"); 
    ArrayList<String> keys=new ArrayList<String>(); 
    for(int i=0;i<itab.size();i++) 
    { 
     JSONObject keyObj=(JSONObject) itab.get(i); 
     String objkey=(String) keyObj.get("objkey"); 
     keys.add(objkey); 
     System.out.println("\nobjkey: "+objkey); 
    } 
    ResultSet rs=db.queryValues(keys); 
    try { 
     ArrayList<String> wktList=new ArrayList<String>(); 
     while(rs.next()) 
     { 
      String wkt=rs.getString("AsText(GEOMETRY)"); 
      //String geo=db.convertToGeoJSON(wkt).toJSONString(); 
      //System.out.println("\nwkt: "+wkt+"\tgeoJSON: "+geo); 
      wktList.add(wkt); 
     } 
     res=db.createGeometryCollection(wktList); 
    } 
    catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return res; 
} 
} 

Это мой web.xml:

<display-name>GoogleMapLoadingTest</display-name> 
<servlet> 
    <servlet-name>Jersey REST Services</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.hastha.maperp.webservice</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Services</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

ОБНОВЛЕНИЕ:

Добавление класса приложения не имеет эффекта:

public class MapErpApplication extends Application { 

public Set<Class<?>> getClasses() 
{ 
    Set<Class<?>> res=new HashSet<Class<?>>(); 
    res.add(MapErpService.class); 
    res.add(MapErpGetService.class); 
    return res; 
} 
} 

Я все еще получаю эту ошибку:

com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes. 
com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99) 
com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359) 
com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180) 
com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799) 
com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795) 
com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) 
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) 
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) 
com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:491) 
com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:321) 
com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) 
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) 
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:376) 
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:559) 
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:936) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
java.lang.Thread.run(Thread.java:744) 

UPDATE2:

Now I get this error when performing a GET request from the browser

ответ

0

аннотировать MapErpService класс с @Path("/erp") (или другую строку).

+0

Я сделал, как вы сказали, [получение этой ошибки сейчас] (http://pastebin.com/0DLpHeEV) – vamsiampolu

Смежные вопросы