2014-02-08 32 views
0

當我用用球衣一個REST Web服務(遵循本教程http://www.youtube.com/watch?v=4DY46f-LZ0M),一切工作正常。 現在我試圖使用WS返回基本JSON。 當我嘗試通過瀏覽器使用它,我得到這個錯誤
HTTP狀態500 - Servlet.init()進行的servlet新澤西REST服務拋出異常Tomcat的錯誤使用500 JAXB

問:

我應該在哪裏調查進一步?

我使用的:Eclipse JEE,新澤西州歸檔1.18,Tomcat的7

這是我的課:

package com.name.rest.status; 
import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 

@Path("/v1/status") 
public class V1_status { 

private static final String api_version = "1.00.1"; 
@GET 
@Produces(MediaType.TEXT_HTML) 
public String returnTitle() { 
    return "<p> Java Web Service </p>";  
} 


@Path("/version") 
@GET 
@Produces(MediaType.TEXT_HTML) 
public String returnVersion() { 
    return "<p> version is: <p>" + api_version;  
} 

@GET 
@Produces("/application/json") 
public MyJaxbBean getMyBean() { 
return new MyJaxbBean("Agamemnon", 32); 
} 

這是我的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>com.name.rest</display-name> 
<welcome-file-list> 
<welcome-file>readme.html</welcome-file> 
<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 REST Service</servlet-name> 
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
<init-param> 
<param-name>com.sun.jersey.property.packages</param-name> 
<param-value>com.name.rest</param-value> 
</init-param> 

<init-param> 
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
<param-value>com.name.rest</param-value> 
</init-param> 

<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>Jersey REST Service</servlet-name> 
<url-pattern>/api/*</url-pattern> 
</servlet-mapping> 
</web-app> 

這裏我的例外:

mensaje Servlet.init() for servlet Jersey REST Service threw exception 



javax.servlet.ServletException: Servlet.init() for servlet Jersey REST Service threw exception 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:50 2) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
java.lang.Thread.run(Thread.java:744) 


    java.lang.IllegalArgumentException: java.text.ParseException: Next event is not a Token 
com.sun.jersey.core.header.MediaTypes.createQualitySourceMediaTypes(MediaTypes.java:289) 
com.sun.jersey.core.header.MediaTypes.createQualitySourceMediaTypes(MediaTypes.java:274) 
com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller.addProduces(IntrospectionModeller.java:173) 
com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller.workOutResourceMethodsList(IntrospectionModeller.java:303) 
com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller.createResource(IntrospectionModeller.java:126) 
com.sun.jersey.server.impl.application.WebApplicationImpl.getAbstractResource(WebApplicationImpl.java:769) 
com.sun.jersey.server.impl.application.WebApplicationImpl.createAbstractResourceModelStructures(WebApplicationImpl.java:1595) 
com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1356) 
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:502) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
java.lang.Thread.run(Thread.java:744) 


    java.text.ParseException: Next event is not a Token 
com.sun.jersey.core.header.reader.HttpHeaderReader.nextToken(HttpHeaderReader.java:102) 
com.sun.jersey.core.header.QualitySourceMediaType.valueOf(QualitySourceMediaType.java:84) 
com.sun.jersey.core.header.reader.HttpHeaderReader$5.create(HttpHeaderReader.java:360) 
com.sun.jersey.core.header.reader.HttpHeaderReader$5.create(HttpHeaderReader.java:358) 
com.sun.jersey.core.header.reader.HttpHeaderReader.readList(HttpHeaderReader.java:481) 
com.sun.jersey.core.header.reader.HttpHeaderReader.readList(HttpHeaderReader.java:473) 
com.sun.jersey.core.header.reader.HttpHeaderReader.readAcceptableList(HttpHeaderReader.java:461) 
com.sun.jersey.core.header.reader.HttpHeaderReader.readQualitySourceMediaType(HttpHeaderReader.java:365) 
com.sun.jersey.core.header.reader.HttpHeaderReader.readQualitySourceMediaType(HttpHeaderReader.java:373) 
com.sun.jersey.core.header.MediaTypes.createQualitySourceMediaTypes(MediaTypes.java:287) 
com.sun.jersey.core.header.MediaTypes.createQualitySourceMediaTypes(MediaTypes.java:274) 
com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller.addProduces(IntrospectionModeller.java:173) 
com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller.workOutResourceMethodsList(IntrospectionModeller.java:303) 
com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller.createResource(IntrospectionModeller.java:126) 
com.sun.jersey.server.impl.application.WebApplicationImpl.getAbstractResource(WebApplicationImpl.java:769) 
com.sun.jersey.server.impl.application.WebApplicationImpl.createAbstractResourceModelStructures(WebApplicationImpl.java:1595) 
com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1356) 
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:502) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
java.lang.Thread.run(Thread.java:744) 

回答

2

@Produces註釋上getMyBean()方法應該是

@Produces("application/json")

代替

@Produces("/application/json")

(刪除前導/

備選地,可以使用在javax.ws.rs.core.MediaType定義的常量。這樣你會在編譯時意識到錯誤。例如:

@Produces(MediaType.APPLICATION_JSON)

+0

它不給我的錯誤了,但頁面顯示爲空白。我這樣稱呼它:http:// localhost:8081/com.name.rest/api/v1/status/application/json – eeadev

+2

該資源位於'localhost:8081/com.name.rest/api/v1 /狀態「(你在'getMyBean'上沒有@Path(」application/json「),所以你不能使用你正在使用的URI)。 –

+1

@MichalGajdos是對的,'application/json'不是路徑的一部分。由於您有兩個'GET'方法,您的客戶端需要在請求的['Accept'](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)標頭中指定所需的類型。 即,如果你想讓html使用'Accept:text/html',如果你想讓json使用'Accept:application/json'。 –