Flex Cairngorm Spring Blazeds - Remoting Error - 请帮帮我

时间:2009-11-05 17:36:30

标签: flex spring remoting blazeds cairngorm

当我尝试从Flex / Cairngorm应用程序访问远程Java类(在Spring / BlazeDS上)时,我似乎遇到以下错误。我现在正在疯狂地试图看出什么是错的 - 任何帮助都会非常感激 - 谢谢迈克。

**Error: C0007E: RemoteObject not found for mycomponentsService
    at RemoteObjects/getService()
    at com.adobe.cairngorm.business::ServiceLocator/getRemoteObject()
    at com.nomura.dashboard.client.business::DashBoardDelegate()**

我的所有配置文件都在下面:

Cairngorm - BusinessDelegate.as

this.service = ServiceLocator.getInstance().getRemoteObject("**mycomponentsService**");

Cairngorm - Services.mxml

mx:RemoteObject id="mycomponentsService" 
                destination="remotecomponentService" 
                showBusyCursor="true">

Spring / BlazeDS - application-config.xml

flex:remote-service ref="remotecomponentService" 

bean id="remotecomponentService" 
     class="com.mycompany.dashboard.server.dao.ComponentsDAO"

Spring / BlazeDS - services-config.xml

channel-definition id="myamf" class="mx.messaging.channels.AMFChannel"
endpoint url="http://localhost:8080/dashboard-server/spring/messagebroker/amf" 
class="flex.messaging.endpoints.AMFEndpoint"

web.xml还包含Spring引用 - 见下文

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4">

<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<display-name>dashboard-server</display-name>

<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>/WEB-INF/spring/*-config.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

<!-- Map /spring/* requests to the DispatcherServlet -->
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/spring/*</url-pattern>
    </servlet-mapping>
</web-app>

2 个答案:

答案 0 :(得分:1)

我们也可以看到您的web.xml吗?我很惊讶在端点URL中看到“spring”这个词。我的终点总是看起来像

url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"

例如:我认为你的services-config.xml应该更像这样。

    <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
         <endpoint url="http://{server.name}/dashboard-server/messagebroker/amf"
                   class="flex.messaging.endpoints.AMFEndpoint"/> 
    </channel-definition>

我还建议不要对端点URL进行硬编码。跟你一起去

    <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
        <endpoint class="flex.messaging.endpoints.AMFEndpoint"
          url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" /> 
    </channel-definition>

更新

好的,所以你的web.xml看起来没问题,就像你的网址中有spring一样。我在Spring配置文件(application-config.xml)中看到的是Spring URL映射。例如,在我的Spring配置文件中,除了bean定义之外,还有一个映射。 E.g:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <value>
            /histogram/**=bean.HistogramController
            /counter/**=bean.CounterController
        </value>
    </property>
</bean>

<bean id="bean.HistogramController" class="ch.comp.app.HistogramXportController"  />
<bean id="bean.CounterController"   class="ch.comp.app.CounterXportController"    />

(我有一个基于Spring的应用程序,另一个使用BlazeDS的应用程序,但不是两个......所以我可能会遗漏一些东西。那就是说,我问的问题仍然应该是有效的。理论。但是要带上一粒盐。)

也许有些超级基本的调试是有序的。您是否可以检查服务器的调用是否在这些问题端点上返回HTTP 404?有几种方法可以做到这一点:

  • 检查GET /dashboard-server/spring/messagebroker/amf的访问日志。这些请求的HTTP状态代码是什么? (免费,简单,无新工具。)
  • 如果您使用FireFox作为浏览器,请添加 Tamper Data 插件。您不必篡改数据,但它会显示正在调用的内容,返回,以及所有HTTP标头。
  • 使用完整的面向Flash / Flex的协议嗅探工具,例如 Charles Web Debugging Proxy

缩小问题以了解这些请求在通信堆栈上的失败位置将非常有用。

答案 1 :(得分:0)

我在下面附上了web.xml。就“Spring”这个词而言 - 我正在使用标准的BlazrDS / Spring集成WAR文件,它需要“spring”。 bean id =“remotecomponentService”实际上是一个Spring bean。

你是说你使用BlazeDS / Spring WAR我可以使用上面的解决方案吗?

web.xml还包含Spring引用 - 见下文

<web-app version="2.4">
<display-name>dashboard-server</display-name>
<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>/WEB-INF/spring/*-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<!-- Map /spring/* requests to the DispatcherServlet -->
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/spring/*</url-pattern>
    </servlet-mapping>
</web-app>