【问题标题】:Flex Cairngorm Spring Blazeds - Remoting Error - help me pleaseFlex Cairngorm Spring Blazeds - 远程错误 - 请帮帮我
【发布时间】:2010-12-13 12:40:05
【问题描述】:

当我尝试从 Flex/Cairngorm 应用程序访问远程 Java 类(在 Spring/BlazeDS 上)时,我似乎遇到了以下错误。我现在要疯了,想看看哪里出了问题 - 任何帮助都将不胜感激 - 谢谢 Mike。

**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>

【问题讨论】:

  • 你的BusinessDelegate.as 真的像"**mycomponentsService**",里面有星星吗?或者这是格式化的尝试?
  • 嗨 Stu,这是正确的格式 - 我认为网站的粗体功能出错了 - 名称是 mycomponentsService
  • @Michael:您可以像我一样编辑您的问题。 :) 这是“堆栈溢出”的做事方式。

标签: apache-flex spring remoting blazeds cairngorm


【解决方案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 看起来没问题,在你的 URL 中包含 spring 也是如此。我在您的 Spring 配置文件 (application-config.xml) 中看到的是 Spring URL 映射。例如,在我的 Spring 配置文件中,除了 bean 定义之外,还有一个映射。例如:

<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

缩小问题范围以了解这些请求是否在通信堆栈上失败的位置非常有帮助。

【讨论】:

  • 嗨,Stu,由于 cmets 的空间有限,我已经回答了我的问题...请看下一个答案
  • 另外,{server.name}:{server.port}/{context.root}/ - 那么如何设置呢?
  • 这是自动魔法!服务器知道它的名字,知道它的端口,并且知道它正在运行什么 webapp。它将{parameter-name} 替换为真实的、实际的、正在运行的值。
  • Stu- 似乎我没有在主应用程序中包含 Cairngorm Services 对象来实例化它 - 就像 一旦我这样做了,一切都很好。感谢您的所有帮助。
【解决方案2】:

我在下面附上了 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>

【讨论】:

  • @Michael:请将您的 web.xml 放入问题本身。 Stack Overflow 系统不能很好地用作线程消息传递平台,因为答案没有按时间顺序出现。例如:对我来说,这个“答案”出现在我自己的上方,所以对话的“答案”都混在一起了。 (这是设计使然。)
  • 将 web.xml 添加到主要问题。
  • 酷。然后你可以删除这个答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
相关资源
最近更新 更多