Pergunta

Parece que estou recebendo o seguinte erro quando tento acessar uma classe Java remoto (na Primavera / BlazeDS) da aplicação Flex / Cairngorm. Estou enlouquecendo no momento tentando ver o que está errado - qualquer ajuda seria muito apreciada. - Obrigado 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()**

Todos os meus arquivos de configuração estão abaixo:

Cairngorm - BusinessDelegate.as

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

Cairngorm - Services.mxml

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

Primavera / BlazeDS - application-config.xml

flex:remote-service ref="remotecomponentService" 

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

Primavera / 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"

O web.xml também contém referências Primavera - veja abaixo

<?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>
Foi útil?

Solução

Podemos ver o seu web.xml também por favor? Estou surpreso de ver a palavra "Primavera" na URL do terminal. Meus endpoints sempre parecia

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

Ex .: Eu acho que sua services-config.xml deve olhar mais como este.

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

Também gostaria de sugerir não codificar o URL de ponto final tanto. Basta ir com

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

Update:

OK, então seu web.xml parece ok, assim como ter o spring em sua URL. O que eu não ver no seu arquivo de configuração do Spring (application-config.xml) é o mapeamento Primavera URL. Por exemplo, em meus arquivos de configuração Spring, além das definições de feijão, existe um mapeamento. Por exemplo:.

<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"    />

(Eu tenho um aplicativo que é baseado em Spring, e outro que usa BlazeDS, mas não ambos ... para que eu possa estar faltando alguma coisa. Dito isto, o que eu estou pedindo ainda deve ser válido. Em teoria. Mas levá-la com um grão de sal.)

Talvez alguma depuração alguns super básica está em ordem. você pode verificar para ver se as chamadas para o seu servidor estiver retornando HTTP 404 ou não em teses endpoints problema? Algumas maneiras de fazer isso:

  • Verifique os logs de acesso para GET /dashboard-server/spring/messagebroker/amf. Qual é o código de status HTTP para esses pedidos? (Free, fácil, há novas ferramentas.)
  • Se você estiver usando o Firefox como um navegador, adicione o Tamper dados plug-in. você não tem que mexer com os dados, mas mostra-lhe o que está sendo chamado, o que é retornado, e todos os cabeçalhos HTTP.
  • Use um completo na ferramenta protocolo sniffer orientada Flash / Flex, como Charles Web Debugging Proxy .

Será muito útil para reduzir o problema de saber se quando estes pedidos estão falhando nas comunicações empilhar.

Outras dicas

Anexei web.xml abaixo. Em termos da palavra "Primavera" - Eu estou usando os BlazrDS padrão / Primavera arquivo WAR integração que exige "spring" para estar lá. O bean id = "remotecomponentService" é efectivamente um bean Spring.

Você está dizendo que mesmo com os BlazeDS / Primavera WAR posso usar a sua solução acima?

O web.xml também contém referências Primavera - veja abaixo

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top