0

Web アプリケーションの構成は次のとおりです。

web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:mail-application-context.xml
....
    </context-param>
....
<servlet> 
<servlet-name>mailbox</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mailbox</servlet-name>
        <url-pattern>*.htm</url-pattern>
</servlet-mapping>

メールボックス servlet.xml

    <bean name="remoteProvisioningServiceImpl" class="pw.domain.service.RemoteProvisioningServiceImpl"/>

<bean name="/remote/domain/provision.htm" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
    <property name="service" ref="remoteProvisioningServiceImpl" />
    <property name="serviceInterface" value="pw.domain.service.RemoteProvisioningService" />
</bean>

次のように、mail-application-context.xmlでクライアントを適切に構成しました

    <bean id="remoteProvisioningService1" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="serviceUrl" value="http://${mailapp.dc.host.1.url}/remote/domain/provision.htm" />
    <property name="serviceInterface" value="pw.domain.service.RemoteProvisioningService" />
</bean> 

<bean id="remoteProvisioningService2" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="serviceUrl" value="http://${mailapp.dc.host.2.url}/remote/domain/provision.htm" />
    <property name="serviceInterface" value="pw.domain.service.RemoteProvisioningService" />
</bean> 

そして今...問題。適切なイベントで、クライアントは正しく httpinvoker 機能を介してサービスを呼び出しますが、応答は http-404 です。nginx ログで、Spring が http://{host}/remote/domain/provision.htm への POST 呼び出しを行うことをトレースします。

質問:

  1. httpInvoker ビット用に別のアプリ コンテキストを作成する必要がありますか? つまり、通常の Web 操作を処理するための Web コンテキストが既に 1 つあります。httpInvoker 機能とサービス構成のために、web.xml で {another-context} を宣言する必要がありますか。{another-context}-servlet.xml で定義されていますか?

  2. 1 でない場合、構成の何が問題になっていますか?

4

1 に答える 1

1

Got it.. Question 1 above has the answer attached to it. I need to create a separate web context for http-invoking facility to work.

This is because, in my normal webapp context (mailbox), i already have defined SimpleUrlHandlerMapping which maps appropriate urls to controllers. There it doesnt find place for http-invoker-serivce i want to define. When i separated web contexts, it worked like a charm! :D

Happy coding! :)

于 2011-08-18T14:34:55.763 に答える