GAE Restful Web Service in Java -


i want develop restful web service in java google app engine. tools using are

eclipse kepler service release 2 (build id: 20140224-0627) google appengine java sdk 1.9.2 

i have used many versions of jersey, e.g. 1.8, 1.5 etc. if run project on local server works fine when deploy on google app engine can able open welcome web page can't able access web service.

as mentioned in https://code.google.com/p/googleappengine/wiki/willitplayinjava link, gae support jersey 1.5 when import jars files in project can't able deploy on gae.

i don't know version of jersey should use google appengine java sdk 1.9.2 or should use version of sdk.

my web.xml file

<?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_2_5.xsd" version="2.5">      <display-name>com.cit.cittracker</display-name>     <servlet>         <servlet-name>sample web service</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.cit.cittracker</param-value>         </init-param>         <init-param>              <param-name>com.sun.jersey.config.feature.disablewadl</param-name>              <param-value>true</param-value>          </init-param>         <load-on-startup>1</load-on-startup>     </servlet>      <servlet-mapping>         <servlet-name>sample web service</servlet-name>         <url-pattern>/restservices/*</url-pattern>     </servlet-mapping>      <welcome-file-list>         <welcome-file>index.html</welcome-file>     </welcome-file-list> </web-app> 

my webservice class

package com.aakib.sample;  import javax.ws.rs.get; import javax.ws.rs.path;  import javax.ws.rs.produces; import javax.ws.rs.core.mediatype; import javax.ws.rs.pathparam;  @path("/hello") public class samplehello {      /*this method called if text_plain requested*/     @get     @produces(mediatype.text_plain)     public string sayplaintexthello() {         return "hello jersey" + "(in text format)";     }      /*this method called if xml requested*/     @get       @produces(mediatype.text_xml)     public string sayxmlhello() {         return "<?xml version=\"1.0\"?>" + "<hello>hello jersey</hello>"                                             + "<format>xml</format>";       }      /*this method called if html requested*/     @get     @produces(mediatype.text_html)     public string sayhtmlhello() {         return "<html> " + "<title>" + "hello jersey" + "</title>"             + "<body><h1>" + "hello jersey" + "</h1><h2>in html format<h2></body>" + "</html> ";     }      /*this method called if html requested , have 2 parameters*/     @get     @path("{name}")     @produces(mediatype.text_html)     public string sayhtmlhellowith1param(@pathparam("name") string vname) {         return "<html> " + "<title>" + "hello jersey" + "</title>"             + "<body><h1>hello " + vname + "</h1><h2>in html format</h2>" +                  "<h3>1 value passed</h3>" + "</body>" + "</html> ";     }      /*this method called if html requested , have 2 parameters*/     @get     @path("{name}/{surname}")     @produces(mediatype.text_html)     public string sayhtmlhellowith2param(@pathparam("name") string vname, @pathparam("surname") string vsurname) {         return "<html> " + "<title>" + "hello jersey" + "</title>"                 + "<body><h1>hello " + vname + " " + vsurname + "</h1><h2>in html format</h2>" +                      "<h3>2 value passed</h3>" + "</body>" + "</html> ";     } } 

when tried jersey 2.5 & jersey 1.17 got error on local server as

apr 12, 2014 2:10:45 java.util.prefs.windowspreferences <init> warning: not open/create prefs root node software\javasoft\prefs @ root 0x80000002. windows regcreatekeyex(...) returned error code 5. apr 12, 2014 2:10:47 com.google.apphosting.utils.config.appenginewebxmlreader readappenginewebxml info: processed b:\programming\java ee\cit tracker web service\war\web-inf/appengine-web.xml apr 12, 2014 2:10:47 com.google.apphosting.utils.config.abstractconfigxmlreader readconfigxml info: processed b:\programming\java ee\cit tracker web service\war\web-inf/web.xml apr 12, 2014 2:10:47 com.google.appengine.tools.development.systempropertiesmanager setsystemproperties info: overwriting system property key 'java.util.logging.config.file', value 'c:\program files (x86)\google appengine java sdk 1.9.2\config\sdk\logging.properties' value 'web-inf/logging.properties' 'b:\programming\java ee\cit tracker web service\war\web-inf\appengine-web.xml' apr 12, 2014 2:10:47 com.google.apphosting.utils.jetty.jettylogger info info: logging jettylogger(null) via com.google.apphosting.utils.jetty.jettylogger apr 12, 2014 2:10:47 com.google.apphosting.utils.jetty.jettylogger info info: jetty-6.1.x apr 12, 2014 2:10:48 com.sun.jersey.api.core.packagesresourceconfig init info: scanning root resource , provider classes in packages:   com.cit.cittracker apr 12, 2014 2:10:48 com.google.apphosting.utils.jetty.jettylogger warn warning: failed cit tracker webservice: java.lang.incompatibleclasschangeerror: implementing class apr 12, 2014 2:10:48 com.google.apphosting.utils.jetty.jettylogger warn warning: failed com.google.appengine.tools.development.devappenginewebappcontext@7adb5354{/,b:\programming\java ee\cit tracker web service\war}: java.lang.incompatibleclasschangeerror: implementing class apr 12, 2014 2:10:48 com.google.apphosting.utils.jetty.jettylogger warn warning: failed jettycontainerservice$apiproxyhandler@4c73cedb: java.lang.incompatibleclasschangeerror: implementing class apr 12, 2014 2:10:48 com.google.apphosting.utils.jetty.jettylogger warn warning: error starting handlers java.lang.incompatibleclasschangeerror: implementing class     @ java.lang.classloader.defineclass1(native method)     @ java.lang.classloader.defineclass(unknown source)     @ java.security.secureclassloader.defineclass(unknown source)     @ java.net.urlclassloader.defineclass(unknown source)     @ java.net.urlclassloader.access$100(unknown source)     @ java.net.urlclassloader$1.run(unknown source)     @ java.net.urlclassloader$1.run(unknown source)     @ java.security.accesscontroller.doprivileged(native method)     @ java.net.urlclassloader.findclass(unknown source)     @ java.lang.classloader.loadclass(unknown source)     @ com.google.appengine.tools.development.isolatedappclassloader.loadclass(isolatedappclassloader.java:216)     @ java.lang.classloader.loadclass(unknown source)     @ com.sun.jersey.api.core.scanningresourceconfig.init(scanningresourceconfig.java:79)     @ com.sun.jersey.api.core.packagesresourceconfig.init(packagesresourceconfig.java:104)     @ com.sun.jersey.api.core.packagesresourceconfig.<init>(packagesresourceconfig.java:78)     @ com.sun.jersey.api.core.packagesresourceconfig.<init>(packagesresourceconfig.java:89)     @ com.sun.jersey.spi.container.servlet.webcomponent.createresourceconfig(webcomponent.java:696)     @ com.sun.jersey.spi.container.servlet.webcomponent.createresourceconfig(webcomponent.java:674)     @ 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:212)     @ org.mortbay.jetty.servlet.servletholder.initservlet(servletholder.java:440)     @ org.mortbay.jetty.servlet.servletholder.dostart(servletholder.java:263)     @ org.mortbay.component.abstractlifecycle.start(abstractlifecycle.java:50)     @ org.mortbay.jetty.servlet.servlethandler.initialize(servlethandler.java:685)     @ org.mortbay.jetty.servlet.context.startcontext(context.java:140)     @ org.mortbay.jetty.webapp.webappcontext.startcontext(webappcontext.java:1250)     @ org.mortbay.jetty.handler.contexthandler.dostart(contexthandler.java:517)     @ org.mortbay.jetty.webapp.webappcontext.dostart(webappcontext.java:467)     @ org.mortbay.component.abstractlifecycle.start(abstractlifecycle.java:50)     @ org.mortbay.jetty.handler.handlerwrapper.dostart(handlerwrapper.java:130)     @ org.mortbay.component.abstractlifecycle.start(abstractlifecycle.java:50)     @ org.mortbay.jetty.handler.handlerwrapper.dostart(handlerwrapper.java:130)     @ org.mortbay.jetty.server.dostart(server.java:224)     @ org.mortbay.component.abstractlifecycle.start(abstractlifecycle.java:50)     @ com.google.appengine.tools.development.jettycontainerservice.startcontainer(jettycontainerservice.java:254)     @ com.google.appengine.tools.development.abstractcontainerservice.startup(abstractcontainerservice.java:305)     @ com.google.appengine.tools.development.automaticinstanceholder.startup(automaticinstanceholder.java:26)     @ com.google.appengine.tools.development.abstractmodule.startup(abstractmodule.java:79)     @ com.google.appengine.tools.development.modules.startup(modules.java:97)     @ com.google.appengine.tools.development.devappserverimpl.dostart(devappserverimpl.java:255)     @ com.google.appengine.tools.development.devappserverimpl.access$000(devappserverimpl.java:47)     @ com.google.appengine.tools.development.devappserverimpl$1.run(devappserverimpl.java:213)     @ com.google.appengine.tools.development.devappserverimpl$1.run(devappserverimpl.java:211)     @ java.security.accesscontroller.doprivileged(native method)     @ com.google.appengine.tools.development.devappserverimpl.start(devappserverimpl.java:211)     @ com.google.appengine.tools.development.devappservermain$startaction.apply(devappservermain.java:277)     @ com.google.appengine.tools.util.parser$parseresult.applyargs(parser.java:48)     @ com.google.appengine.tools.development.devappservermain.run(devappservermain.java:219)     @ com.google.appengine.tools.development.devappservermain.main(devappservermain.java:210)  apr 12, 2014 2:10:48 com.google.apphosting.utils.jetty.jettylogger info info: started selectchannelconnector@127.0.0.1:8888 apr 12, 2014 2:10:48 com.google.appengine.tools.development.abstractmodule startup info: module instance default running @ http://localhost:8888/ apr 12, 2014 2:10:48 com.google.appengine.tools.development.abstractmodule startup info: admin console running @ http://localhost:8888/_ah/admin apr 12, 2014 2:10:48 com.google.appengine.tools.development.devappserverimpl dostart info: dev app server running 

and when try open in browser says

http error: 404  problem accessing /. reason:      not_found powered jetty:// 

i used jersey 1.18 google app engine sdk 1.8.8 without problems. try use these versions end work fine.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -