2011-09-02 2 views
2

JRuby Rack-Rails 애플리케이션의 응답을 처리하기 위해 필터에 응답을 전달하려고합니다 (성공하지 못했습니다). 기본적으로 Orbeon XForm Engine을 사용하여 Rails 애플리케이션에서 나오는 XHTML 출력을 향상시키고 싶습니다. JRuby Rack에서 간단한 Java 서블릿을 사용하면 모든 것이 원활하게 작동합니다. 사전
산드로의JRuby Rack - 서블릿 필터를 추가하는 방법?

<!DOCTYPE web-app PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 

    <context-param> 
    <param-name>public.root</param-name> 
    <param-value>/</param-value> 
    </context-param> 

    <context-param> 
    <param-name>rails.env</param-name> 
    <param-value>production</param-value> 
    </context-param> 

    <context-param> 
    <param-name>jruby.min.runtimes</param-name> 
    <param-value>2</param-value> 
    </context-param> 

    <context-param> 
    <param-name>jruby.max.runtimes</param-name> 
    <param-value>4</param-value> 
    </context-param> 


    <filter> 
    <filter-name>orbeon-xforms-filter</filter-name> 
    <filter-class>org.orbeon.oxf.servlet.OrbeonXFormsFilter</filter-class> 
    <init-param> 
     <param-name>oxf.xforms.renderer.context</param-name> 
     <param-value>/orbeon</param-value> 
    </init-param> 
    </filter> 

    <!-- This is necessary so that XForms engine resources can be served appropriately --> 
    <filter-mapping> 
    <filter-name>orbeon-xforms-filter</filter-name> 
    <url-pattern>/orbeon/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <!-- Any web resource under /xforms-jsp is processed by the XForms engine --> 
    <filter-mapping> 
    <filter-name>orbeon-xforms-filter</filter-name> 
    <url-pattern>/page/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <filter> 
    <filter-name>RackFilter</filter-name> 
    <filter-class>org.jruby.rack.RackFilter</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>RackFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 


    <listener> 
    <listener-class>org.jruby.rack.rails.RailsServletContextListener</listener-class> 
    </listener> 


</web-app> 

감사 :

다음은 web.xml 파일입니다.

+0

JRuby Rack이 서블릿이기 때문에 "단순한"서블릿과 JRuby Rack이 아닌 이유는 확실하지 않습니다. 작동하지 않는다고 말하면 필터가 구성되어 있지 않은 것처럼 보이거나 오류가 발생합니까? 오류가 발생하면 해결책을 제시하는 힌트가 될 수 있습니다. 마치 필터가없는 것처럼 JRuby Rack은 필터로 가로 챌 수없는 내용을 출력하는 특별한 방법이 있습니까? 코드에서 체크 인하면,'getOutputStream()'과'getWriter()'가 필터에서 오버라이드되므로 문제가되지 않아야한다. – avernet

+0

참고로 Orbeon XForms 필터의 소스는 다음과 같습니다. https://github.com/orbeon/orbeon-forms/blob/master/src/java/org/orbeon/oxf/servlet/OrbeonXFormsFilter.java – avernet

답변

0

저는 Orbeon XForms에 익숙하지 않아 문제가 무엇인지에 대해 긍정적이지 않습니다. 그러나 위 web.xml에 따르면 Orbeon 필터는 /orbeon/*/page/* URL에만 적용되는 반면 랙 필터는 모든 것에 적용됩니다.

서블릿 접근 방식이 효과가 있다면 왜 그렇습니까?

+0

Thanks 회신을 위해 특정 URL (/ orbeon/* 및/page/*)에만 필터를 적용해야한다는 사실은 내가 따라야 할 행동의 일부입니다. 서블릿 접근 방식은 Ruby를 전혀 사용하지 않는다는 것을 의미하며 (이는 Java 서블릿과 함께 작동하기 때문에) Ruby를이 프로젝트에 보관하고 싶습니다. Rails에서 출력 된 HTML을 다른 필터로 전달할 수 있는지 확인할 수 있습니까? 샘플 코드가 있습니까? 미리 감사드립니다 :) –

관련 문제