2012-10-18 5 views
4

을 실패하게 내 응용 프로그램의 web.xml 다음과 같이 원래는 뉴저지가 구성한이 보인다부트 스트랩 뉴저지는 자신감이에서

<servlet> 
    <servlet-name>jersey-servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <!-- swagger for REST API support 
      codehaus for exception mappings so, for ex, POSTing malformed JSON yields 400 bad request not 500 --> 
     <param-value>com.jonarcher.rest;com.wordnik.swagger.jaxrs;org.codehaus.jackson.jaxrs</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <!-- Passed thru to Swagger --> 
     <param-name>api.version</param-name> 
     <param-value>2.0</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>jersey-servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

가 잘 작동하고, 나는의 문서를 탐색 할 자신감-UI를 사용할 수 있습니다 내 주석 끝점.

그러나 필자는 응용 프로그램에 흔들리는 UI를 포함시켜 문서 탐색 방법을 설명하고자합니다. 저지 서블릿의 경우 <url-pattern>을 고려하여 정적 콘텐츠를 제공하는 데 문제가 발생했습니다. 분명히 예를 들어 /api/*으로 변경할 수는 있지만 실제로는 제 상황에서는 바람직하지 않습니다.

<filter> 
    <filter-name>jerseyFilter</filter-name> 
    <filter-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
     <param-value>.*\.html</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>jerseyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

잘 너무 작동합니다

나는 저지 URL이 때문에 뉴저지 처리에서 제외하는 당신이 매개 변수를 지정할 수있는 다음과, 필터보다는 서블릿로 실행되도록 구성 할 수 here 읽기 그 자체로. 그러나 내가 믹스에 꾸며 낼 때 일이 잘못되기 시작합니다. 특히, 필터 기반 구성에 com.sun.jersey.config.property.packages PARAM을 도입 그래서 같은 서블릿 구성에 있었다 같이

<filter> 
    <filter-name>jerseyFilter</filter-name> 
    <filter-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
     <param-value>.*\.html</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.jonarcher.rest;com.wordnik.swagger.jaxrs;org.codehaus.jackson.jaxrs</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>jerseyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

가 시작되지 필터를 원인, 다음과 같은 오류 메시지를

SEVERE: The following errors and warnings have been detected with resource and/or provider classes: 
    SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.wordnik.swagger.jaxrs.ApiListingResourceJSON.getAllApis(javax.servlet.ServletConfig,com.sun.jersey.api.core.ResourceConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo) at parameter at index 0 
    SEVERE: Method, public javax.ws.rs.core.Response com.wordnik.swagger.jaxrs.ApiListingResourceJSON.getAllApis(javax.servlet.ServletConfig,com.sun.jersey.api.core.ResourceConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo), annotated with GET of resource, class com.wordnik.swagger.jaxrs.ApiListingResourceJSON, is not recognized as valid resource method. 
    SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.wordnik.swagger.jaxrs.ApiListingResourceXML.getAllApis(javax.servlet.ServletConfig,com.sun.jersey.api.core.ResourceConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo) at parameter at index 0 
    SEVERE: Method, public javax.ws.rs.core.Response com.wordnik.swagger.jaxrs.ApiListingResourceXML.getAllApis(javax.servlet.ServletConfig,com.sun.jersey.api.core.ResourceConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo), annotated with GET of resource, class com.wordnik.swagger.jaxrs.ApiListingResourceXML, is not recognized as valid resource method. 
Oct 18, 2012 11:27:30 AM com.sun.jersey.spi.spring.container.servlet.SpringServlet initiate 
SEVERE: Exception occurred when intialization 
com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765) 
    at com.sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.java:117) 
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319) 
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609) 
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:727) 
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295) 
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) 
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115) 
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4071) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4725) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675) 
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

나는이 시점에서 붙어있어. 누구든지 어떤 제안/포인터가 있습니까?

답변

2

불행히도 이것은 불필요한 제한 사항처럼 보입니다. 로그 메시지에서 볼 수 있듯이 문제는 Swagger 메소드에 ServletConfig를 주입하는 것입니다. ServerConfig는 Jersey가 서블릿으로 실행될 때만 사용할 수 있습니다. Swagger도 필터를 지원하기 위해 Jersey WebConfig 클래스를 삽입하도록 메소드를 수정해야합니다 (FilterConfig 및 ServletConfig의 래퍼).

UPDATE : 나는 자신감이 문제를 해결하기 위해 풀 요청을 제출 한 : https://github.com/wordnik/swagger-core/pull/64

+0

최고라는 하위 폴더 아래에

<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/ui/*</url-pattern> <url-pattern>/ui/css/*</url-pattern> <url-pattern>/ui/lib/*.js</url-pattern> <url-pattern>/ui/images/*</url-pattern> </servlet-mapping> 

을, 정말 고마워요! –

1

나는 풀 요청을 검토하지만, 그 동안, 우리가이 문제를 해결 한 방법은 있습니다.

1) 두 가지 다른 웹 응용 프로그램을 배포하십시오. 하나는 webapps/ROOT 아래에 배치하고 다른 하나는 webapps/api 아래에 api 자체와 함께 배치합니다.

2)와 같은 기본 서블릿을 사용하여 파일 핸들러를 추가 : UI 파일이 "UI"