Разрабатываю restful сервер на java с помощью jersey. Клиент к серверу будет написан на javaScript. Возникли проблемы с выполнением POST запросов. В качестве ide eclipse-indigo-sr1 и веб контейнер apache tomcat. версия jersey 1.91. Код java сервера Код | public class RestfulServer { @GET @Produces( { MediaType.APPLICATION_JSON }) @Path("/getUsers") public Response Resource1() { System.out.println("Invoked: /getUsers"); LoginInfo lInfo = new LoginInfo(); lInfo.Login="MyLogin"; lInfo.Password="MyPassword"; return Response.ok(lInfo,MediaType.APPLICATION_JSON) .header("Access-Control-Allow-Origin", "*").build(); } @POST @Consumes({MediaType.APPLICATION_JSON}) @Path("/insertUser") public Response PutUser(LoginInfo lInfo) { System.out.println("Invoked /insertUser"); System.out.println("UserName:"+lInfo.Login); System.out.println("Password:"+lInfo.Password); return Response.ok().build(); } }
|
Класс LoginInfo Код | @XmlRootElement public class LoginInfo {
public String Login; public String Password; }
|
Суть проблемы в том, что я не могу выполнить POST запрос с использованием XMLhttpRequest, выглядит это примерно так Код | var url="http://localhost:8080/ru.konalegi.mchange/service/insertUser"; var req = new XMLHttpRequest(); var data='{"Login":"MyLogin","Password":"MyPassword"}'; req.open('POST',url,false); req.setRequestHeader("Content-Type", "application/json"); req.send(data); document.write(req.responseText);
|
Причем на стороне Java происходит следующая ошибка. Я пробовал и c xml, результат такой же. Код | 27.09.2011 9:21:56 com.sun.jersey.server.wadl.generators.WadlGeneratorJAXBGrammarGenerator$8 resolve SEVERE: null java.lang.IllegalAccessException: Class com.sun.jersey.server.wadl.generators.WadlGeneratorJAXBGrammarGenerator$8 can not access a member of class javax.ws.rs.core.Response with modifiers "protected" at sun.reflect.Reflection.ensureMemberAccess(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at com.sun.jersey.server.wadl.generators.WadlGeneratorJAXBGrammarGenerator$8.resolve(WadlGeneratorJAXBGrammarGenerator.java:467) at com.sun.jersey.server.wadl.WadlGenerator$ExternalGrammarDefinition.resolve(WadlGenerator.java:181) at com.sun.jersey.server.wadl.ApplicationDescription.resolve(ApplicationDescription.java:81) at com.sun.jersey.server.wadl.generators.WadlGeneratorJAXBGrammarGenerator.attachTypes(WadlGeneratorJAXBGrammarGenerator.java:518) at com.sun.jersey.server.wadl.WadlBuilder.generate(WadlBuilder.java:124) at com.sun.jersey.server.impl.wadl.WadlApplicationContextImpl.getApplication(WadlApplicationContextImpl.java:104) at com.sun.jersey.server.impl.wadl.WadlApplicationContextImpl.getApplication(WadlApplicationContextImpl.java:120) at com.sun.jersey.server.impl.wadl.WadlMethodFactory$WadlOptionsMethodDispatcher.dispatch(WadlMethodFactory.java:98) at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 27.09.2011 9:21:56 com.sun.jersey.server.wadl.generators.WadlGeneratorJAXBGrammarGenerator attachTypes INFO: Couldn't find JAX-B element for class javax.ws.rs.core.Response
|
на стороне javascript клиента следующие данные Заголовок ответа. Код |
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Allow: OPTIONS,POST Content-Type: application/vnd.sun.wadl+xml Content-Length: 486 Date: Tue, 27 Sep 2011 05:21:56 GMT
|
Заголовок запроса Код | OPTIONS /ru.konalegi.mchange/service/insertUser HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Origin: null Access-Control-Request-Method: POST Access-Control-Request-Headers: content-type Pragma: no-cache Cache-Control: no-cache
|
Ну и ошибка клиента Код | Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [Прерывать на этой ошибке] req.send(data);
|
Но мне больше всего интересно, то что есть работающий клиент, только с использованием ActiveXObject, но он мне не подходит, поскольку работает только из под ie. Пример работающего JavaScript клиента Код | req = new ActiveXObject("MSXML2.XMLHTTP"); req.Open('POST', "http://localhost:8080/ru.konalegi.mchange/service/insertUser", false); req.setRequestHeader("Content-Type", "application/json"); req.Send('{"Login":"MyLogin","Password":"MyLogin"}'); WScript.echo(req.responseText);
|
Несколько дней ломаю голову над проблемой :( Подскажите в какую сторону копать? Заранее спасибо.
|