Spring blazeDS Integration destination not exists异常解决
环境:
在flex-servlet.xml中定义destination
这样在remoting-config.xml中就不需要定义destination了
测试
结果这时候报错,destination "premiumService" either does not exists....
原因是mxml编译时要根据remoting-config.xml来处理destination的定义,而我们把premiumService定义在了spring bean中,所以它根本就不知道premiumService的存在。取消掉remoting-config.xml的注释,再次对mxml进行编译(如修改后保存),在浏览器中清除缓存、刷新,OK,结果出来了。
注意在tomcat启动时又要把remoting-config.xml定义的destination注释掉,否则会出问题。或者干脆在其他地方建立一个文件专门用于mxml的编译。
- Spring blazeDS Integration 1.0.0 release
- blazeDS 3.2.0.3978
- jdk1.6.0_06
- flex sdk 3.2.0
- flex builder 3
<?
xml version="1.0" encoding="UTF-8"
?>
< web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xmlns ="http://java.sun.com/xml/ns/javaee" xmlns:web ="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id ="WebApp_ID" version ="2.5" >
< display-name > flex_server </ display-name >
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value > /WEB-INF/context-*.xml </ param-value >
</ context-param >
< listener >
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< servlet >
< servlet-name > flex </ servlet-name >
< servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > flex </ servlet-name >
< url-pattern > /messagebroker/* </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > index.html </ welcome-file >
</ welcome-file-list >
</ web-app >
< web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xmlns ="http://java.sun.com/xml/ns/javaee" xmlns:web ="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id ="WebApp_ID" version ="2.5" >
< display-name > flex_server </ display-name >
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value > /WEB-INF/context-*.xml </ param-value >
</ context-param >
< listener >
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< servlet >
< servlet-name > flex </ servlet-name >
< servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > flex </ servlet-name >
< url-pattern > /messagebroker/* </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > index.html </ welcome-file >
</ welcome-file-list >
</ web-app >
在flex-servlet.xml中定义destination
<?
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:context ="http://www.springframework.org/schema/context"
xmlns:tx ="http://www.springframework.org/schema/tx" xmlns:flex ="http://www.springframework.org/schema/flex"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd" >
< flex:message-broker />
<!-- premiumService是普通的业务bean -->
< flex:remoting-destination ref ="premiumService" />
</ beans >
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:context ="http://www.springframework.org/schema/context"
xmlns:tx ="http://www.springframework.org/schema/tx" xmlns:flex ="http://www.springframework.org/schema/flex"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd" >
< flex:message-broker />
<!-- premiumService是普通的业务bean -->
< flex:remoting-destination ref ="premiumService" />
</ beans >
这样在remoting-config.xml中就不需要定义destination了
<?
xml version="1.0" encoding="UTF-8"
?>
< service id ="remoting-service"
class ="flex.messaging.services.RemotingService" >
< adapters >
< adapter-definition id ="java-object" class ="flex.messaging.services.remoting.adapters.JavaAdapter" default ="true" />
</ adapters >
< default-channels >
< channel ref ="my-amf" />
</ default-channels >
<!-- 注释掉,否则启动会报错或出现其他问题
<destination id="premiumService">
<properties>
<source>org.hag.flex.service.PremiumService</source>
</properties>
</destination>
-->
</ service >
< service id ="remoting-service"
class ="flex.messaging.services.RemotingService" >
< adapters >
< adapter-definition id ="java-object" class ="flex.messaging.services.remoting.adapters.JavaAdapter" default ="true" />
</ adapters >
< default-channels >
< channel ref ="my-amf" />
</ default-channels >
<!-- 注释掉,否则启动会报错或出现其他问题
<destination id="premiumService">
<properties>
<source>org.hag.flex.service.PremiumService</source>
</properties>
</destination>
-->
</ service >
测试
<?
xml version="1.0" encoding="utf-8"
?>
< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml"
creationComplete ="premiumService.getPremiumList()" >
< mx:Script >
<![CDATA[
<!-- 省略import -->
private function resultHandler(evt:ResultHandler):void
{
Alert.show(evt.result.toString());
}
private function faultHandler(evt:FaultHandler):void
{
Alert.show(evt.fault.toString());
}
]]>
</ mx:Script >
< mx:RemoteObject id ="premiumService" ref ="premiumService"
result ="resultHandler(event)" fault ="faultHandler(event)" />
</ mx:Application >
< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml"
creationComplete ="premiumService.getPremiumList()" >
< mx:Script >
<![CDATA[
<!-- 省略import -->
private function resultHandler(evt:ResultHandler):void
{
Alert.show(evt.result.toString());
}
private function faultHandler(evt:FaultHandler):void
{
Alert.show(evt.fault.toString());
}
]]>
</ mx:Script >
< mx:RemoteObject id ="premiumService" ref ="premiumService"
result ="resultHandler(event)" fault ="faultHandler(event)" />
</ mx:Application >
结果这时候报错,destination "premiumService" either does not exists....
原因是mxml编译时要根据remoting-config.xml来处理destination的定义,而我们把premiumService定义在了spring bean中,所以它根本就不知道premiumService的存在。取消掉remoting-config.xml的注释,再次对mxml进行编译(如修改后保存),在浏览器中清除缓存、刷新,OK,结果出来了。
注意在tomcat启动时又要把remoting-config.xml定义的destination注释掉,否则会出问题。或者干脆在其他地方建立一个文件专门用于mxml的编译。