2015-11-13 39 views
0

我想讓我的java rest api工作。 我正在關注swagger documentation。但是,我無法大舉工作。Swagger和web.xml

例如,根據文檔,我應該從swagger獲取json文件 - 但無論我嘗試什麼網址,我都不會得到它。

<context-param> 
    <param-name>resteasy.providers</param-name> 
    <param-value> 
    io.swagger.jaxrs.listing.ApiListingResource, 
    io.swagger.jaxrs.listing.SwaggerSerializers, 
    com.my.service.rest.handler.JsonParseExceptionHandler, 
    com.my.service.rest.handler.IllegalArgumentExceptionHandler, 
    com.my.service.rest.handler.JsonMappingExceptionHandler, 
    com.my.service.rest.handler.RuntimeExceptionHandler 
    </param-value> 
</context-param> 

<servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 

    <servlet-class>io.swagger.jaxrs.config.DefaultJaxrsConfig</servlet-class> 
    <init-param> 
     <param-name>api.version</param-name> 
     <param-value>0.1</param-value> 
    </init-param> 
    <init-param> 
     <param-name>swagger.api.basepath</param-name> 
     <param-value>http://localhost:8080/indicatorsService</param-value> 

     <!-- also not working <param-value>http://localhost:8080/docs</param-value> --> 
    </init-param> 
</servlet> 
<servlet> 
    <servlet-name>JbossServlet</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>JbossServlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

基於招搖文檔上,如果我去http://localhost:8080/indicatorsService/swagger.json,我應該得到的招搖JSON - 而不是我碰到下面的錯誤

Error in handling REST request. ExpectionMessage: Could not find resource for relative : /swagger.json of full path: http://localhost:8080/indicatorsService/swagger.json: org.jboss.resteasy.spi.NotFoundException: Could not find resource for relative : /swagger.json of full path: http://localhost:8080/indicatorsService/swagger.json 
    at org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:360) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:374) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:367) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:307) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:173) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:118) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_85] 

謝謝。

+0

你好,請問你沒有錯誤服務器啓動?你是否看到它正在登錄中註冊端點? 您是否基於swagger-codegen工具生成了Java服務器?如果是這樣,你可以分享你運行該代碼的Swagger文件嗎? 如果沒有,也許你可以運行codegen工具並比較差異? 對我來說,它看起來像你的http:// localhost:8080/indicatorsService/swagger.json路徑可能不正確 - 也許它應該是http:// localhost:8080/indicatorsService/api/swagger.json –

+0

嗨,沒有部署時出現錯誤。該服務工作正常。我沒有從swagger生成java服務器。我只是想爲現有的服務生成誇張的文檔。我嘗試了你建議的網址和其他許多網站 - 沒有成功。謝謝 – Magick

+0

@Integrating Stuff - 感謝您關於審查生成的招搖的服務的建議。我一直在這樣做,但看不到任何明顯的錯誤。如果有一些錯誤可以幫助指出方向,那就太好了,但沒有。我不知道這是RestEasy還是Jboss或其他問題。我嘗試過所有的邏輯網址。現在我只是猜測。 – Magick

回答

1

我在我的應用程序中有類似的配置,除了我使用Jersey 2而不是RestEasy。

我檢查了我的web.xml文件,它以類似的方式配置(除了專門用於Jersey 2的servlet類)。下面是摘錄:

<servlet> 
    <servlet-name>jax-rs-ws</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
    <param-name>javax.ws.rs.Application</param-name> 
    <param-value>com.jeff.MyJerseyApp</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>jax-rs-ws</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>swagger-servlet</servlet-name> 
    <servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig.JerseyJaxrsConfig</servlet-class> 
    <init-param> 
    <param-name>api.version</param-name> 
    <param-value>1.1.0</param-value> 
    </init-param> 
    <init-param> 
    <param-name>swagger.api.basepath</param-name> 
    <param-value>http://127.0.0.1:8080/myapp/rest</param-value> 
    </init-param> 
    <load-on-startup>3</load-on-startup> 
</servlet> 

下面是一些提示:

  • 我的球衣的servlet映射到/rest/*模式。全局根目錄/*也許可以,但我們繼續...
  • Swagger servlet中定義的基路徑在我的應用程序中包含相同的/rest URI。

此外,我必須使用檢索JSON結構API信息的網址是:

http://127.0.0.1:8080/myapp/rest/api-docs 

其URI具有相同/rest路徑開始。這使我認爲你應該使用下列地址:

http://localhost:8080/indicatorsService/api-docs 

我希望我猜對了......

+0

謝謝@JeffMorin - 是的,你的設置看起來很相似,我已經嘗試過你的建議,並且每個其他看似合乎邏輯的網址。唉,沒有什麼工作。 – Magick

+0

對不起,我會做更多的調查,如果我發現別的東西,我會通知你。 –

+0

謝謝傑夫 - 非常感謝。 – Magick