`
jblzdg
  • 浏览: 31831 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java对象自动生成Flex对象

    博客分类:
  • Flex
阅读更多

    在Flex 开发过程中,经常遇到 java 对象转化为 Flex 对象的情形,手动编码,费时费力,枯燥无味,并且经常出现拼写错误,可谓事倍功半。所以就自己写了个自动生成类,发布在这里,请大家拍砖交流。呵呵。

 

 

为了开发简单,它遵循以下规则:

  •   Flex的包名和要转化的 java 类包名一直
  •   Flex的类名和要转化的 java 类名一直

使用:
  1. as.properties 文件(和GeneratorASFromJava在同一目录下)配置 Flex 文件的输出目录,只有一个属性。例如

outDir= d : /as

 

  1. 调用 GeneratorASFromJava  ,传入参数:java.util.List<class>   。使用示例:
public static void main(String[] s) {

List<Class> l =new java.util.ArrayList<Class>();

l.add(SecuUser.class);

l.add(SecuRole.class);

l.add(SecuResource.class);

GeneratorASFromJava g = new GeneratorASFromJava(l);

g.generate();

}
 

 

 

 

源文件解析:

 

AsObj.java

根据java class  并参考 AsDataTypesUtils 回对应Flex  类源码,就是一串文本。

注意:

取java类的所有属性时,记得将Object的属性排除掉。

BeanInfo beanInfo = Introspector.getBeanInfo(clazz,Object.class );//意思是不分析clazz的父类Object

否则生成的Flex类会有下面这个属性:

 

public var class:java.lang.Class;

 

 

GeneratorASFromJava

调用 AsObj生成 Flex 类并输出到 as.properties 配置的目录中,并打开这个目录。

 

 

附上源代码

 

 

 AsObj :
package cn.com.zdg.flex.util;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map;

public class AsObj {

	private String asPackageName;
	private String asClassName;
	private static String Field_Des = "public var ";
	private Map<String, String> map;

	private static String Blank = " ";

	static String Enter = "\r";
	private static String Tab = "\t";
	private static String BraceFirstEnter = "{" + Enter;
	private static String BraceLastEnter = "}" + Enter;
	private static String BraceLast = "}";

	public AsObj(Class clazz) {
		this.asClassName = clazz.getSimpleName();
		this.asPackageName = clazz.getPackage().getName();
		this.map = getFieldMap(clazz);
		

	}

	public AsObj(String asPackageName, String asClassName,
			Map<String, String> map) {
		this.asPackageName = asPackageName;
		this.asClassName = asClassName;
		this.map = map;

	}

	public String getAsPackageName() {
		return asPackageName;
	}

	public void setAsPackageName(String asPackageName) {
		this.asPackageName = asPackageName;
	}

	public String getAsClassName() {
		return asClassName;
	}

	public void setAsClassName(String asClassName) {
		this.asClassName = asClassName;
	}

	public Map<String, String> getMap() {
		return map;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	public String getAsObjString() {
		StringBuilder sb = new StringBuilder();
		// package
		sb.append("package ").append(this.asPackageName)
				.append(BraceFirstEnter);
		// Biandable
		sb.append(Tab).append("[Bindable]").append(Enter);
		//Remo
		sb.append(Tab).append("[RemoteClass(alias=\"").append(this.asPackageName).append(".").append(this.asClassName).append("\")]").append(Enter);
		// class
		sb.append(Tab).append("public class ").append(this.asClassName).append(
				BraceFirstEnter);
		// fields
		for (Map.Entry<String, String> entry : map.entrySet()) {
			sb.append(Tab).append(Tab).append(Field_Des).append(entry.getKey())
					.append(":").append(entry.getValue()).append(";").append(
							Enter);
		}
		// constructor
		sb.append(Tab).append(Tab).append("public function ").append(
				this.asClassName).append("()").append(BraceFirstEnter).append(
				Enter).append(Tab).append(Tab).append(BraceLastEnter);
		// Brace last
		sb.append(Tab).append(BraceLastEnter);
		sb.append(BraceLast);

		return sb.toString();
	}

	public static void main(String[] ar) {
		Map<String, String> map = new HashMap<String, String>();
		for (int i = 0; i < 10; i++) {
			map.put("F1" + i, "Type" + i);
		}

		AsObj as = new AsObj("cn.com.zdg.as", "BruceTest", map);
		System.out.println(as.getAsObjString());
	}

	private Map<String, String> getFieldMap(Class clazz) {
		Map<String, String> map = new HashMap<String, String>();
		try {
			BeanInfo beanInfo = Introspector.getBeanInfo(clazz,Object.class);

			PropertyDescriptor[] pro = beanInfo.getPropertyDescriptors();
			for (PropertyDescriptor p : pro) {
//				if (p.getName().equals("class")) {
//					continue;
//					
//				}
				map.put(p.getName(),AsDataTypesUtils.getPreferredAsType( p.getPropertyType().getName()));
			}
			// for (int i = 0; i < pro.length; i++) {
			// PropertyDescriptor p = pro[i];
			// System.out.println("Name: " + p.getName() + "  , type: "
			// + p.getPropertyType().getName());
			//				
			// }
		} catch (IntrospectionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return map;

	}
}
 
GeneratorASFromJava :
package cn.com.zdg.flex.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.net.URL;
import java.util.List;
import java.util.Properties;

import cn.com.zdg.entity.security.SecuResource;
import cn.com.zdg.entity.security.SecuRole;
import cn.com.zdg.entity.security.SecuUser;

public class GeneratorASFromJava {
	private List<Class> javaclassList;
	private File destdir;

	private String baseDir;

	// public GeneratorASFromJava(Class) {
	//
	// }
	public GeneratorASFromJava() {
		
	}

	public GeneratorASFromJava(List<Class> javaclassList) {
		this.javaclassList = javaclassList;
		if (this.javaclassList==null||this.javaclassList.size()==0) {
			throw new IllegalStateException("Convert Class can  not be null");
		}
		
		baseDir = this.getBaseDir();
 
	}
	private String getBaseDir() {
		String baseDir = null;
		InputStream input = null;
		try {
			String packageName = this.getClass().getPackage().getName();
			packageName = packageName.replace(".", File.separator);
			URL url = GeneratorASFromJava.class.getClassLoader().getResource(
					packageName + File.separator + "as.properties");

			Properties p = new Properties();
			input = url.openStream();
			p.load(input);
			baseDir = p.get("outDir").toString();
			File f = new File(baseDir);
			if (!f.exists()) {
				f.mkdirs();
			}
		} catch (IOException e) {
			e.printStackTrace();

		} finally {
			try {
				if (input != null) {
					input.close();
				}

			} catch (IOException e) {

				e.printStackTrace();
			}
		}

		return baseDir;

	}

	public void generate() {
		
		Writer writer = null;
		try {
			for (Class javaclass : javaclassList) {
				AsObj as = new AsObj(javaclass);
				File f = new File(getDestFile(javaclass), javaclass
						.getSimpleName()
						+ ".as");
				writer = new FileWriter(f);

				writer.write(as.getAsObjString());
				writer.flush();
			}
			
			Runtime.getRuntime().exec("cmd.exe /c start " + baseDir);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	
			
		
	}

	private File getDestFile(Class javaclass) {
		String dir = javaclass.getPackage().getName().replace(".",
				File.separator);
		File f = new File(baseDir, dir);
		if (!f.exists()) {
			f.mkdirs();
		}
		
		return f;
	}

	
	public static void main(String[] s) {
		List<Class> l =new java.util.ArrayList<Class>();
		l.add(SecuUser.class);
		l.add(SecuRole.class);
		l.add(SecuResource.class);
		
		GeneratorASFromJava g = new GeneratorASFromJava(l);
	
		g.generate();
	}
	

}
 
AsDataTypesUtils 
package cn.com.zdg.flex.util;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 描述java类型和as类型对应关系
 * 
 */
public class AsDataTypesUtils {

	private final static Map<String, String> preferredAsTypeForJavaType = new HashMap<String, String>();

	public static String getPreferredAsType(String javaType) {
		String result = preferredAsTypeForJavaType.get(javaType);
		if (result == null) {
			result = javaType;
		}
		return result;
	}

	

	static {

		preferredAsTypeForJavaType.put("java.lang.Short", "Number");
		preferredAsTypeForJavaType.put("short", "Number");
		preferredAsTypeForJavaType.put("java.lang.Integer", "Number");
		preferredAsTypeForJavaType.put("int", "Number");
		preferredAsTypeForJavaType.put("java.lang.Long", "Number");
		preferredAsTypeForJavaType.put("long", "Number");
		preferredAsTypeForJavaType.put("java.lang.Float", "Number");
		preferredAsTypeForJavaType.put("float", "Number");
		preferredAsTypeForJavaType.put("java.lang.Double", "Number");
		preferredAsTypeForJavaType.put("float", "Number");
		preferredAsTypeForJavaType.put("java.math.BigDecimal", "Number");
		preferredAsTypeForJavaType.put("java.lang.Byte", "Number");
		preferredAsTypeForJavaType.put("byte", "Number");

		preferredAsTypeForJavaType.put("java.lang.Boolean", "Boolean");
		preferredAsTypeForJavaType.put("boolen", "Boolean");
		preferredAsTypeForJavaType.put(boolean.class.getName(), "Boolean");
		

		preferredAsTypeForJavaType.put("char", "String");
		preferredAsTypeForJavaType.put("char[]", "String");
		preferredAsTypeForJavaType.put("java.lang.String", "String");
		preferredAsTypeForJavaType.put("java.sql.Clob", "String");

		preferredAsTypeForJavaType.put("byte[]", "flash.utils.ByteArray");
		preferredAsTypeForJavaType.put("java.sql.Blob", "flash.utils.ByteArray");
		preferredAsTypeForJavaType.put("java.sql.Array", "Array");
		preferredAsTypeForJavaType.put("java.lang.reflect.Array", "Array");
		preferredAsTypeForJavaType.put("java.util.Collection", "mx.collections.ArrayCollection");
		preferredAsTypeForJavaType.put("java.util.List", "mx.collections.ArrayCollection");
		preferredAsTypeForJavaType.put("java.util.ArrayList", "mx.collections.ArrayCollection");
		preferredAsTypeForJavaType.put("java.util.ArrayList", "mx.collections.ArrayCollection");
		
		preferredAsTypeForJavaType.put("java.util.Set", "Object");
		preferredAsTypeForJavaType.put("java.util.HashSet", "Object");
		preferredAsTypeForJavaType.put("java.util.Map", "Object");
		preferredAsTypeForJavaType.put("java.util.HashMap", "Object");

		preferredAsTypeForJavaType.put("java.sql.Date", "Date");
		preferredAsTypeForJavaType.put("java.sql.Time", "Date");
		preferredAsTypeForJavaType.put("java.util.Date", "Date");
		preferredAsTypeForJavaType.put("java.sql.Timestamp", "Date");

	}

	public static void main(String[] args) {
		String bb = AsDataTypesUtils.getPreferredAsType(List.class.getName());
		System.out.println(bb);
		
	}

}
 

 

 

 


分享到:
评论

相关推荐

    flex flex和 java交互

    Java则是一种广泛使用的面向对象的编程语言,尤其在企业级应用开发中占据重要地位。 标题"flex 和 java交互"指出了一个关键的技术融合,即Flex与Java的整合,允许Flex前端与Java后端进行数据和功能的通信。这种交互...

    Flex如何使用JAVA对象连接SQLServer数据库.rar

    在Flex Builder或IntelliJ IDEA等IDE中,可以使用向导自动生成服务代码。例如: ```mxml endpoint="http://{server.name}:{server.port}/flex/services/SQLServerService" namespace="{your_namespace}"&gt; ...

    Flex + LCDS + Java 利用Eclipse Plugin开发Flex入门教程

    LCDS提供了许多高级功能,如Java对象到Flex对象的映射,RTMP协议支持,代理服务,以及服务端PDF生成等。虽然LCDS是收费产品,但免费版本也能满足基本需求。除此之外,还有其他数据服务解决方案,如AMFPHP,它们提供...

    flex lcds java配置

    LCDS提供了与Flex客户端之间的高效通信机制,包括Java对象到Flex对象的映射、实时消息协议RTMP、Java类方法调用、代理服务以及服务器端PDF生成等功能。虽然LCDS是付费产品,但免费版本也可使用,只是可能缺少对多CPU...

    通过MyEclpise整合JAVA与FLEX进行通讯(通过将JAVA工程加到FLEX工程中)

    这将自动生成相应的ACTIONSCRIPT类,用于调用JAVA服务。 5. **编写ACTIONSCRIPT代码**:在ACTIONSCRIPT代码中,你可以直接调用这些生成的类,通过AMF或HTTP请求与JAVA服务通信。当JAVA服务返回数据时,ACTIONSCRIPT...

    Flex + LCDS + Java 入门教程

    LCDS,原名FDS(Flex Data Service),是Adobe提供的基于Java后端的数据服务,能够方便地将Java对象映射到Flex对象,支持RTMP协议,以及服务器端PDF生成等高级功能。 **1. Flex简介** Flex是一个基于MXML和...

    Flex + LCDS + Java

    它能够将Java对象映射到Flex对象,包括调用Java类的方法,以及支持RTMP协议。LCDS还包括代理服务、PDF生成等高级特性。虽然LCDS是付费产品,但也有免费版本,不过可能限制了多CPU支持。 Java,作为一种广泛使用的...

    基于遗传算法的自动排课系统flex+java

    《基于遗传算法的自动排课系统:Flex+Java的创新实践》 自动排课系统是教育信息化领域的重要组成部分,它能够高效地解决学校课程安排的复杂问题。本系统的开发运用了遗传算法,这是一种模拟生物进化过程的优化算法...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    尽管现有的 EmployeeMgmt 应用程序已经有了 Façade 接口,但这个接口是暴露给 Servlet 使用的,最好能再为 Flex 定义另一个接口 FlexService,并隐藏 Java 语言的特定对象(如 清单 1 所示): 清单 1. Flex...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    为了能完成自动生成 RemoteObject 对象,我编写了一个 Java2ActionScript 的 Ant 任务来自动转换 FlexService 接口以及相关的所有 JavaBean。JavaInterface2RemoteObjectTask 完成一个 Java 接口对象到 RemoteObject...

    FLex与Java交互必备blazeds

    使用Blazeds,开发者可以在Flex界面中直接操作Java对象,比如EJB、Spring Bean或Hibernate实体,无需手动编写复杂的网络通信代码。此外,Blazeds还集成了Spring框架,使得Java服务的集成更加方便。 在实际开发中,...

    Flex与Java数据交互

    这个代理类可以通过Flex的WebService或RemoteObject组件自动生成,通过指定服务的URL和方法名来完成。 5. **调用Java服务**:在Flex应用中,你可以像调用本地方法一样调用远程的Java服务。服务调用的结果会自动转换...

    FLEX+Java+BlaseDS 整合 OA系统

    结合Hibernate,一个强大的对象关系映射(ORM)框架,可以简化数据库操作,使得Java代码更加简洁,减少SQL的编写工作。 Spring框架作为企业级应用的基石,提供了依赖注入(DI)和面向切面编程(AOP)等核心功能,...

    Flex Blazeds入门教程

    LCDS支持实时消息传输、对象映射、远程方法调用、PDF生成等功能,简化了Flex与后端系统的交互。虽然LCDS是商业产品,但在个人和小规模项目中有免费版本可用。 3. **Blazeds**:Blazeds是Adobe从LCDS中剥离出的开源...

    Flex类图和与Java交互时类型转换对照

    在Flex与Java交互时,类型转换是自动进行的,由AMF处理。然而,有些特殊情况需要注意: - **自定义类的序列化**:如果Flex客户端使用了自定义类,那么Java服务器端也需要有对应的类定义,否则AMF无法正确解析。 - *...

    flex显示数据库数据

    2. 创建Java项目:编写Java类,使用JDBC连接到MySQL数据库,执行查询,并将结果集转换为Java对象集合。 3. 配置BlazeDS:在Tomcat服务器中设置BlazeDS服务,定义所需的Remoting Destination,使Flex客户端能够调用...

    flex+java的整合,包含LCDS和BlazeDS等算中方式

    - 自动生成的Flex配置文件 - Flex编译后发布的文件(位于WebRoot) 4. **其他配置** - 可以通过项目属性进行更详细的设置。 - 如果使用BlazeDS,需要注意不要覆盖其创建的web.xml文件。 #### 五、总结 本文...

Global site tag (gtag.js) - Google Analytics