0

我想使用 Spring BlazeDS 集成。

我是这样写的。

[web.xml]

<servlet>
    <servlet-name>flex</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>flex</servlet-name>
    <url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

[WEB-INF/classes/applicationContext.xml]

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:flex="http://www.springframework.org/schema/flex"
    xsi:schemaLocation="
            http://www.springframework.org/schema/flex
            http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


    <flex:message-broker/>

    <bean id="hogeService" class="hoge.HogeServiceImpl">
        <flex:remoting-destination />
    </bean>
</beans>

[WEB-INF/flex/services-config.xml]

<services-config>

    <services>
        <default-channels>
           <channel ref="my-amf"/>
        </default-channels>
    </services>


    <channels>

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

所以,我从这样的 Flex 应用程序中调用“hogeService”。

var ro:RemoteObject = new RemoteObject();
ro.destination = "hogeService";
ro.hoge(); // HogeServiceImpl class has "hoge" method with no arguments.

然后,我收到这样的错误消息。

[RPC Fault faultString="[MessagingError message='Destination 'hogeService' either does not exist or the destination has no channels defined (and the application does not define any default channels.)']" faultCode="InvokeFailed" faultDetail="メッセージ送信先への接続を確立できませんでした。"]

为什么我会收到此错误消息?请告诉我任何解决方案..

4

2 回答 2

2

确保您的 services-config.xml 也作为标志 compiler.services 传递给 flex 编译器(compc 或 mxmlc)。

或者,您可以让 RemoteObject 构建通道(然后将客户端和服务器配置完全解耦),如下所示:

var ro:RemoteObject = RemoteObject();
ro.endpoint = "http://{server.name}:{server.port}/{context.root}/messagebroker/amf"; // this internally constructs an AMFChannel or SecuredAMFChannel depending on the protocol
ro.hoge();
于 2011-01-24T10:37:10.720 回答
0

使用最新版本的 Spring BlazeDS 集成,您只需要在 Spring 调度程序中添加一些东西就可以正常工作,尽管我相信您仍然需要 Flex 本身的所有 services-config.xml 等。

<flex:message-broker>
  <flex:message-service default-channels="amf"/>
</flex:message-broker>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <value>
      /*=_messageBroker
    </value>
  </property>
</bean>
<bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter"/>
于 2011-01-24T17:07:07.583 回答