Spring Webflowソースをダウンロードし、REST チャネル (データベースから画像を表示) をjsf-bookingサンプルに追加したいと考えました。このチャネルは、私のSpring-MVCサンプル アプリケーションでは問題なく動作していました。
ただし、指定されたアドレスでJSFハンドラーがdisplay.xhtmlファイルが存在しないというエラーメッセージで応答しているため、マッピングに問題があります(RESTリスナーがその要求を処理する必要があります)。
これは私がハンドラーを登録した方法です:
@Controller
@RequestMapping(value="/image")
public class ImageChannelImpl implements ImageChannel {
@RequestMapping(value="/display.png", method=RequestMethod.GET)
public void display(HttpServletResponse response) throws IOException {
(...)
response.setContentType("image/png");
ImageIO.write(img, "PNG", response.getOutputStream());
response.getOutputStream().flush();
log.debug("display finished");
}
}
ハンドラー マッピングをコピーしました。
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list id="beanList">
<ref bean="stringHttpMessageConverter" />
<ref bean="byteArrayHttpMessageConverter" />
</util:list>
</property>
</bean>
<bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean id="byteArrayHttpMessageConverter"
class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
DispatcherServlet は /spring/* リクエストをリッスンしています。
<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Map all /spring requests to the Dispatcher Servlet for handling -->
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>
したがって、画像はアドレス /spring/image/display.png で利用できると予想していましたが、REST ハンドラーはその要求を受け取っておらず、 /image/display.png も処理していません。
では、REST チャネルを登録できるようにするには、その構成で何を変更する必要があるのでしょうか? サンプルやドキュメント、Spring WebFlow と Spring MVC チャネルの両方を構成する方法をグーグルで検索しようとしましたが、何も見つかりませんでした。