blazeds源码:
http://opensource.adobe.com/svn//opensource/blazeds/tags/4.0.0/modules/core/src/
http://flexblog.faratasystems.com/tag/blazeds
解决方法1,修改blazeds中的类NumberDecoder.java 和类NativeDecoder.java
附件中为已修改好的 Blazeds3.2d的包。
在Maven 中使用(spring-flex)框架,自动下载的 blazeds-core-3.2.0.3978.jar 同样也需要替换这两个类,附件中也提供了修改好的jar包,直接替换相应的文件夹中的jar包即可。
解决方法2:使用自定义类型编码器
package test.util.blazeds3;
import flex.messaging.io.amf.translator.ASTranslator;
public class NumberNaN2NullTypeMarshaller extends ASTranslator {
@Override
@SuppressWarnings("unchecked")
public Object convert(Object source, Class desiredClass) {
if (Number.class.isAssignableFrom(desiredClass)) {
double doubleValue = ((Number) source).doubleValue();
if (Double.isNaN(doubleValue)) {
return null;
}
}
return super.convert(source, desiredClass);
}
}
修改配置文件services-config.xml
<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"/> <properties> <serialization> <type-marshaller>test.util.blazeds3.NumberNaN2NullTypeMarshaller</type-marshaller> </serialization> </properties> </channel-definition>