<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>&#8235;שלמה שוורץ - ארכיטקט ומפתח תוכנה&#187; Java/J2EE, FLEX, SAP Portal, JBoss, Spring, Hibernate&#8236;</title>	<atom:link href="http://www.j2ee.co.il/tag/actionscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.j2ee.co.il</link>
	<description>&#8235;מערכות Java, J2EE, FLEX, ActionScript, SAP, C++, C#, Oracle&#8236;</description>	<lastBuildDate>Tue, 06 Dec 2011 09:46:35 +0000</lastBuildDate>
	<language>he</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>&#8235;העברת טופס לXML מAdobe Flex ActionScript3 לJava ובחזרה&#8236;</title>		<link>http://www.j2ee.co.il/%d7%94%d7%a2%d7%91%d7%a8%d7%aa-%d7%98%d7%95%d7%a4%d7%a1-%d7%9cxml-%d7%9eadobe-flex-actionscript3-%d7%9cjava-%d7%95%d7%91%d7%97%d7%96%d7%a8%d7%94/</link>
		<comments>http://www.j2ee.co.il/%d7%94%d7%a2%d7%91%d7%a8%d7%aa-%d7%98%d7%95%d7%a4%d7%a1-%d7%9cxml-%d7%9eadobe-flex-actionscript3-%d7%9cjava-%d7%95%d7%91%d7%97%d7%96%d7%a8%d7%94/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 20:10:50 +0000</pubDate>
		<dc:creator>&#8235;admin&#8236;</dc:creator>				<category><![CDATA[כללי]]></category>
		<category><![CDATA[מאמרים טכנולוגיים]]></category>
		<category><![CDATA[פרויקטי קוד פתוח שפיתחתי]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Bean]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Web Service]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[יועץ]]></category>
		<category><![CDATA[מתכנת]]></category>
		<category><![CDATA[עצמאי]]></category>
		<category><![CDATA[פרילנסר]]></category>

		<guid isPermaLink="false">http://www.shefertech.com/?p=97</guid>
		<description><![CDATA[&#8235;כמתכנת FLEX פרילנסר עצמאי, מצאתי מקרים בהם הלקוח לא עובד בFramework מסודר לתקשורת Client-Server. במקרים כאלה לעיתים יש צורך לעשות Serialize לטופס ולהפוך אותו לפורמט גנרי כמו XML על מנת לשלוח אותו לשרת כלשהו (למשל J2EE Server) ע&#34;י פרוטוקול כמו HTTP או SOAP Web Service. הנה פונקציה פשוטה שכתבתי שלוקחת טופס FLEX, מבצעת עליו סריקה [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>כמתכנת FLEX פרילנסר עצמאי, מצאתי מקרים בהם הלקוח לא עובד בFramework מסודר לתקשורת Client-Server. במקרים כאלה לעיתים יש צורך לעשות Serialize לטופס ולהפוך אותו לפורמט גנרי כמו XML על מנת לשלוח אותו לשרת כלשהו (למשל J2EE Server) ע&quot;י פרוטוקול כמו HTTP או SOAP Web Service. הנה פונקציה פשוטה שכתבתי שלוקחת טופס FLEX, מבצעת עליו סריקה רקורסיבית ושולפת את כל השדות שלו (TextInput) ומחזירה XML עם רשימת השדות והערכים שלהם.<br />
כמו כן מצורף קוד בג'אווה שלוקח XML כזה והופך אותו לJava Bean ובמידה ובBean יש properties תואמים הם יקבלו את ערכי השדות. יש גם פונקציה הפוכה שלוקחת XML וממלאת את השדות בטופס FLEX.</p>
<p>יש להוסיף את הספריות האלה לקוד:</p>
<pre class="brush: as3;">
	import flash.utils.Dictionary;
	import mx.controls.TextInput;
	import mx.core.Container;
</pre>
<p>הנה הפונקציה (למעשה שתי פונקציות) שלוקחת טופס ומחזירה XML:</p>
<pre class="brush: as3;">
		public static function viewToXml(className:String, view:Container):String{
			var xml:XML = &lt;bean class={className}&gt;&lt;/bean&gt;;
			var xmlFinal:XML = addControlsToXml(xml, view);
			return '&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;' + xmlFinal;
		}

		private static function addControlsToXml(xml:XML, view:Container):XML{
			var controls:Array = view.getChildren();
			for (var i:int; i&lt;controls.length; i++){
				if (controls[i] is TextInput){
					var component:TextInput = controls[i] as TextInput;
					var child:XML = &lt;property name={component.id}&gt;{component.text}&lt;/property&gt;;
					xml.appendChild(child);
				}
				if (controls[i] is Container){
					addControlsToXml(xml, controls[i] as Container);
				}
			}
			return xml;
		}
</pre>
<p>והפונקציה שמקבלת XML וממלאת את הטופס בהתאם:</p>
<pre class="brush: as3;">
		private static function xmlToView(props:Dictionary, view:Container):void{
			var controls:Array = view.getChildren();
			for (var i:int; i&lt;controls.length; i++){
				if (controls[i] is TextInput){
					var component:TextInput = controls[i] as TextInput;
					if (props[component.id] != null){
						component.text = props[component.id];
					}
				}
				if (controls[i] is Container){
					xmlToView(props, controls[i] as Container);
				}
			}
		}
</pre>
<p>ועכשיו לקוד בג'אווה. תצטרכו להוסיף את הספריות הבאות:</p>
<pre class="brush: java;">
import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
</pre>
<p>קבלת XML והפיכתו לJava Bean:</p>
<pre class="brush: java;">
	public static Object xmlToBean(String xmlStr){
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = null;
		try {
			documentBuilder = documentBuilderFactory.newDocumentBuilder();
			Document doc = documentBuilder.parse(new ByteArrayInputStream(xmlStr.getBytes(&quot;UTF-8&quot;)));
			XPath xpath = XPathFactory.newInstance().newXPath();
			Node bean = (Node)xpath.evaluate(&quot;//bean&quot;, doc, XPathConstants.NODE);
			if (bean != null){
				NamedNodeMap attributes = bean.getAttributes();
				Node cls = attributes.getNamedItem(&quot;class&quot;);
				String clsName = cls.getNodeValue();
				Object obj = Class.forName(clsName).newInstance();
				NodeList props = (NodeList)xpath.evaluate(&quot;//property&quot;, doc, XPathConstants.NODESET);
				Class cl = obj.getClass();
				for (int i=0; i&lt;props.getLength(); i++){
					String propName = props.item(i).getAttributes().getNamedItem(&quot;name&quot;).getNodeValue();
					String propValue = props.item(i).getTextContent();
					String ch = propName.substring(0, 1).toUpperCase();
					String methodName = &quot;set&quot; + ch + propName.substring(1);
					Method[] methods = cl.getMethods();
					for (Method method : methods){
						if (method.getName().equals(methodName)){
							Class[] paramTypes = method.getParameterTypes();
							for (Class param : paramTypes){
								if (param.getName().equals(&quot;java.lang.String&quot;)){
									method.invoke(obj, propValue);
								}
								else if(param.getName().equals(&quot;int&quot;)){
									method.invoke(obj, Integer.valueOf(propValue));
								}
								else if(param.getName().equals(&quot;long&quot;)){
									method.invoke(obj, Long.valueOf(propValue));
								}
							}
						}
					}
				}
				return obj;
			}
		} catch (Exception e) {
			log.error(e);
		}
		return null;
	}
</pre>
<p>והחלק האחרון: לקחת Java Bean ולהפוך אותו לXML:</p>
<pre class="brush: java;">
	public static String beanToXml(Object obj){
			DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder documentBuilder = null;
			try {
				documentBuilder = documentBuilderFactory.newDocumentBuilder();
			} catch (ParserConfigurationException e) {
				log.error(e);
			}
			Document doc = documentBuilder.newDocument();
			Element rootElement = doc.createElement(&quot;bean&quot;);
			rootElement.setAttribute(&quot;class&quot;, obj.getClass().getName());
			Method[] getters = obj.getClass().getMethods();
			for (Method getter : getters){
					if (getter.getName().indexOf(&quot;get&quot;) == 0)
					if (getter.getParameterTypes().length == 0)
					if (!getter.getName().equals(&quot;getClass&quot;)){
						StringBuffer prop = new StringBuffer(getter.getName().substring(3));
						String ch = prop.substring(0, 1).toLowerCase();
						prop.replace(0, 1, ch);

						Element propElement = doc.createElement(&quot;property&quot;);
						propElement.setAttribute(&quot;name&quot;, prop.toString());
						try {
							propElement.setTextContent(getter.invoke(obj).toString());
						} catch (Exception e) {
							e.printStackTrace();
						}
						rootElement.appendChild(propElement);
					}
			}
			doc.appendChild(rootElement);

			StringWriter stw = new StringWriter();
            Transformer serializer;
			try {
				serializer = TransformerFactory.newInstance().newTransformer();
				serializer.transform(new DOMSource(doc), new StreamResult(stw));
			} catch (Exception e) {
				log.error(e);
			}
            return stw.toString();
	}
</pre>
</div>]]></content:encoded>			<wfw:commentRss>http://www.j2ee.co.il/%d7%94%d7%a2%d7%91%d7%a8%d7%aa-%d7%98%d7%95%d7%a4%d7%a1-%d7%9cxml-%d7%9eadobe-flex-actionscript3-%d7%9cjava-%d7%95%d7%91%d7%97%d7%96%d7%a8%d7%94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8235;אודות שלמה שוורץ&#8236;</title>		<link>http://www.j2ee.co.il/%d7%90%d7%95%d7%93%d7%95%d7%aa-%d7%a9%d7%9c%d7%9e%d7%94-%d7%a9%d7%95%d7%95%d7%a8%d7%a5/</link>
		<comments>http://www.j2ee.co.il/%d7%90%d7%95%d7%93%d7%95%d7%aa-%d7%a9%d7%9c%d7%9e%d7%94-%d7%a9%d7%95%d7%95%d7%a8%d7%a5/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 19:25:35 +0000</pubDate>
		<dc:creator>&#8235;admin&#8236;</dc:creator>				<category><![CDATA[כללי]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[FLEX]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[NetWeaver]]></category>
		<category><![CDATA[Portal]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[אודות]]></category>
		<category><![CDATA[ארכיטקט]]></category>
		<category><![CDATA[ג'אווה]]></category>
		<category><![CDATA[יועץ]]></category>
		<category><![CDATA[מפתח]]></category>
		<category><![CDATA[מתכנת]]></category>
		<category><![CDATA[סאפ]]></category>
		<category><![CDATA[עצמאי]]></category>
		<category><![CDATA[פרילנסר]]></category>
		<category><![CDATA[שלמה שוורץ]]></category>

		<guid isPermaLink="false">http://d26156.u27.oyo.co.il/?p=8</guid>
		<description><![CDATA[&#8235;בגיל 10 אבא שלי הביא הביתה את המחשב הראשון שלנו. זה היה אפל 2 עם מסך CRT שחור לבן (ירוק ליתר דיוק). למדתי לתכנת עליו בביסיק ומאז היה לי ברור שבעתיד אעסוק בתחום. בגיל התיכון התחלתי לתכנת ברצינות, בהתחלה בפסקל ואחר כך בC ובC++. היה זה בגיל 16 שמכרתי את התוכנה הראשונה שלי: פיתחתי תוכנת [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p><img class="size-full wp-image-46 alignright" title="shlomo_schwarcz" src="http://www.shefertech.com/wp-content/uploads/2009/06/shlomo_schwarcz1.jpg" alt="shlomo_schwarcz" /></p>
<p>בגיל 10 אבא שלי הביא הביתה את המחשב הראשון שלנו. זה היה אפל 2 עם מסך CRT שחור לבן (ירוק ליתר דיוק). למדתי לתכנת עליו בביסיק ומאז היה לי ברור שבעתיד אעסוק בתחום. בגיל התיכון התחלתי לתכנת ברצינות, בהתחלה בפסקל ואחר כך בC ובC++. היה זה בגיל 16 שמכרתי את התוכנה הראשונה שלי: פיתחתי תוכנת ניהול עבור חברת הובלות קטנה. הקוד נכתב בC על קומפיילר של בורלנד לwindows. הממשק נכתב בWIN16 API ורץ על Windows 3.11. האמצעים היו פרימיטיבים: ברוב הבתים לא היה אינטרנט נגיש ואת רוב התיכנות נאלצתי ללמוד מכמה ספרים ומקבצי הHELP שהגיעו עם הקומפיילר. לא ידעתי מה זה דאטהבייס וכל המידע נשמר בקבצי ASCII על הדיסק. התוכנה השתמשה ברשימות מקושרות ועצים בינארים כדי לאחסן את הרשומות בזיכרון וכל זאת על מחשב 486 מוגבל יחסית. אבל זה עבד, ואפילו עבד טוב.</p>
<p>לאחר הצבא התחלתי לעבוד בחברת סטראטאפ קטנה בשם טופטיר. זמן קצר לאחר מכן החברה נמכרה לSAP ב400 מליון דולר והמשכתי לעבוד בסאפ למעלה מ4 שנים. כשעזבתי את סאפ, הקמתי עסק משלי בשם &quot;שפר מערכות&quot; (ומכאן השם של האתר הזה) ועבדתי כמתכנת ויועץ פרילנסר עצמאי עבור ארגונים שונים. בין לקוחותיי: בתי הזיקוק, פז, הנוער העובד והלומד, GigaSpaces, מכללת אינטרביט, ועוד. לאחר מכן הצטרפתי לחברת דנשיר מערכות על מנת להקים את חטיבת הJava והNetWeaver ועמדתי בראש הקבוצה למעלה משנה כשאנחנו מבצעים פרוייקטים עבור חברות שונות: נטפים, בתי זיקוק, אוניברסיטת חיפה, מירס, תעשייה אווירית, CNW ועוד. התחנה הבאה היתה חברת אינפורמטיקה שם מלאתי תפקיד של מתכנת בכיר &#8211; Principle Software Engineer.</p>
<p>ב2010 הקמתי חברת <a href="http://megasoft.co.il">מגהסופט </a>ומאז אני מכהן כמנכ&quot;ל וכמובן ממשיך לפתח ולכתוב קוד במסגרת החברה. <a href="http://megasoft.co.il">MegaSoft </a>עוסקת בפיתוח עבור ארגונים, חברות הי-טק וסטארטאפים במגוון תחומים ובעיקר בג'אווה, Flex, מובייל ופלטפורמות קוד פתוח.</p>
<p>חוץ מזה אני תמיד מחפש את ההרפתקה הבאה ואשמח לקבל פניות, הצעות, הערות והארות.</p>
</div>]]></content:encoded>			<wfw:commentRss>http://www.j2ee.co.il/%d7%90%d7%95%d7%93%d7%95%d7%aa-%d7%a9%d7%9c%d7%9e%d7%94-%d7%a9%d7%95%d7%95%d7%a8%d7%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

