ActionScript Number(NaN) —> java(null) NaN —> null

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>

 

 

你可能感兴趣的:(java,spring,maven,Flex,actionscript)