<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2104415194242396962</id><updated>2011-10-10T13:10:43.073+03:00</updated><category term='jsp'/><category term='english dictionary words'/><category term='personal dictionary'/><category term='java'/><category term='english words'/><category term='Dictionary java Languages Italiano Italian English Inglese'/><title type='text'>aillusions</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-7942922890778697859</id><published>2010-10-23T02:35:00.009+03:00</published><updated>2010-10-23T03:18:37.534+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dictionary java Languages Italiano Italian English Inglese'/><title type='text'>New Dictionary Distribution Model</title><content type='html'>Now Dictionary versions are available via:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/aillusions/Dictionary/downloads"&gt;http://github.com/aillusions/Dictionary/downloads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First stable version is: Dictionary-0.3.2.zip&lt;br /&gt;&lt;br /&gt;You can download last version, unzip it to any location and use without having to bother about tracking of new versions: now Dictionary can update itself. &lt;br /&gt;&lt;br /&gt;Try to use Dictionary and enjoy its "open-source-ness" :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/downloads/aillusions/Dictionary/Dictionary-0.3.2.zip"&gt;http://github.com/downloads/aillusions/Dictionary/Dictionary-0.3.2.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Take a look into WiKi too: &lt;a href="http://github.com/aillusions/Dictionary/wiki"&gt;http://github.com/aillusions/Dictionary/wiki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/_A2LVSsaF3eo/TMIhbiH0NlI/AAAAAAAAANU/1sr05plxR0o/s320/Dictionary.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-7942922890778697859?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/7942922890778697859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=7942922890778697859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/7942922890778697859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/7942922890778697859'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2010/10/new-dictionary-distribution-model.html' title='New Dictionary Distribution Model'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/TMIhbiH0NlI/AAAAAAAAANU/1sr05plxR0o/s72-c/Dictionary.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-5870036172660179006</id><published>2010-05-31T21:48:00.006+03:00</published><updated>2010-05-31T21:58:34.832+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='personal dictionary'/><category scheme='http://www.blogger.com/atom/ns#' term='english words'/><title type='text'>Top Dictionary news</title><content type='html'>&lt;img src="http://3.bp.blogspot.com/_A2LVSsaF3eo/TAQEuXKnnDI/AAAAAAAAAMU/wxyUZ_pnZNM/s320/Dict.JPG" border="1" alt=""id="BLOGGER_PHOTO_ID_5477508241328413746" /&gt;&lt;br /&gt;&lt;br /&gt;Now small and smart.&lt;br /&gt;&lt;br /&gt;Enjoy everybody:&lt;br /&gt;&lt;br /&gt;http://fileshare.in.ua/3440430&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-5870036172660179006?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/5870036172660179006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=5870036172660179006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5870036172660179006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5870036172660179006'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2010/05/top-dictionary-news.html' title='Top Dictionary news'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/TAQEuXKnnDI/AAAAAAAAAMU/wxyUZ_pnZNM/s72-c/Dict.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-8873645776897510721</id><published>2010-01-11T00:11:00.006+02:00</published><updated>2010-01-11T01:01:47.627+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='english dictionary words'/><title type='text'>Top Dictionary Release</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_A2LVSsaF3eo/S0pb4XXPq2I/AAAAAAAAAMI/igngSMH35tw/s1600-h/screen.GIF"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_A2LVSsaF3eo/S0pb4XXPq2I/AAAAAAAAAMI/igngSMH35tw/s320/screen.GIF" alt="" id="BLOGGER_PHOTO_ID_5425249725023497058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not trendy just handy.&lt;br /&gt;You can download it from:&lt;br /&gt;&lt;br /&gt;http://fileshare.in.ua/3104402&lt;br /&gt;http://loadingbox.net/848&lt;br /&gt;http://turbobit.od.ua/9essjwqzvydl.html&lt;br /&gt;http://rapidshare.com/files/333387376/TopDictionary.zip.html&lt;br /&gt;&lt;br /&gt;Required Java 1.5&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-8873645776897510721?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/8873645776897510721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=8873645776897510721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8873645776897510721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8873645776897510721'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2010/01/top-dictionary-release.html' title='Top Dictionary Release'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_A2LVSsaF3eo/S0pb4XXPq2I/AAAAAAAAAMI/igngSMH35tw/s72-c/screen.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-3687003860189126840</id><published>2009-04-15T15:44:00.003+03:00</published><updated>2009-04-15T15:50:20.999+03:00</updated><title type='text'>Weblogic Message-Driven Beans</title><content type='html'>First attempt: one MDB&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package com;&lt;br /&gt;&lt;br /&gt;import javax.ejb.MessageDrivenBean;&lt;br /&gt;import javax.jms.MessageListener;&lt;br /&gt;import javax.jms.Message;&lt;br /&gt;import weblogic.ejb.GenericMessageDrivenBean;&lt;br /&gt;import weblogic.ejbgen.MessageDriven;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@MessageDriven(ejbName = "MyFirsMDB", destinationJndiName = "MyDefaultQueue", destinationType = "javax.jms.Queue")&lt;br /&gt;public class MyFirsMDB extends GenericMessageDrivenBean implements&lt;br /&gt;  MessageDrivenBean, MessageListener {&lt;br /&gt;&lt;br /&gt; private Long id = System.currentTimeMillis();&lt;br /&gt; &lt;br /&gt; public void onMessage(Message msg) {&lt;br /&gt;  try {&lt;br /&gt;   Thread.sleep(1000);&lt;br /&gt;   System.out.println("-&gt;" + id.toString() + " :"+ msg.getStringProperty("msg"));&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;-&gt;1239798602084 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602084 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602084 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602084 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602084 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798795659 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798602147 :My AA String Message.&lt;br /&gt;-&gt;1239798795659 :My AA String Message.&lt;br /&gt;-&gt;1239798602131 :My AA String Message.&lt;br /&gt;-&gt;1239798602084 :My AA String Message.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Next attempt: two MDB on one Destination (queue)&lt;br /&gt;Firs one:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package com;&lt;br /&gt;&lt;br /&gt;import javax.ejb.MessageDrivenBean;&lt;br /&gt;import javax.jms.MessageListener;&lt;br /&gt;import javax.jms.Message;&lt;br /&gt;import weblogic.ejb.GenericMessageDrivenBean;&lt;br /&gt;import weblogic.ejbgen.MessageDriven;&lt;br /&gt;&lt;br /&gt;@MessageDriven(ejbName = "MyFirsMDB", destinationJndiName = "MyDefaultQueue", destinationType = "javax.jms.Queue")&lt;br /&gt;public class MyFirsMDB extends GenericMessageDrivenBean implements&lt;br /&gt;  MessageDrivenBean, MessageListener {&lt;br /&gt;&lt;br /&gt; private String  id = "A_" + new Long(System.currentTimeMillis()).toString();&lt;br /&gt; &lt;br /&gt; public void onMessage(Message msg) {&lt;br /&gt;  try {&lt;br /&gt;   Thread.sleep(1000);&lt;br /&gt;   System.out.println(id +" : "+ msg.getStringProperty("msg"));&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Second one:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package com;&lt;br /&gt;&lt;br /&gt;import javax.ejb.MessageDrivenBean;&lt;br /&gt;import javax.jms.MessageListener;&lt;br /&gt;import javax.jms.Message;&lt;br /&gt;import weblogic.ejb.GenericMessageDrivenBean;&lt;br /&gt;import weblogic.ejbgen.MessageDriven;&lt;br /&gt;&lt;br /&gt;@MessageDriven(ejbName = "MySecondMDB", destinationJndiName = "MyDefaultQueue", destinationType = "javax.jms.Queue")&lt;br /&gt;public class MySecondMDB extends GenericMessageDrivenBean implements&lt;br /&gt;  MessageDrivenBean, MessageListener {&lt;br /&gt;&lt;br /&gt; private String  id = "B_" + new Long(System.currentTimeMillis()).toString();&lt;br /&gt; &lt;br /&gt; public void onMessage(Message msg) {&lt;br /&gt;  try {&lt;br /&gt;   Thread.sleep(1000);&lt;br /&gt;   System.out.println(id +" : "+ msg.getStringProperty("msg"));&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;B_1239799361946 : My AA String Message.&lt;br /&gt;B_1239799361946 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799366993 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799366993 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799361946 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799366993 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799383931 : My AA String Message.&lt;br /&gt;A_1239799384197 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799384197 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799366712 : My AA String Message.&lt;br /&gt;B_1239799366993 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799361946 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799361946 : My AA String Message.&lt;br /&gt;B_1239799367274 : My AA String Message.&lt;br /&gt;B_1239799366993 : My AA String Message.&lt;br /&gt;B_1239799366993 : My AA String Message.&lt;br /&gt;A_1239799384197 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799384197 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799384197 : My AA String Message.&lt;br /&gt;A_1239799384197 : My AA String Message.&lt;br /&gt;A_1239799378290 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;A_1239799383931 : My AA String Message.&lt;br /&gt;A_1239799377978 : My AA String Message.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-3687003860189126840?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/3687003860189126840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=3687003860189126840' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3687003860189126840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3687003860189126840'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2009/04/weblogic-message-driven-beans.html' title='Weblogic Message-Driven Beans'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-6606339676646443435</id><published>2009-04-14T15:17:00.001+03:00</published><updated>2009-04-14T15:18:55.733+03:00</updated><title type='text'>Point-to-Point Messaging Configuration</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_A2LVSsaF3eo/SeR_Jk8w1jI/AAAAAAAAAMA/SxsAuFuRUZg/s1600-h/WLQueue.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 168px;" src="http://1.bp.blogspot.com/_A2LVSsaF3eo/SeR_Jk8w1jI/AAAAAAAAAMA/SxsAuFuRUZg/s320/WLQueue.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5324520461972854322" /&gt;&lt;/a&gt;&lt;br /&gt;The point-to-point (PTP) messaging model enables one application to send a message to another. PTP messaging applications send and receive messages using named queues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-6606339676646443435?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/6606339676646443435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=6606339676646443435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6606339676646443435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6606339676646443435'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2009/04/point-to-point-messaging-configuration.html' title='Point-to-Point Messaging Configuration'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_A2LVSsaF3eo/SeR_Jk8w1jI/AAAAAAAAAMA/SxsAuFuRUZg/s72-c/WLQueue.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-5900216865077781030</id><published>2009-04-14T15:09:00.004+03:00</published><updated>2009-04-14T15:22:35.806+03:00</updated><title type='text'>Weblogic JMS Queues</title><content type='html'>Receiving Messages Synchronously:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javax.servlet.http.HttpSession;&lt;br /&gt;import org.apache.beehive.netui.pageflow.PageFlowController;&lt;br /&gt;import org.apache.beehive.netui.pageflow.annotations.Jpf;&lt;br /&gt;import org.apache.beehive.netui.pageflow.Forward;&lt;br /&gt;import org.apache.log.format.Formatter;&lt;br /&gt;import org.apache.log.output.jms.TextMessageBuilder;&lt;br /&gt;&lt;br /&gt;import javax.jms.*;&lt;br /&gt;import javax.mail.search.MessageIDTerm;&lt;br /&gt;import javax.naming.*;&lt;br /&gt;import weblogic.jndi.*;&lt;br /&gt;import javax.transaction.UserTransaction;&lt;br /&gt;import weblogic.jms.extensions.*;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Jpf.Controller(simpleActions = { @Jpf.SimpleAction(name = "begin", path = "index.jsp") })&lt;br /&gt;public class Controller extends PageFlowController {&lt;br /&gt;&lt;br /&gt; @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "index.jsp") })&lt;br /&gt; public Forward newAction1() throws NamingException, JMSException {&lt;br /&gt;  &lt;br /&gt;  InitialContext ic = new InitialContext();&lt;br /&gt;  QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) ic.lookup("weblogic.jms.ConnectionFactory");&lt;br /&gt;  &lt;br /&gt;  QueueConnection qc = queueConnectionFactory.createQueueConnection();&lt;br /&gt;  QueueSession qSession = qc.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);&lt;br /&gt;  &lt;br /&gt;  Queue queue = (Queue) ic.lookup("MyDefaultQueue");   &lt;br /&gt;  &lt;br /&gt;  QueueReceiver qReceiver = qSession.createReceiver(queue);  &lt;br /&gt;  qReceiver = qSession.createReceiver(queue);&lt;br /&gt;  //qReceiver.setMessageListener(this);&lt;br /&gt;  &lt;br /&gt;  //QueueSender qSender = qSession.createSender(queue);  &lt;br /&gt;  //Message msg = qSession.createMessage();&lt;br /&gt;  //msg.setStringProperty("msg", "My AA String Message.");  &lt;br /&gt;  //qSender.send(msg);&lt;br /&gt;  &lt;br /&gt;  qc.start();&lt;br /&gt;  System.out.println(qReceiver.receive().getStringProperty("msg"));&lt;br /&gt;  qc.close();&lt;br /&gt;  &lt;br /&gt;  Forward forward = new Forward("success");&lt;br /&gt;  return forward;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onCreate() {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onDestroy(HttpSession session) {&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;--------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Receiving Messages Asynchronously:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javax.servlet.http.HttpSession;&lt;br /&gt;import org.apache.beehive.netui.pageflow.PageFlowController;&lt;br /&gt;import org.apache.beehive.netui.pageflow.annotations.Jpf;&lt;br /&gt;import org.apache.beehive.netui.pageflow.Forward;&lt;br /&gt;import org.apache.log.format.Formatter;&lt;br /&gt;import org.apache.log.output.jms.TextMessageBuilder;&lt;br /&gt;&lt;br /&gt;import javax.jms.*;&lt;br /&gt;import javax.mail.search.MessageIDTerm;&lt;br /&gt;import javax.naming.*;&lt;br /&gt;import weblogic.jndi.*;&lt;br /&gt;import javax.transaction.UserTransaction;&lt;br /&gt;import weblogic.jms.extensions.*;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Jpf.Controller(simpleActions = { @Jpf.SimpleAction(name = "begin", path = "index.jsp") })&lt;br /&gt;public class Controller extends PageFlowController implements javax.jms.MessageListener{&lt;br /&gt;&lt;br /&gt; public void onMessage(Message message) {&lt;br /&gt;  try {&lt;br /&gt;   System.out.println("----------&gt;&gt; " + message.getStringProperty("msg"));&lt;br /&gt;  } catch (JMSException e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }  &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "index.jsp") })&lt;br /&gt; public Forward newAction1() throws NamingException, JMSException {&lt;br /&gt;  &lt;br /&gt;  InitialContext ic = new InitialContext();&lt;br /&gt;  QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) ic.lookup("weblogic.jms.ConnectionFactory");&lt;br /&gt;  &lt;br /&gt;  QueueConnection qc = queueConnectionFactory.createQueueConnection();&lt;br /&gt;  QueueSession qSession = qc.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);&lt;br /&gt;  &lt;br /&gt;  Queue queue = (Queue) ic.lookup("MyDefaultQueue");&lt;br /&gt;   &lt;br /&gt;  QueueReceiver qReceiver = qSession.createReceiver(queue);  &lt;br /&gt;  qReceiver = qSession.createReceiver(queue);&lt;br /&gt;  qReceiver.setMessageListener(this);&lt;br /&gt;  qc.start();&lt;br /&gt;  &lt;br /&gt;  QueueSender qSender = qSession.createSender(queue);  &lt;br /&gt;  Message msg = qSession.createMessage();&lt;br /&gt;  msg.setStringProperty("msg", "My BB String Message.");  &lt;br /&gt;  qSender.send(msg);&lt;br /&gt;  &lt;br /&gt;  Forward forward = new Forward("success");&lt;br /&gt;  return forward;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onCreate() {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onDestroy(HttpSession session) {&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-5900216865077781030?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/5900216865077781030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=5900216865077781030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5900216865077781030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5900216865077781030'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2009/04/weblogic-jms.html' title='Weblogic JMS Queues'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-3812717646501824227</id><published>2008-09-05T11:45:00.016+03:00</published><updated>2009-12-10T13:05:15.146+02:00</updated><title type='text'>ORACLE tips</title><content type='html'>FONT -- Lucida Console !!!&lt;br /&gt;chcp 1251&lt;br /&gt;&lt;br /&gt;RUSSIAN_CIS.CL8MSWIN1251&lt;br /&gt;chcp 1251&lt;br /&gt;&lt;br /&gt;для клиента виндовс  NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 &lt;br /&gt;для клиента линукс   NLS_LANG=AMERICAN_AMERICA.CL8KOI8R &lt;br /&gt;&lt;br /&gt;sqlplus sys/querty@xe AS SYSDBA&lt;br /&gt;&lt;br /&gt;SELECT table_name FROM user_tables;&lt;br /&gt;&lt;br /&gt;select to_char(to_date('19-SEP-2008','dd-mon-yyyy'),'day') from dual;&lt;br /&gt;select user from dual;&lt;br /&gt;select sysdate from dual;&lt;br /&gt;select current_user from dual;&lt;br /&gt;&lt;br /&gt;set ARRAYSIZE 1000;&lt;br /&gt;set LINESIZE  1000;&lt;br /&gt;set PAGESIZE 1000;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select level from dual connect by level &lt; 10;&lt;br /&gt;select level a  from dual connect by 1 = 1;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ALTER SYSTEM SET TIMED_STATISTICS = TRUE; &lt;br /&gt;ALTER SESSION SET SQL_TRACE = TRUE; &lt;br /&gt;&lt;br /&gt;-- Created d:\oracle\product\10.2.0\admin\xe\udump\xe_ora_4916.trc &lt;br /&gt;&lt;br /&gt;select test_connect_by.parent from persons inner join test_connect_by on persons.id = test_connect_by.child group by test_connect_by.parent;&lt;br /&gt;&lt;br /&gt;select spid, osuser, s.program from v$process p, v$session s where p.addr=s.paddr order by 2;&lt;br /&gt;alter system kill session(sid, serial#); &lt;br /&gt;&lt;br /&gt;show parameters processes&lt;br /&gt;show parameters sessions&lt;br /&gt;&lt;br /&gt;alter system set sessions=250 scope=spfile;&lt;br /&gt;alter system set processes=200 scope=spfile;&lt;br /&gt;&lt;br /&gt;select count(*) from v$session&lt;br /&gt;select count(*) from v$process&lt;br /&gt;&lt;br /&gt;quit;&lt;br /&gt;&lt;br /&gt;orakill xe 4072&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-3812717646501824227?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/3812717646501824227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=3812717646501824227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3812717646501824227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3812717646501824227'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/09/oracle-tips.html' title='ORACLE tips'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2621060823648408534</id><published>2008-08-22T12:47:00.002+03:00</published><updated>2008-12-09T16:54:00.258+02:00</updated><title type='text'>Eclipse Plugins</title><content type='html'>Jigloo SWT/Swing GUI Builder&lt;br /&gt;Java Persistence API (JPA) Tools&lt;br /&gt;JadClipse&lt;br /&gt;http://update.eclemma.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2621060823648408534?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2621060823648408534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2621060823648408534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2621060823648408534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2621060823648408534'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/08/eclipse-plugins.html' title='Eclipse Plugins'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-3831449417406354455</id><published>2008-07-21T13:41:00.002+03:00</published><updated>2008-07-22T11:02:01.266+03:00</updated><title type='text'>Java and XML: XML binding</title><content type='html'>JAXB&lt;br /&gt;&lt;br /&gt;XMLBeans&lt;br /&gt;&lt;br /&gt;JiBX&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-3831449417406354455?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/3831449417406354455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=3831449417406354455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3831449417406354455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3831449417406354455'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml-xml-binding.html' title='Java and XML: XML binding'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-930742420802961080</id><published>2008-07-15T12:29:00.000+03:00</published><updated>2008-07-15T15:01:39.314+03:00</updated><title type='text'>Apache AXIS</title><content type='html'>Simple invoke standard Version web service via URLConnection:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.net.HttpURLConnection;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.net.URLConnection;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) throws Exception  {&lt;br /&gt;&lt;br /&gt;  HttpURLConnection httpurlconnection = null;&lt;br /&gt;  String HostUrl = "localhost";&lt;br /&gt;  String SoapActionUrl = "http://localhost:8080/axis/services/Version";&lt;br /&gt;&lt;br /&gt;  URL url = new URL(SoapActionUrl);&lt;br /&gt;  URLConnection urlconnection = url.openConnection();&lt;br /&gt;  httpurlconnection = (HttpURLConnection) urlconnection;&lt;br /&gt;&lt;br /&gt;  StringBuffer stringbuffer = new StringBuffer();&lt;br /&gt;&lt;br /&gt;  stringbuffer.append("&amp;lt;SOAP-ENV:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"&amp;gt;");&lt;br /&gt;  stringbuffer.append("&amp;lt;SOAP-ENV:Body&amp;gt;");&lt;br /&gt;  stringbuffer.append("&amp;lt;getVersion&amp;gt;");&lt;br /&gt;  stringbuffer.append("&amp;lt;/getVersion&amp;gt;&amp;lt;/SOAP-ENV:Body&amp;gt;&amp;lt;/SOAP-ENV:Envelope&amp;gt;");&lt;br /&gt;&lt;br /&gt;  byte abyte0[] = stringbuffer.toString().getBytes();&lt;br /&gt;  httpurlconnection.addRequestProperty("Host", HostUrl);&lt;br /&gt;  httpurlconnection.addRequestProperty("Content-Length", String.valueOf(abyte0.length));&lt;br /&gt;  httpurlconnection.addRequestProperty("Content-Type", "text/xml; charset=UTF-8");&lt;br /&gt;  httpurlconnection.addRequestProperty("SOAPAction", SoapActionUrl);&lt;br /&gt;  httpurlconnection.setInstanceFollowRedirects(true);&lt;br /&gt;&lt;br /&gt;  httpurlconnection.setRequestMethod("POST");&lt;br /&gt;  httpurlconnection.setDoOutput(true);&lt;br /&gt;  httpurlconnection.setDoInput(true);&lt;br /&gt;&lt;br /&gt;  OutputStream outputstream = httpurlconnection.getOutputStream();&lt;br /&gt;  outputstream.write(abyte0);&lt;br /&gt;  outputstream.close();&lt;br /&gt;&lt;br /&gt;  System.out.println(httpurlconnection.getResponseMessage());&lt;br /&gt;&lt;br /&gt;  InputStreamReader inputstreamreader = new InputStreamReader(httpurlconnection.getInputStream());&lt;br /&gt;  BufferedReader bufferedreader = new BufferedReader(inputstreamreader);&lt;br /&gt;  StringBuffer stringbuffer1 = new StringBuffer();&lt;br /&gt;  String s3;&lt;br /&gt;  while ((s3 = bufferedreader.readLine()) != null) {&lt;br /&gt;   stringbuffer1.append(s3);&lt;br /&gt;   System.out.println(s3);&lt;br /&gt;  }&lt;br /&gt;  bufferedreader.close();&lt;br /&gt;  httpurlconnection = null;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;OK&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&amp;lt;soapenv:Body&amp;gt;&amp;lt;getVersionResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&amp;gt;&amp;lt;getVersionReturn xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"&amp;gt;Apache Axis version: 1.4&lt;br /&gt;Built on Apr 22, 2006 (06:55:48 PDT)&amp;lt;/getVersionReturn&amp;gt;&amp;lt;/getVersionResponse&amp;gt;&amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Request&lt;/i&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;POST /axis/services/Version HTTP/1.1&lt;br /&gt;Host: localhost&lt;br /&gt;Content-Length: 253&lt;br /&gt;Content-Type: text/xml; charset=UTF-8&lt;br /&gt;SOAPAction: http://localhost:8080/axis/services/Version&lt;br /&gt;User-Agent: Java/1.4.2&lt;br /&gt;Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2&lt;br /&gt;Connection: keep-alive&lt;br /&gt;&lt;br /&gt;&amp;lt;SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&amp;lt;SOAP-ENV:Body&amp;gt;&amp;lt;getVersion&amp;gt;&amp;lt;/getVersion&amp;gt;&amp;lt;/SOAP-ENV:Body&amp;gt;&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Response&lt;/i&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;HTTP/1.1 200 OK&lt;br /&gt;Server: Apache-Coyote/1.1&lt;br /&gt;Content-Type: text/xml;charset=utf-8&lt;br /&gt;Transfer-Encoding: chunked&lt;br /&gt;Date: Tue, 15 Jul 2008 11:41:14 GMT&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&amp;lt;soapenv:Body&amp;gt;&amp;lt;getVersionResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&amp;gt;&amp;lt;getVersionReturn xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"&amp;gt;Apache Axis version: 1.4&lt;br /&gt;Built on Apr 22, 2006 (06:55:48 PDT)&amp;lt;/getVersionReturn&amp;gt;&amp;lt;/getVersionResponse&amp;gt;&amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Using AXIS classes:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import org.apache.axis.client.Call;&lt;br /&gt;import org.apache.axis.client.Service;&lt;br /&gt;import javax.xml.namespace.QName;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt; public static void main(String[] args) throws Exception {&lt;br /&gt;  String endpoint = "http://localhost:8080/axis/services/Version";&lt;br /&gt;  Call call = (Call) new Service().createCall();&lt;br /&gt;  call.setTargetEndpointAddress(new java.net.URL(endpoint));&lt;br /&gt;  call.setOperationName(new QName("", "getVersion"));&lt;br /&gt;  String ret = (String) call.invoke(new Object[] { });&lt;br /&gt;  System.out.println(ret);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;Apache Axis version: 1.4&lt;br /&gt;Built on Apr 22, 2006 (06:55:48 PDT)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Request:&lt;/i&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;POST /axis/services/Version HTTP/1.0&lt;br /&gt;Content-Type: text/xml; charset=utf-8&lt;br /&gt;Accept: application/soap+xml, application/dime, multipart/related, text/*&lt;br /&gt;User-Agent: Axis/1.4&lt;br /&gt;Host: localhost:8080&lt;br /&gt;Cache-Control: no-cache&lt;br /&gt;Pragma: no-cache&lt;br /&gt;SOAPAction: ""&lt;br /&gt;Content-Length: 340&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&amp;lt;soapenv:Body&amp;gt;&amp;lt;getVersion soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&amp;gt;&amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Response:&lt;/i&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;HTTP/1.1 200 OK&lt;br /&gt;Server: Apache-Coyote/1.1&lt;br /&gt;Content-Type: text/xml;charset=utf-8&lt;br /&gt;Date: Tue, 15 Jul 2008 10:35:47 GMT&lt;br /&gt;Connection: close&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&amp;lt;soapenv:Body&amp;gt;&amp;lt;getVersionResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&amp;gt;&amp;lt;getVersionReturn xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"&amp;gt;Apache Axis version: 1.4&lt;br /&gt;Built on Apr 22, 2006 (06:55:48 PDT)&amp;lt;/getVersionReturn&amp;gt;&amp;lt;/getVersionResponse&amp;gt;&amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-930742420802961080?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/930742420802961080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=930742420802961080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/930742420802961080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/930742420802961080'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/apache-axis.html' title='Apache AXIS'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-5528506042723307105</id><published>2008-07-15T10:04:00.003+03:00</published><updated>2008-07-17T12:25:00.725+03:00</updated><title type='text'>Java and XML: miscellaneous notes</title><content type='html'>- Java 1.4 includes the Crimson parser, though the Axis team prefer Xerces.&lt;br /&gt;- If you are installing Tomcat, get the latest 4.1.x version, and the full distribution, not the LE version for Java 1.4, as that omits the Xerces XML parser.&lt;br /&gt;- SOAP messages are XML messages. Messages consist of one or more SOAP elements inside an envelope, Headers and the SOAP Body. SOAP has two syntaxes for describing the data in these elements, which is a clear descendant of the XML RPC system, and XML Schema, which is the newer system.&lt;br /&gt;- Axis implements the JAX-RPC API, one of the standard ways to program Java services.&lt;br /&gt;- To add an XML parser, acquire the JAXP 1.1 XML compliant parser of your choice. We recommend Xerces jars from the xml-xerces distribution, though others mostly work. &lt;br /&gt;- Axis is compiled in the JAR file axis.jar; it implements the JAX-RPC API declared in the JAR files jaxrpc.jar and saaj.jar. &lt;br /&gt;- The examples in this guide use Xerces.  This guide adds xml-apis.jar and xercesImpl.jar to the AXISCLASSPATH so that Axis can find the parser. (from Installing and deploying web applications using xml-axis).&lt;br /&gt;- Axis stands for, it's Apache EXtensible Interaction System.&lt;br /&gt;- JaxMe - an implementation of JAXB, the specification for Java/XML binding.&lt;br /&gt;A SOAP message is an ordinary XML document containing the following elements:&lt;br /&gt; * A required Envelope element that identifies the XML document as a SOAP message&lt;br /&gt; * An optional Header element that contains header information&lt;br /&gt; * A required Body element that contains call and response information&lt;br /&gt; * An optional Fault element that provides information about errors that occurred while processing the message&lt;br /&gt;-Axis is one of the best Java-based Web services engines. It's better architected and much faster than its Apache SOAP predecessor.&lt;br /&gt;-XML infoset is an abstract model of all the information in an XML document or document fragment.&lt;br /&gt;- Dynamic invocation interface (DII)&lt;br /&gt;&lt;br /&gt;-Communication Patterns&lt;br /&gt; With Web Services, you can essentially distinguish three different ways of communication:&lt;br /&gt;&lt;br /&gt;    * Remote procedure call: Client sends a SOAP request to the service provider and then waits for a SOAP response (synchronous communication).&lt;br /&gt;    * Messaging: Client sends a SOAP request and expects no SOAP response back (one-way communication)&lt;br /&gt;    * Asynchronous callback: A client calls the service with one of the above methods. Later, the two parties switch roles for a callback call. This pattern can be built from either of the first two.&lt;br /&gt;&lt;br /&gt;- WSDL 1.1 distinguishes two different binding styles (referred to as soap:binding styles): RPC and Document.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-5528506042723307105?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/5528506042723307105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=5528506042723307105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5528506042723307105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5528506042723307105'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml-miscellaneous-notes.html' title='Java and XML: miscellaneous notes'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-4716444795102843936</id><published>2008-07-09T17:17:00.000+03:00</published><updated>2008-07-10T12:28:25.335+03:00</updated><title type='text'>Java and XML: validation XML</title><content type='html'>&lt;i&gt;JAXP 1.3&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;String schemaLang = "http://www.w3.org/2001/XMLSchema";&lt;br /&gt;SchemaFactory factory = SchemaFactory.newInstance(schemaLang);&lt;br /&gt;Schema schema = factory.newSchema(new StreamSource("sample.xsd"));&lt;br /&gt;Validator validator = schema.newValidator();&lt;br /&gt;validator.validate(new StreamSource("sample.xml"));&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-4716444795102843936?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/4716444795102843936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=4716444795102843936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4716444795102843936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4716444795102843936'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml-validation-xml.html' title='Java and XML: validation XML'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-7235083716694807024</id><published>2008-07-09T17:16:00.019+03:00</published><updated>2008-07-22T10:47:13.654+03:00</updated><title type='text'>Java and XML: generating XML</title><content type='html'>&lt;img src="http://bp1.blogger.com/_A2LVSsaF3eo/SISHcKjzYUI/AAAAAAAAAH8/h6VA9eM2kxA/s320/SUN.JPG" border="0" /&gt;&lt;br /&gt;&lt;i&gt;DOM API:&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.*;&lt;br /&gt;import org.w3c.dom.*;&lt;br /&gt;import javax.xml.parsers.*;&lt;br /&gt;import javax.xml.transform.*;&lt;br /&gt;import javax.xml.transform.stream.*;&lt;br /&gt;import javax.xml.transform.dom.*; &lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String[] args) throws Exception {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;Document xmldoc = factory.newDocumentBuilder().getDOMImplementation().createDocument(null, "PhoneBook", null);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Element root = xmldoc.getDocumentElement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;Element e = xmldoc.createElementNS(null, "BookRecord");&lt;br /&gt;&amp;nbsp;&amp;nbsp;Node n = xmldoc.createTextNode("Value");&lt;br /&gt;&amp;nbsp;&amp;nbsp;e.appendChild(n);&lt;br /&gt;&amp;nbsp;&amp;nbsp;root.appendChild(e);&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;Transformer serializer = TransformerFactory.newInstance().newTransformer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;serializer.setOutputProperty(OutputKeys.INDENT,"yes");&lt;br /&gt;&amp;nbsp;&amp;nbsp;serializer.transform(new DOMSource(xmldoc), new StreamResult(new PrintWriter(System.out)));&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;SAX API:&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;&lt;br /&gt;import javax.xml.transform.OutputKeys;&lt;br /&gt;import javax.xml.transform.sax.SAXTransformerFactory;&lt;br /&gt;import javax.xml.transform.sax.TransformerHandler;&lt;br /&gt;import javax.xml.transform.stream.StreamResult;&lt;br /&gt;&lt;br /&gt;import org.xml.sax.helpers.*;&lt;br /&gt;&lt;br /&gt;public class Main  {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception   {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;TransformerHandler hd = tf.newTransformerHandler();&lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.getTransformer().setOutputProperty(OutputKeys.INDENT,"yes");&lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.setResult(new StreamResult(new PrintWriter( System.out)));&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.startDocument(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.startElement("", "", "PhoneBook",new AttributesImpl());&lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.startElement("", "","BookRecord", new AttributesImpl());  &lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.characters("Value".toCharArray(), 0, 5);     &lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.endElement("", "", "BookRecord");&lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.endElement("", "", "PhoneBook");  &lt;br /&gt;&amp;nbsp;&amp;nbsp;hd.endDocument();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;img src="http://bp2.blogger.com/_A2LVSsaF3eo/SIWPfVhyHtI/AAAAAAAAAIE/1c2cRdAJS4Y/s320/JDom.JPG" border="0" /&gt;&lt;br /&gt;&lt;i&gt;JDOM API:&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package com;&lt;br /&gt;&lt;br /&gt;import org.jdom.Document;&lt;br /&gt;import org.jdom.Element;&lt;br /&gt;import org.jdom.output.Format;&lt;br /&gt;import org.jdom.output.XMLOutputter;&lt;br /&gt;&lt;br /&gt;public class Main  {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception   {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Document doc = new Document();&lt;br /&gt;&amp;nbsp;&amp;nbsp;Element e =  new Element("PhoneBook");  &lt;br /&gt;&amp;nbsp;&amp;nbsp;e.addContent(new Element("BookRecord").setText("Value"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;doc.addContent(e);&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;XMLOutputter outp = new XMLOutputter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;Format f = Format.getPrettyFormat();&lt;br /&gt;&amp;nbsp;&amp;nbsp;//f.setIndent("   ");&lt;br /&gt;&amp;nbsp;&amp;nbsp;outp.setFormat(f);&lt;br /&gt;&amp;nbsp;&amp;nbsp;outp.output(doc, System.out);  &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As result in all cases:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;PhoneBook&amp;gt;&lt;br /&gt;&amp;lt;BookRecord&amp;gt;Value&amp;lt;/BookRecord&amp;gt;&lt;br /&gt;&amp;lt;/PhoneBook&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://bp1.blogger.com/_A2LVSsaF3eo/SISHcKjzYUI/AAAAAAAAAH8/h6VA9eM2kxA/s320/SUN.JPG" border="0" /&gt;&lt;br /&gt;XML Serialization with &lt;i&gt;java.beans.&lt;b&gt;XMLEncoder&lt;/b&gt; class&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.beans.XMLEncoder;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String[] args) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;XMLEncoder xenc = new XMLEncoder(System.out);&lt;br /&gt;&amp;nbsp;&amp;nbsp;xenc.writeObject("Some String");&lt;br /&gt;&amp;nbsp;&amp;nbsp;xenc.flush();&lt;br /&gt;&amp;nbsp;&amp;nbsp;xenc.close();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Output:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt; &lt;br /&gt;&amp;lt;java version="1.5.0_06" class="java.beans.XMLDecoder"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;lt;string&amp;gt;Some String&amp;lt;/string&amp;gt; &lt;br /&gt;&amp;lt;/java&amp;gt; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Or more interesting:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.beans.XMLEncoder;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String[] args) throws Exception { &lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;Foo[] arr = {new Foo(), new Foo()};&lt;br /&gt;&amp;nbsp;&amp;nbsp;XMLEncoder encoder = new XMLEncoder(System.out);&lt;br /&gt;&amp;nbsp;&amp;nbsp;encoder.writeObject(arr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;encoder.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;public static class Foo {&lt;br /&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;private int foo = 10 ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public int getFoo() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return foo;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void setFoo(int foo) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.foo = foo;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt; &lt;br /&gt;&amp;lt;java version="1.5.0_06" class="java.beans.XMLDecoder"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;lt;array class="com.Main$Foo" length="2"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;void index="0"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;object class="com.Main$Foo"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/void&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;void index="1"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;object class="com.Main$Foo"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/void&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;lt;/array&amp;gt; &lt;br /&gt;&amp;lt;/java&amp;gt; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As you can see - not so optimistic. For the things to be serialized propery, you need bean pattern getter methods, and sometimes even setters: so for simple java bean serialization will work fine.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://bp2.blogger.com/_A2LVSsaF3eo/SISGk78pDfI/AAAAAAAAAH0/rGIZ8iLszak/s320/XStream.JPG" border="0" id="BLOGGER_PHOTO_ID_5225449436782071282" /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;XStream&lt;/b&gt;&lt;/i&gt; - a lightweight open source Java library for serializing Java objects to XML and back again.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import com.thoughtworks.xstream.XStream;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String[] args) throws Exception { &lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;XStream xstream = new XStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;xstream.alias("Foo", Foo.class);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;String xml = xstream.toXML(new Foo());  &lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(xml);  &lt;br /&gt;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;public static class Foo {&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;public int fooInt = 10 ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public String fooStr = "20";&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;Foo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;fooInt&amp;gt;10&amp;lt;/fooInt&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;fooStr&amp;gt;20&amp;lt;/fooStr&amp;gt;&lt;br /&gt;&amp;lt;/Foo&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In case of List it behave too pretty good:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;List&amp;lt;Foo&amp;gt; list = new LinkedList&amp;lt;Foo&amp;gt;();&lt;br /&gt;&amp;nbsp;list.add(new Foo());&lt;br /&gt;&amp;nbsp;list.add(new Foo());&lt;br /&gt;&amp;nbsp;String xml = xstream.toXML(list);&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;linked-list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;Foo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;fooInt&amp;gt;10&amp;lt;/fooInt&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;fooStr&amp;gt;20&amp;lt;/fooStr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/Foo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;Foo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;fooInt&amp;gt;10&amp;lt;/fooInt&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;fooStr&amp;gt;20&amp;lt;/fooStr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/Foo&amp;gt;&lt;br /&gt;&amp;lt;/linked-list&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-7235083716694807024?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/7235083716694807024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=7235083716694807024' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/7235083716694807024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/7235083716694807024'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml-generating-xml.html' title='Java and XML: generating XML'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_A2LVSsaF3eo/SISHcKjzYUI/AAAAAAAAAH8/h6VA9eM2kxA/s72-c/SUN.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-8682807570337398574</id><published>2008-07-09T17:10:00.007+03:00</published><updated>2008-07-22T11:00:41.320+03:00</updated><title type='text'>Java and XML: query over XML</title><content type='html'>There is not included API for XQuery in Java 5 or 6. There is not included XPath API in Java till 5. But in java 5 and higher there is facilities for addressing element or group of elements via XPath. Probably in Java 7 it will be realized (XQJ or JSR 225 - like JDBC). Any case SUN is not only vendor of such kind of API. &lt;br /&gt;&lt;img width="16%" src="http://bp0.blogger.com/_A2LVSsaF3eo/SIWQ_LU9p2I/AAAAAAAAAIM/8cmu4un8Vco/s320/saxonica_logo.GIF"  /&gt;&lt;br /&gt;&lt;i&gt;XPath with &lt;b&gt;Saxon&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;SAXON is the XSLT and XQuery Processor. Most XSLT and XQuery functionality in Saxon will work without installing JAXP 1.3.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import net.sf.saxon.dom.DOMNodeList;&lt;br /&gt;import net.sf.saxon.om.NamespaceConstant;&lt;br /&gt;import net.sf.saxon.om.NodeInfo;&lt;br /&gt;import net.sf.saxon.xpath.XPathEvaluator;&lt;br /&gt;import org.xml.sax.InputSource;&lt;br /&gt;import javax.xml.namespace.NamespaceContext;&lt;br /&gt;import javax.xml.transform.sax.SAXSource;&lt;br /&gt;import javax.xml.xpath.XPath;&lt;br /&gt;import javax.xml.xpath.XPathConstants;&lt;br /&gt;import javax.xml.xpath.XPathExpression;&lt;br /&gt;import javax.xml.xpath.XPathFactory;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import net.sf.saxon.dom.ElementOverNodeInfo;&lt;br /&gt;&lt;br /&gt;public class XPathExample implements NamespaceContext {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main (String args[])  throws Exception  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.setProperty("javax.xml.xpath.XPathFactory:"+NamespaceConstant.OBJECT_MODEL_SAXON,  "net.sf.saxon.xpath.XPathFactoryImpl");&lt;br /&gt;&amp;nbsp;&amp;nbsp;XPathFactory xpf = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);&lt;br /&gt;&amp;nbsp;&amp;nbsp;XPath xpe = xpf.newXPath();  &lt;br /&gt;&amp;nbsp;&amp;nbsp;InputSource is = new InputSource(new FileInputStream("D:/dev/Temp_java/src/com/PhoneBook.xml"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;SAXSource ss = new SAXSource(is);&lt;br /&gt;&amp;nbsp;&amp;nbsp;NodeInfo doc = ((XPathEvaluator)xpe).setSource(ss);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;XPathExpression findLine =  xpe.compile("/*[1]/*[1]");  &lt;br /&gt;&amp;nbsp;&amp;nbsp;DOMNodeList matchedLines = (DOMNodeList)findLine.evaluate(doc, XPathConstants.NODESET) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (matchedLines != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &lt; matchedLines.getLength(); i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElementOverNodeInfo info =((ElementOverNodeInfo)matchedLines.item(i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(info.getTextContent());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public String getNamespaceURI(String prefix) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;return null;&lt;br /&gt;&amp;nbsp;}        &lt;br /&gt;&amp;nbsp;public String getPrefix(String namespaceURI) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;return null; &lt;br /&gt;&amp;nbsp;}    &lt;br /&gt;&amp;nbsp;public Iterator getPrefixes(String namespaceURI) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;return null;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;0&lt;br /&gt;Alex&lt;br /&gt;Kuiv, Kominterna 28&lt;br /&gt;aillusions@gmail.com&lt;br /&gt;+380664392825&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://bp1.blogger.com/_A2LVSsaF3eo/SISHcKjzYUI/AAAAAAAAAH8/h6VA9eM2kxA/s320/SUN.JPG" border="0" /&gt;&lt;br /&gt;&lt;i&gt;XPath with &lt;b&gt;JAXP 1.3&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;JAXP is the Java API for XML Processing. In version SE 1.5 it included by default but there is version JAXP 1.3 for JDK 1.4 (by default has JAXP 1.1). To use this API in 1.4 property -Djava.endorsed.dirs=DIR_WITH_JAXP1.3_JARS should be set, or copy all of the jar files except jaxp-api.jar into &lt;JAVA_HOME&gt;/jre/lib/endorsed.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;&lt;br /&gt;import javax.xml.XMLConstants;&lt;br /&gt;import javax.xml.namespace.NamespaceContext;&lt;br /&gt;import javax.xml.xpath.XPath;&lt;br /&gt;import javax.xml.xpath.XPathConstants;&lt;br /&gt;import javax.xml.xpath.XPathFactory;&lt;br /&gt;import org.w3c.dom.NodeList;&lt;br /&gt;import org.xml.sax.InputSource;&lt;br /&gt;&lt;br /&gt;public class XPathDemo {&lt;br /&gt; &lt;br /&gt;&amp;nbsp;public static void main(String[] args) throws Exception { &lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;String xmlFile = "D:/dev/Temp_java/src/com/PhoneBook.xml";&lt;br /&gt;&amp;nbsp;&amp;nbsp;String xpathExpression = "/*/pb:BookRecord/pb:id";&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;XPathFactory xpf = XPathFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;XPath xpath = xpf.newXPath();&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;NamespaceContextImpl namespaceContextImpl = new NamespaceContextImpl();     &lt;br /&gt;&amp;nbsp;&amp;nbsp;namespaceContextImpl.bindPrefixToNamespaceURI("pb","http://www.epam.com/com/PhoneBook");&lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;xpath.setNamespaceContext(namespaceContextImpl);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;FileInputStream saxStream = new FileInputStream(xmlFile);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;NodeList saxNodeList = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;saxNodeList = (NodeList)xpath.evaluate(xpathExpression, new InputSource(saxStream), XPathConstants.NODESET);&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;for (int i = 0; i &lt; saxNodeList.getLength(); i++) {   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(" name: " + saxNodeList.item(i).getNodeName()+", value: " + saxNodeList.item(i).getNodeValue());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class NamespaceContextImpl implements NamespaceContext { &lt;br /&gt; &lt;br /&gt;&amp;nbsp;private HashMap prefixToNamespaceURI = new HashMap();&lt;br /&gt;&amp;nbsp;private HashMap namespaceURIToPrefix = new HashMap();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;public void bindPrefixToNamespaceURI(String prefix, String namespaceURI) {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;prefixToNamespaceURI.put(prefix, namespaceURI);&lt;br /&gt;&amp;nbsp;&amp;nbsp;namespaceURIToPrefix.put(namespaceURI, prefix);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;public String getNamespaceURI(String prefix) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;if (prefixToNamespaceURI.containsKey(prefix))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (String)prefixToNamespaceURI.get(prefix);&lt;br /&gt;&amp;nbsp;&amp;nbsp;return XMLConstants.NULL_NS_URI;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;public String getPrefix(String namespaceURI) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (namespaceURIToPrefix.containsKey(namespaceURI))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (String)namespaceURIToPrefix.get(namespaceURI);&lt;br /&gt;&amp;nbsp;&amp;nbsp;return null;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;public Iterator getPrefixes(String namespaceURI) {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;throw new UnsupportedOperationException("NamespaceContextImpl#getPrefixes(String namespaceURI) not implemented");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;name: pb:id, value: null&lt;br /&gt;name: pb:id, value: null&lt;br /&gt;name: pb:id, value: null&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img width="16%" src="http://bp2.blogger.com/_A2LVSsaF3eo/SIWSDtGhGCI/AAAAAAAAAIU/hVZ5EiAdD_Q/s320/Jaxen.JPG" /&gt;&lt;br /&gt;&lt;i&gt;XPath with &lt;b&gt;Jaxen&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;Jaxen is able to interact with DOM, Dom4j and JDOM.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;import org.w3c.dom.Document;&lt;br /&gt;import org.jaxen.dom.DOMXPath;&lt;br /&gt;import org.jaxen.XPath;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Iterator; &lt;br /&gt;&lt;br /&gt;public class Main  {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;factory.setNamespaceAware(true);            &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;Document doc = factory.newDocumentBuilder().parse("D:/dev/Temp_java/src/com/PhoneBook.xml");            &lt;br /&gt;&amp;nbsp;&amp;nbsp;XPath xpath = new DOMXPath("//pb:id");         &lt;br /&gt;&amp;nbsp;&amp;nbsp;xpath.addNamespace("pb", "http://www.epam.com/com/PhoneBook");&lt;br /&gt;&amp;nbsp;&amp;nbsp;xpath.addNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");&lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;List results = xpath.selectNodes(doc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;Iterator resultIter = results.iterator();   &lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;while(resultIter.hasNext()){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println( resultIter.next());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;As result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;pb:id&amp;gt;0&amp;lt;/pb:id&amp;gt;&lt;br /&gt;&amp;lt;pb:id&amp;gt;1&amp;lt;/pb:id&amp;gt;&lt;br /&gt;&amp;lt;pb:id&amp;gt;2&amp;lt;/pb:id&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;XPath with &lt;b&gt;SAXPath&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;SAXPath has been merged into the Jaxen codebase and is no longer being maintained separately.&lt;br /&gt;&lt;img width="15%" src="http://bp2.blogger.com/_A2LVSsaF3eo/SIWTdh_Fj8I/AAAAAAAAAIc/QFOY9y-3mvk/s320/Xalan.JPG" /&gt;&lt;br /&gt;&lt;i&gt;XPath with &lt;b&gt;Xalan&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;Xalan-Java is an XSLT processor for transforming XML documents: http://xml.apache.org/xalan-j. Xalan includes the JAXP packages, implements the TrAX portion of that API (javax.xml.transform....), implements the XPath API of JAXP (javax.xml.xpath....), and includes xercesImpl.jar from Xerces-Java 2.9.0, which implements the parser portion of the API (javax.xml.parser....).&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.OutputStreamWriter;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;import javax.xml.transform.OutputKeys;&lt;br /&gt;import javax.xml.transform.Transformer;&lt;br /&gt;import javax.xml.transform.TransformerFactory;&lt;br /&gt;import javax.xml.transform.dom.DOMSource;&lt;br /&gt;import javax.xml.transform.stream.StreamResult;&lt;br /&gt;import org.apache.xpath.XPathAPI;&lt;br /&gt;import org.w3c.dom.Document;&lt;br /&gt;import org.w3c.dom.Node;&lt;br /&gt;import org.w3c.dom.traversal.NodeIterator;&lt;br /&gt;import org.xml.sax.InputSource;&lt;br /&gt;&lt;br /&gt;public class ApplyXPath {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String[] args) throws Exception {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;String filename = "D:/dev/Temp_java/src/com/PhoneBook.xml";&lt;br /&gt;&amp;nbsp;&amp;nbsp;String xpath = "/*[1]/*[1]";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;InputSource in = new InputSource(new FileInputStream(filename));&lt;br /&gt;&amp;nbsp;&amp;nbsp;DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;dfactory.setNamespaceAware(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;Document doc = dfactory.newDocumentBuilder().parse(in);&lt;br /&gt;&amp;nbsp;&amp;nbsp;Transformer serializer = TransformerFactory.newInstance().newTransformer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;NodeIterator nl = XPathAPI.selectNodeIterator(doc, xpath);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Node n;&lt;br /&gt;&amp;nbsp;&amp;nbsp;while ((n = nl.nextNode()) != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;serializer.transform(new DOMSource(n), new StreamResult(new OutputStreamWriter(System.out)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;pb:BookRecord xmlns:pb="http://www.epam.com/com/PhoneBook" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:id&amp;gt;0&amp;lt;/pb:id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:name&amp;gt;Alex&amp;lt;/pb:name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:address&amp;gt;Kuiv, Kominterna 28&amp;lt;/pb:address&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:email&amp;gt;aillusions@gmail.com&amp;lt;/pb:email&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:phone&amp;gt;+380664392825&amp;lt;/pb:phone&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/pb:BookRecord&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-8682807570337398574?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/8682807570337398574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=8682807570337398574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8682807570337398574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8682807570337398574'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml-query-over-xml.html' title='Java and XML: query over XML'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_A2LVSsaF3eo/SIWQ_LU9p2I/AAAAAAAAAIM/8cmu4un8Vco/s72-c/saxonica_logo.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-8513612495498444904</id><published>2008-07-09T17:09:00.002+03:00</published><updated>2008-07-15T15:07:20.796+03:00</updated><title type='text'>Java and XML: transformation XML</title><content type='html'>We can process our xml with code:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import javax.xml.transform.Transformer;&lt;br /&gt;import javax.xml.transform.TransformerFactory;&lt;br /&gt;import javax.xml.transform.stream.StreamResult;&lt;br /&gt;import javax.xml.transform.stream.StreamSource;&lt;br /&gt;&lt;br /&gt;public class Main  {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception   {&lt;br /&gt;&amp;nbsp;&amp;nbsp;File xmlFile = new File("src/com/PhoneBook.xml");&lt;br /&gt;&amp;nbsp;&amp;nbsp;File xsltFile = new File("src/com/PhoneBook.xsl");&lt;br /&gt;&amp;nbsp;&amp;nbsp;TransformerFactory transFact = TransformerFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;Transformer trans = transFact.newTransformer(new StreamSource(xsltFile));&lt;br /&gt;&amp;nbsp;&amp;nbsp;trans.transform(new StreamSource(xmlFile), new StreamResult(System.out));&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;strong&amp;gt;Value&amp;lt;/strong&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-8513612495498444904?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/8513612495498444904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=8513612495498444904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8513612495498444904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8513612495498444904'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml-transformation-xml.html' title='Java and XML: transformation XML'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-4569805626545283544</id><published>2008-07-09T17:09:00.001+03:00</published><updated>2008-07-15T15:07:59.970+03:00</updated><title type='text'>Java and XML: parsing XML</title><content type='html'>&lt;i&gt;&lt;b&gt;SAX&lt;/b&gt; - simple API for XML processing:&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SAXParser saxParser = SAXParserFactory.newInstance().newSAXPar\ser();&lt;br /&gt;saxParser.parse(new ByteArrayInputStream("&amp;lt;aaa&amp;gt;bbb&amp;lt;/aaa&amp;gt;".getBytes()), new DefaultHandler());&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Above is simplest sample. Now I am going to show parsing with validation by SAX. &lt;br /&gt;Let's create simple SAX parser handler:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class PhoneBookHandler extends DefaultHandler{&lt;br /&gt;&amp;nbsp;public void startElement(String uri, String localName, String name,  Attributes attributes) throws SAXException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(localName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;super.startElement(uri, localName, name, attributes);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public void error(SAXParseException e) throws SAXException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;super.error(e);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And main code:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javax.xml.parsers.SAXParser;&lt;br /&gt;import javax.xml.parsers.SAXParserFactory;&lt;br /&gt;import org.xml.sax.helpers.DefaultHandler;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;SAXParserFactory pf = SAXParserFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;pf.setNamespaceAware(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;pf.setValidating(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;SAXParser p = pf.newSAXParser();&lt;br /&gt;&amp;nbsp;&amp;nbsp;p.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");&lt;br /&gt;&amp;nbsp;&amp;nbsp;p.parse("D:/dev/Temp_java/src/com/PhoneBook.xml", new PhoneBookHandler());&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;If you do not have schemaLocation in your xml file, you can define schema location in parser property:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;p.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", new File("%PATH_TO_YOUR_XSD%/PhoneBook.xsd"));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span class="snippet"&gt;schemaSource &lt;/span&gt;property in parser is more important than &lt;span class="snippet"&gt;schemaLocation&lt;/span&gt; in xml instance.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;DOM&lt;/b&gt; - document object model&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javax.xml.parsers.*;&lt;br /&gt;...&lt;br /&gt;DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();&lt;br /&gt;DocumentBuilder db = dbf.newDocumentBuilder();&lt;br /&gt;Document doc = db.parse("D:/dev/Temp_java/src/com/xml.xml");  System.out.println(doc.getElementsByTagName("Record").item(0).getFirstChild().getNextSibling());&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;JDOM&lt;/b&gt; - java-oriented (not XML) representation of an XML document&lt;/i&gt;&lt;br /&gt;JDOM is the Java-based solution for accessing, manipulating, and outputting XML data from Java code. It corresponds JSR-102 - API for easy and efficient reading, manipulation, and writing of XML documents and XML data.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SAXBuilder builder = new SAXBuilder();&lt;br /&gt;Document doc = builder.build("D:/dev/Temp_java/src/com/PhoneBook.xml");&lt;br /&gt;System.out.println(doc.getRootElement().getChildren().get(0).toString());&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;StAX&lt;/b&gt; - Streaming API for XML&lt;/i&gt;&lt;br /&gt;JSR 173 defines a pull streaming model, StAX (short for "Streaming API for XML"), for processing XML documents. In this model, unlike in SAX, the client can start, proceed, pause, and resume the parsing process. The client has complete control.&lt;br /&gt;A StAX Implementation:&lt;br /&gt; - Sun's Implementation - SJSXP&lt;br /&gt; - BEA Reference Implementation&lt;br /&gt; - WoodSToX XML Processor&lt;br /&gt; - Oracle StAX Pull Parser Preview&lt;br /&gt; - Codehaus StAX&lt;br /&gt;&lt;i&gt;Sun Java Streaming XML Parser - &lt;b&gt;SJSXP&lt;/b&gt;&lt;/i&gt; - is an implementation of the StAX API. We need sjsxp.jar and jsr173_1.0_api.jar in class path&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import javax.xml.stream.XMLInputFactory;&lt;br /&gt;import javax.xml.stream.XMLStreamConstants;&lt;br /&gt;import javax.xml.stream.XMLStreamReader;&lt;br /&gt;&lt;br /&gt;public class Main  {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;FileInputStream fileInputStream = new FileInputStream("D:/dev/Temp_java/src/com/PhoneBook.xml");&lt;br /&gt;&amp;nbsp;&amp;nbsp;XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(fileInputStream);&lt;br /&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;while (true) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int event = xmlStreamReader.next();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (event == XMLStreamConstants.END_DOCUMENT) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlStreamReader.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (event == XMLStreamConstants.START_ELEMENT) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(xmlStreamReader.getLocalName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;PhoneBook&lt;br /&gt;BookRecord&lt;br /&gt;id&lt;br /&gt;name&lt;br /&gt;address&lt;br /&gt;email&lt;br /&gt;phone&lt;br /&gt;BookRecord&lt;br /&gt;id&lt;br /&gt;name&lt;br /&gt;address&lt;br /&gt;email&lt;br /&gt;phone&lt;br /&gt;BookRecord&lt;br /&gt;id&lt;br /&gt;name&lt;br /&gt;address&lt;br /&gt;email&lt;br /&gt;phone&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Apache &lt;b&gt;Axiom&lt;/b&gt; - AXis Object Model&lt;/i&gt; - the XML object model that uses StAX as its underlying XML parsing methodology.&lt;br /&gt;XML infoset refers to the information included inside the XML, and for programmatic manipulation it is convenient to have a representation of this XML infoset in a language specific manner. For an object oriented language the obvious choice is a model made up of objects. DOM and JDOM are two such XML models. Axiom is too, but it uses "pull parsing" - a recent trend in XML processing. Axiom is based on StAX (JSR 173 ), which is the standard streaming pull parser API. Axiom needs JAXP 1.3 so java 5 should be used, or -Djava.endorsed.dirs=D:/env/xml/jaxp-1_3 should be set.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import javax.xml.stream.XMLInputFactory;&lt;br /&gt;import javax.xml.stream.XMLStreamReader;&lt;br /&gt;import org.apache.axiom.om.OMElement;&lt;br /&gt;import org.apache.axiom.om.impl.builder.StAXOMBuilder;&lt;br /&gt;&lt;br /&gt;public class Main  {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;String xmlFName = "D:/dev/Temp_java/src/com/PhoneBook.xml";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(xmlFName));&lt;br /&gt;&amp;nbsp;&amp;nbsp;StAXOMBuilder builder = new StAXOMBuilder(parser);&lt;br /&gt;&amp;nbsp;&amp;nbsp;OMElement documentElement =  builder.getDocumentElement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(documentElement.getChildElements().next());&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Xerces&lt;/b&gt; - Apache parsers that supports standard APIs&lt;/i&gt; - most popular SAX and DOM parser.&lt;br /&gt;Xerces is a family of software packages for parsing and manipulating XML, it provides both XML parsing and generation.&lt;br /&gt;Creating a DOM Parser:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import org.apache.xerces.parsers.DOMParser;&lt;br /&gt;import org.w3c.dom.Document;&lt;br /&gt;&lt;br /&gt;public class Main  {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;String xmlFile = "D:/dev/Temp_java/src/com/PhoneBook.xml"; &lt;br /&gt;&amp;nbsp;&amp;nbsp;DOMParser parser = new DOMParser();&lt;br /&gt;&amp;nbsp;&amp;nbsp;parser.parse(xmlFile);&lt;br /&gt;&amp;nbsp;&amp;nbsp;Document document = parser.getDocument();&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(document.getChildNodes().item(0).getNodeName());  &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;pb:PhoneBook&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Creating a SAX Parser:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import org.xml.sax.AttributeList;&lt;br /&gt;import org.xml.sax.DocumentHandler;&lt;br /&gt;import org.xml.sax.Locator;&lt;br /&gt;import org.xml.sax.Parser;&lt;br /&gt;import org.xml.sax.SAXException;&lt;br /&gt;import org.xml.sax.helpers.ParserFactory;&lt;br /&gt;&lt;br /&gt;public class Main  implements DocumentHandler {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public static void main(String argv[]) throws Exception  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;String xmlFile = "D:/dev/Temp_java/src/com/PhoneBook.xml"; &lt;br /&gt;&amp;nbsp;&amp;nbsp;String parserClass = "org.apache.xerces.parsers.SAXParser";&lt;br /&gt;&amp;nbsp;&amp;nbsp;Parser parser = ParserFactory.makeParser(parserClass);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;parser.setDocumentHandler(new Main());&lt;br /&gt;&amp;nbsp;&amp;nbsp;parser.parse(xmlFile);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public void characters(char[] ch, int start, int length) throws SAXException {}&lt;br /&gt;&amp;nbsp;public void endDocument() throws SAXException {}&lt;br /&gt;&amp;nbsp;public void endElement(String name) throws SAXException {}&lt;br /&gt;&amp;nbsp;public void ignorableWhitespace(char[] ch, int start, int length){}&lt;br /&gt;&amp;nbsp;public void processingInstruction(String target, String data)throws SAXException {}&lt;br /&gt;&amp;nbsp;public void setDocumentLocator(Locator locator) {}&lt;br /&gt;&amp;nbsp;public void startDocument() throws SAXException {}&lt;br /&gt;&amp;nbsp;public void startElement(String name, AttributeList atts) throws SAXException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(name);  &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;div class="console"&gt;&lt;br /&gt;pb:PhoneBook&lt;br /&gt;pb:BookRecord&lt;br /&gt;pb:id&lt;br /&gt;pb:name&lt;br /&gt;pb:address&lt;br /&gt;pb:email&lt;br /&gt;pb:phone&lt;br /&gt;pb:BookRecord&lt;br /&gt;pb:id&lt;br /&gt;pb:name&lt;br /&gt;pb:address&lt;br /&gt;pb:email&lt;br /&gt;pb:phone&lt;br /&gt;pb:BookRecord&lt;br /&gt;pb:id&lt;br /&gt;pb:name&lt;br /&gt;pb:address&lt;br /&gt;pb:email&lt;br /&gt;pb:phone&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Crimson XML&lt;/b&gt; – A faster SAX and DOM parser&lt;/i&gt;&lt;br /&gt;...&lt;br /&gt;&lt;i&gt;&lt;b&gt;Sparta XML&lt;/b&gt; – A fast and small SAX and DOM parser&lt;/i&gt; also includes an XPath subset&lt;br /&gt;...&lt;br /&gt;&lt;i&gt;&lt;b&gt;StelsXML&lt;/b&gt; is a JDBC type 4 driver that allows to perform SQL queries and other JDBC operations on XML files&lt;/i&gt;&lt;br /&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-4569805626545283544?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/4569805626545283544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=4569805626545283544' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4569805626545283544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4569805626545283544'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml-parsing-xml.html' title='Java and XML: parsing XML'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-6131573614109471329</id><published>2008-07-02T13:19:00.000+03:00</published><updated>2008-07-09T17:29:28.687+03:00</updated><title type='text'>Java and XML: intro</title><content type='html'>Let's consider PhoneBook.xml:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;pb:PhoneBook  xmlns:pb="http://www.epam.com/com/PhoneBook" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epam.com/com/PhoneBook PhoneBook.xsd"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;pb:BookRecord&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:id&amp;gt;0&amp;lt;/pb:id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:name&amp;gt;Alex&amp;lt;/pb:name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:address&amp;gt;Kuiv, Kominterna 28&amp;lt;/pb:address&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:email&amp;gt;aillusions@gmail.com&amp;lt;/pb:email&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:phone&amp;gt;+380664392111&amp;lt;/pb:phone&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/pb:BookRecord&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;pb:BookRecord&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:id&amp;gt;1&amp;lt;/pb:id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:name&amp;gt;Zhanna&amp;lt;/pb:name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:address&amp;gt;Kuiv, Showkunenko 3&amp;lt;/pb:address&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:email&amp;gt;estetka@mail.ru&amp;lt;/pb:email&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pb:phone&amp;gt;+380666464111&amp;lt;/pb:phone&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/pb:BookRecord&amp;gt;&lt;br /&gt;&amp;lt;/pb:PhoneBook&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;xsd file PhoneBook.xsd:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.epam.com/com/PhoneBook" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;xsd:element name="PhoneBook"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:sequence minOccurs="0" maxOccurs="unbounded"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:element name="BookRecord"&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:complexType&amp;gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:sequence minOccurs="0"&amp;gt;&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:element type="xsd:int" name="id"  /&amp;gt;&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:element type="xsd:string" name="name" /&amp;gt;&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:element type="xsd:string" name="address" /&amp;gt;&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:element type="xsd:string" name="email" /&amp;gt;&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsd:element type="xsd:string" name="phone" /&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsd:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsd:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsd:element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsd:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/xsd:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/xsd:element&amp;gt;&lt;br /&gt;&amp;lt;/xsd:schema&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;xsl file PhoneBook.xsl:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;  &lt;br /&gt;&amp;nbsp;&amp;lt;xsl:template match="/"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;strong&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:text&amp;gt;Value&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/strong&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/xsl:template&amp;gt;  &lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-6131573614109471329?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/6131573614109471329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=6131573614109471329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6131573614109471329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6131573614109471329'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/07/java-and-xml.html' title='Java and XML: intro'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-3885777699643484446</id><published>2008-06-27T13:37:00.000+03:00</published><updated>2008-07-08T08:05:34.246+03:00</updated><title type='text'>What new in j2se 1.5.0</title><content type='html'>- added in java.util.Arrays static toString() method&lt;br /&gt;- added generics&lt;br /&gt;- hot swap realised&lt;br /&gt;- added StringBuilder. It is identical to StringBuffer except that it is not synchronized. In single-threaded programs StringBuilder is slightly faster.&lt;br /&gt;- added XML validation package at javax.xml.validation and the XPath libraries at javax.xml.xpath&lt;br /&gt;- added annotation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-3885777699643484446?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/3885777699643484446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=3885777699643484446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3885777699643484446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3885777699643484446'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/06/what-new-in-j2se-150.html' title='What new in j2se 1.5.0'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-3111500228770334355</id><published>2008-06-18T13:16:00.000+03:00</published><updated>2008-07-08T08:26:01.132+03:00</updated><title type='text'>Programming Ideas</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_A2LVSsaF3eo/SFkhb-PjhcI/AAAAAAAAAHE/XBYpm6v-BYg/s1600-h/rostok.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 93px; height: 98px;" src="http://2.bp.blogspot.com/_A2LVSsaF3eo/SFkhb-PjhcI/AAAAAAAAAHE/XBYpm6v-BYg/s320/rostok.jpg" alt="" id="BLOGGER_PHOTO_ID_5213234808106485186" border="0" /&gt;&lt;/a&gt;There are a lot of obstruction on the way of new programmer. If he or she is newbie and does not have access to real development process it means he or she does not have access to best practice and up-to-date knowledges about technologies, tools, approaches etc. But most substantial issue is lack interesting and useful task for practice and develop skills. So I have one proposal as choice to resolve that problem: &lt;span style="color: rgb(255, 0, 0);font-family:arial;font-size:100%;"  &gt;be imitator.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;Yeah. Just try to copy existing well knowing functionality or application. It is not new idea, I know, but it is not so obvious to use this method in every day. I have seen movie about some painter who trained to draw by copy another's picture. Let's contrive some examples:&lt;br /&gt;- Calc&lt;br /&gt;- Excel&lt;br /&gt;- Lingvo&lt;br /&gt;- TotalCommander&lt;br /&gt;- Bizarre&lt;br /&gt;- BlogSpot&lt;br /&gt;- Eclipse&lt;br /&gt;- gmail&lt;br /&gt;- forum&lt;br /&gt;- CMS&lt;br /&gt;- game ..&lt;br /&gt;Or only functionality:&lt;br /&gt;- Java collection implementation&lt;br /&gt;- Java ORM implementation&lt;br /&gt;- java.lang.String implementation&lt;br /&gt;&lt;br /&gt;And also some notes:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//---------------&lt;br /&gt;System.out.println(  new SimpleDateFormat("yyyy-MMM-dd hh:mm:ss").format(new Date()));&lt;br /&gt;System.out.println(  new SimpleDateFormat("yyyy-MMM-dd (E) hh:mm:ss [z]", Locale.ENGLISH).parse("2008-Jun-27 (Fri) 01:18:46 [EEST]"));&lt;br /&gt;//---------------&lt;br /&gt;new StringBuilder("qwerty").reverse().toString();&lt;br /&gt;//---------------&lt;br /&gt;public enum Status {&lt;br /&gt;Open("O"), Closed("C"), Reopened("R");&lt;br /&gt;  final String code;&lt;br /&gt;  Status(String code) {&lt;br /&gt;      this.code = code;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;//---------------&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-3111500228770334355?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/3111500228770334355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=3111500228770334355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3111500228770334355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3111500228770334355'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/06/programming-ideas.html' title='Programming Ideas'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_A2LVSsaF3eo/SFkhb-PjhcI/AAAAAAAAAHE/XBYpm6v-BYg/s72-c/rostok.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-3757033650606714694</id><published>2008-06-03T14:15:00.000+03:00</published><updated>2008-06-04T18:37:14.487+03:00</updated><title type='text'>Web Service Development</title><content type='html'>JAX-RPC is a Java community effort to eliminate problems with Web service implementations and provide a well-known application programming interface (API) on both the client and the server side.  JAX-RPC provides an easy to develop programming model for development of SOAP based Web services.&lt;br /&gt;&lt;br /&gt;So in details: JAX-RPC (java API for XML based RPC) is the API specification for J2EE 1.4 and presented as RFC 101. SUN (in WSDP) and Apache (in AXIS) have its own implementation that API. JAX-RPC defines API for creating SEI (service end point) and client endpoint. JAX-RPC enables a Web service endpoint to be developed using either a &lt;a href="http://java.sun.com/products/servlet/index.jsp"&gt;Java Servlet&lt;/a&gt; or &lt;a href="http://java.sun.com/products/ejb/index.jsp"&gt;Enterprise JavaBeans (EJB)&lt;/a&gt; component model (JSR 109). A Web service endpoint is deployed on either the Web container or EJB container based on the corresponding component model.&lt;br /&gt;(I mean JAX-RPC 1.1.)&lt;br /&gt;The latest version of JAX-RPC is 2.0. But it has new name: JAX-WS 2.0 -  &lt;a href="http://jcp.org/en/jsr/detail?id=224"&gt;JSR-224&lt;/a&gt;. JAX-WS programming model is JavaEE5 compliant.&lt;br /&gt;EJB3 stateless session bean - JAX-WS.&lt;br /&gt;EJB-2.1 stateless session bean - JAX-RPC.&lt;br /&gt;&lt;br /&gt;A JAX-RPC client can use stubs-based, dynamic proxy or dynamic invocation interface (DII) programming models to invoke a heterogeneous Web service endpoint. JAX-RPC uses &lt;a href="http://java.sun.com/webservices/saaj/index.jsp"&gt;SAAJ API&lt;/a&gt; for SOAP message handlers.&lt;br /&gt;&lt;br /&gt;Using wscompile from WSDP toolkit made by SUN:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;wscompile.bat -classpath build/classes -gen:server -f:rpcliteral config.xml -d build/classes -nd WebContent/WEB-INF/wsdl -mapping  WebContent/WEB-INF/mapping.xml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-d    directory to put generated and compiled classes&lt;br /&gt;-nd  directory to put "non classes" generated stuff (wsdl etc.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-3757033650606714694?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/3757033650606714694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=3757033650606714694' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3757033650606714694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3757033650606714694'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/06/web-service-development.html' title='Web Service Development'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2933322128670432555</id><published>2008-05-28T14:07:00.000+03:00</published><updated>2008-07-08T08:27:26.580+03:00</updated><title type='text'>Remote debugging</title><content type='html'>JBoss:  &lt;br /&gt;&lt;code&gt;&lt;br /&gt;set JAVA_OP TS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 %JAVA_OPTS%&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;WebLogic:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@REM  insert this line&lt;br /&gt;set debugFlag=true&lt;br /&gt;@REM  before:       &lt;br /&gt;if "%debugFlag%"=="true" (&lt;br /&gt;set JAVA_DEBUG=-Xdebug -Xnoagent  -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=n -Djava.compiler=NONE&lt;br /&gt;set JAVA_OPTIONS=%JAVA_OPTIONS% %enableHotswapFlag% -ea -da:com.bea... -da:javelin... -da:weblogic... -ea:com.bea.wli... -ea:com.bea.broker... -ea:com.bea.sbconsole...&lt;br /&gt;) else (&lt;br /&gt;set JAVA_OPTIONS=%JAVA_OPTIONS% %enableHotswapFlag% -da&lt;br /&gt;)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Dynamo 6.3:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;startDynamo.bat drp1 -m  sfx -debug -debugPort 8787&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tomcat:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Set environment variables JPDA_ADDRESS=8000 and JPDA_TRANSPORT=dt_socket and then start tomcat using catalina jpda start&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2933322128670432555?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2933322128670432555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2933322128670432555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2933322128670432555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2933322128670432555'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/05/remote-debugging.html' title='Remote debugging'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-104020334739509239</id><published>2008-05-26T11:09:00.000+03:00</published><updated>2008-07-07T17:58:33.265+03:00</updated><title type='text'>Java Binary /  XML Serialization</title><content type='html'>XMLEncoder under Java 5 did not cope with serialization task:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.beans.XMLEncoder;&lt;br /&gt;import java.io.BufferedOutputStream;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.Map;&lt;br /&gt;import com.thoughtworks.xstream.XStream;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) throws FileNotFoundException {&lt;br /&gt;  HashMap hm = new HashMap();&lt;br /&gt;  hm.put("string1", new ForSer("string1", 10));&lt;br /&gt;  hm.put("string2", new ForSer("string2", 101));&lt;br /&gt;  hm.put("string3", new ForSer("string3", 1011));&lt;br /&gt;  hm.put("string4", new ForSer("string4", 10111));&lt;br /&gt;  // FileOutputStream fos = new FileOutputStream("d:/foo.xml");&lt;br /&gt;  // XMLEncoder xenc = new XMLEncoder(fos);&lt;br /&gt;  // xenc.writeObject(hm);&lt;br /&gt;  // xenc.flush();&lt;br /&gt;  // xenc.close(); &lt;br /&gt;  XStream xstream = new XStream();&lt;br /&gt;  System.out.println(xstream.toXML(hm));&lt;br /&gt;&lt;br /&gt;//Binary:&lt;br /&gt;   ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();&lt;br /&gt;ObjectOutputStream oos = new ObjectOutputStream(baos) ;&lt;br /&gt;oos.writeObject(new ForSer("string", 111));&lt;br /&gt;byte[] bar = baos.toByteArray();&lt;br /&gt;System.out.println(new String(bar));&lt;br /&gt;  }&lt;br /&gt;static class ForSer implements Serializable {&lt;br /&gt;private static final long serialVersionUID = 1L;&lt;br /&gt;private String str;&lt;br /&gt;private int count;&lt;br /&gt;&lt;br /&gt;public String getStr() {&lt;br /&gt;    return str;&lt;br /&gt;}&lt;br /&gt;public void setStr(String str) {&lt;br /&gt;    this.str = str;&lt;br /&gt;}&lt;br /&gt;public int getCount() {&lt;br /&gt;    return count;&lt;br /&gt;}&lt;br /&gt;public void setCount(int count) {&lt;br /&gt;    this.count = count;&lt;br /&gt;}&lt;br /&gt;public ForSer(String str, int count) {&lt;br /&gt;    super();&lt;br /&gt;    this.str = str;&lt;br /&gt;    this.count = count;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-104020334739509239?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/104020334739509239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=104020334739509239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/104020334739509239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/104020334739509239'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/05/java-xml-serialization.html' title='Java Binary /  XML Serialization'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-517854855842685414</id><published>2008-05-05T16:06:00.000+03:00</published><updated>2008-05-07T10:24:42.794+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><title type='text'>JSP Mix</title><content type='html'>&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1"&lt;br /&gt;pageEncoding="ISO-8859-1"%&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;%@taglib uri="http://java.sun.com/jstl/core"  prefix="c" %&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&amp;gt;&lt;br /&gt;&amp;lt; title&amp;gt; Insert title here &amp;lt;/title &amp;gt;&lt;br /&gt;&amp;lt;link href="css/index.css" rel="stylesheet" type="text/css"&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;Hello &amp;lt;br /&amp;gt; My darling.&lt;br /&gt;&amp;lt;%-- SCRIPTING ELEMENTS START --%&amp;gt;&lt;br /&gt;&amp;lt;%    //scriplet&lt;br /&gt;out.println("-= ## =-");&lt;br /&gt;JspWriter jw = out;&lt;br /&gt;response.getWriter().write("*-*-*-*-*");&lt;br /&gt;%&amp;gt;&lt;br /&gt;&amp;lt;%=    //expression&lt;br /&gt;new Integer(50).toString()&lt;br /&gt;%&amp;gt;&lt;br /&gt;&amp;lt;%! //declaration&lt;br /&gt;/*&lt;br /&gt;public void init(){&lt;br /&gt;}&lt;br /&gt;public void destroy(){&lt;br /&gt;}*/&lt;br /&gt;public void jspInit(){&lt;br /&gt;Servlet s = (Servlet)this;&lt;br /&gt;JspPage jp =(JspPage)this;&lt;br /&gt;HttpJspPage hjp = (HttpJspPage)this;&lt;br /&gt;System.out.println("jspInit()");&lt;br /&gt;}&lt;br /&gt;public void jspDestroy(){&lt;br /&gt;System.out.println("jspDestroy()");&lt;br /&gt;}&lt;br /&gt;%&amp;gt;&lt;br /&gt;&amp;lt;%-- SCRIPTING ELEMENTS END --%&amp;gt;&lt;br /&gt;&amp;lt;!-- HTML Comment --   &amp;gt;&lt;br /&gt;&amp;lt;%-- JSP Comment --%   &amp;gt;&lt;br /&gt;&amp;lt;jsp:useBean id="myBean" scope="application"  class="java.lang.String"&amp;gt;&amp;lt;/jsp:useBean&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_A2LVSsaF3eo/SCFUXnZPePI/AAAAAAAAAG8/-bMVGkBms-I/s1600-h/rainbow.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_A2LVSsaF3eo/SCFUXnZPePI/AAAAAAAAAG8/-bMVGkBms-I/s200/rainbow.jpg" alt="" id="BLOGGER_PHOTO_ID_5197528209650841842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;EL (Expression Language) was introduces in JSP 2.0!&lt;br /&gt;&lt;br /&gt;Some interesting jsp code to generate colored effects:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;% for(int i=0; i&amp;lt; 4095; i++){%&amp;gt;&lt;br /&gt;&amp;lt;div style="&lt;br /&gt;background-color: #&amp;lt;%=Integer.toHexString(0x1000|i).substring(1)%&amp;gt;;&lt;br /&gt;height:1px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;%}%&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Form with drop-down list that save its state:&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;form action="index.jsp" method="get"&amp;gt;&lt;br /&gt; &amp;lt;select size="1" &amp;lt;%-- multiple="multiple" --%&amp;gt; name="join"&amp;gt;&lt;br /&gt; &amp;lt;option &amp;lt;%= request.getParameter("join") == null ? "selected" : "" %&amp;gt; &amp;gt;&amp;lt;/option&amp;gt;&lt;br /&gt; &amp;lt;option &amp;lt;%= request.getParameter("join") != null &amp;amp;&amp;amp; request.getParameter("join").equals("right") ? "selected" : "" %&amp;gt; value="right"&amp;gt;right&amp;lt;/option&amp;gt;&lt;br /&gt; &amp;lt;option &amp;lt;%= request.getParameter("join") != null &amp;amp;&amp;amp; request.getParameter("join").equals("left") ? "selected" : "" %&amp;gt; value="left"&amp;gt;left&amp;lt;/option&amp;gt;&lt;br /&gt; &amp;lt;option &amp;lt;%= request.getParameter("join") != null &amp;amp;&amp;amp; request.getParameter("join").equals("full") ? "selected" : "" %&amp;gt; value="full"&amp;gt;full&amp;lt;/option&amp;gt;&lt;br /&gt; &amp;lt;/select&amp;gt;&lt;br /&gt; &amp;lt;input type="submit"  value="sub"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-517854855842685414?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/517854855842685414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=517854855842685414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/517854855842685414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/517854855842685414'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/05/clear-jsp.html' title='JSP Mix'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_A2LVSsaF3eo/SCFUXnZPePI/AAAAAAAAAG8/-bMVGkBms-I/s72-c/rainbow.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-5735541669172408935</id><published>2008-04-10T13:13:00.003+03:00</published><updated>2009-04-24T14:34:24.582+03:00</updated><title type='text'>Java just for fun</title><content type='html'>fun 1:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1 = 0.9999999999999999&lt;/code&gt;&lt;br /&gt;fun 2:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;0.0175 * 100000 = 1750.0000000000002&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;fun 3:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;System.out.println(new Float(1/0.).isInfinite());&lt;br /&gt;System.out.println(new Float(0/0.).isNaN());&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;fun 4:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Integer a = 10;&lt;br /&gt;Integer b = 10;&lt;br /&gt;System.out.println(a == b);&lt;br /&gt;//true&lt;br /&gt;Integer a = 10000;&lt;br /&gt;Integer b = 10000;&lt;br /&gt;System.out.println(a == b);&lt;br /&gt;//false&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;LOL&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;System.out.println( 9.86 + 60.88); // --&gt; 70.74000000000001&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-5735541669172408935?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/5735541669172408935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=5735541669172408935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5735541669172408935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/5735541669172408935'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/04/java-just-for-fun.html' title='Java just for fun'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-8986419300358090863</id><published>2008-03-26T14:28:00.002+02:00</published><updated>2008-03-26T14:29:14.631+02:00</updated><title type='text'>J2EE Security with WebLogic 9.2.1 Part 3. Web Services</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-8986419300358090863?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/8986419300358090863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=8986419300358090863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8986419300358090863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8986419300358090863'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/j2ee-security-with-weblogic-921-part-3.html' title='J2EE Security with WebLogic 9.2.1 Part 3. Web Services'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2772708935383334262</id><published>2008-03-26T14:28:00.001+02:00</published><updated>2008-03-27T15:13:34.647+02:00</updated><title type='text'>J2EE Security with WebLogic 9.2.1 Part 2. EJB</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_A2LVSsaF3eo/R-udd9tGWpI/AAAAAAAAAG0/9XSWzUrIt00/s1600-h/wine-glass.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5182408934325377682" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_A2LVSsaF3eo/R-udd9tGWpI/AAAAAAAAAG0/9XSWzUrIt00/s200/wine-glass.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Let's consider enterprise bean (EJB 2.1 with WebLogic annotations):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import java.util.Calendar;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import javax.ejb.SessionBean;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejb.GenericSessionBean;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejbgen.RemoteMethod;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejbgen.Session;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejbgen.JndiName;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejbgen.FileGeneration;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejbgen.Constants;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejbgen.RoleMappings;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import weblogic.ejbgen.RoleMapping;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;@Session(ejbName = "MyBean")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;@RoleMappings(&lt;/span&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;value={@RoleMapping(principals&lt;/span&gt;&lt;span style="font-family:arial;font-size:78%;"&gt; = "alex", roleName = "admin")})&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;@JndiName(remote = "ejb.MyBeanRemoteHome")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;@FileGeneration(remoteClass = Constants.Bool.TRUE, remoteHome = Constants.Bool.TRUE, localClass = Constants.Bool.FALSE, localHome = Constants.Bool.FALSE)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;public class MyBean extends GenericSessionBean implements SessionBean { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;private static final long serialVersionUID = 1L;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;public void ejbCreate() { } &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;@RemoteMethod(roles="admin") &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;public String getDate() { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;System.out.println(getSessionContext().getCallerPrincipal().getName()); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;return "Date from ejb is: " + Calendar.getInstance().getTime().toString();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also user alex should be created in Web Logic Server console for default realm. Let's try to invoke that bean from next code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;Hashtable&lt;string,&gt; env = new Hashtable&lt;string,&gt;(); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");&lt;br /&gt;env.put(Context.SECURITY_PRINCIPAL, "weblogic");&lt;br /&gt;env.put(Context.SECURITY_CREDENTIALS, "weblogic");&lt;br /&gt;env.put(Context.PROVIDER_URL, "t3://localhost:7001"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;Context ct = new InitialContext(env);&lt;br /&gt;Object homeObject = ct.lookup("ejb.MyBeanRemoteHome");&lt;br /&gt;MyBeanRemoteHome home = (MyBeanRemoteHome) PortableRemoteObject.narrow( homeObject, MyBeanRemoteHome.class);&lt;br /&gt;System.out.println(home.create().getDate());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The result is: &lt;span style="font-family:arial;font-size:85%;"&gt;java.rmi.AccessException: [EJB:010160]Security Violation: User: 'weblogic' has insufficient permission to access EJB...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(Also we can use next code to retrieve Initial Context:&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;weblogic.jndi.Environment env = new Environment(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;env.setProviderUrl("t3://localhost:7001"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;env.setInitialContextFactory("weblogic.jndi.WLInitialContextFactory"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;env.setSecurityPrincipal("alex"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;env.setSecurityCredentials( "weblogic"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;javax.naming.InitialContext ct = new InitialContext(env.getInitialContext().getEnvironment());&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Let's replace &lt;span style="font-family:arial;font-size:78%;"&gt;env.put(Context.SECURITY_PRINCIPAL, "weblogic")&lt;/span&gt; to &lt;span style="font-family:arial;font-size:78%;"&gt;env.put(Context.SECURITY_PRINCIPAL, "alex")&lt;/span&gt;. The result is Ok.&lt;br /&gt;&lt;br /&gt;Let's do:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;//env.put(Context.SECURITY_PRINCIPAL, "alex"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;//env.put(Context.SECURITY_CREDENTIALS, "weblogic");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The result is: &lt;span style="font-family:arial;font-size:85%;"&gt;Security Violation: User: 'anonymous&lt;anonymous&gt;' has insufficient permission to access EJB..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's use JAAS:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.net.HttpURLConnection;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.security.PrivilegedAction;&lt;br /&gt;import java.util.Hashtable;&lt;br /&gt;&lt;br /&gt;import javax.naming.Context;&lt;br /&gt;import javax.naming.InitialContext;&lt;br /&gt;import javax.naming.NamingException;&lt;br /&gt;import javax.rmi.PortableRemoteObject;&lt;br /&gt;import javax.security.auth.login.*;&lt;br /&gt;import com.MyBeanRemoteHome;&lt;br /&gt;import weblogic.security.Security;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;LoginContext loginContext = null;&lt;br /&gt;loginContext = new LoginContext("Sample", new SampleCallbackHandler("alex", "weblogic", "t3://localhost:7001"));&lt;br /&gt;loginContext.login();&lt;br /&gt;Security.runAs(loginContext.getSubject(), new EjbInvocation());&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static class EjbInvocation implements PrivilegedAction {&lt;br /&gt;public Object run() {&lt;br /&gt;Hashtable&lt;string,&gt; env = new Hashtable&lt;string,&gt;();&lt;br /&gt;env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");&lt;br /&gt;env.put(Context.PROVIDER_URL, "t3://localhost:7001");&lt;br /&gt;Context ct = new InitialContext(env);&lt;br /&gt;Object homeObject = ct.lookup("ejb.MyBeanRemoteHome");&lt;br /&gt;MyBeanRemoteHome home = (MyBeanRemoteHome) PortableRemoteObject.narrow( homeObject, MyBeanRemoteHome.class);&lt;br /&gt;System.out.println(home.create().getDate());&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now it's okay too.&lt;br /&gt;&lt;br /&gt;Next part of research is accessing EJB from secured servlet described in previous post. Servlet and EJB belong to one Realm. Servlet just contain code in service method:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;Hashtable&lt;string,&gt; env = new Hashtable&lt;string,&gt;(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;env.putContext.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;env.put(Context.PROVIDER_URL, "t3://localhost:7001"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;Object homeObject = new InitialContext(env).lookup("ejb.MyBeanRemoteHome"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;MyBeanRemoteHome home = (MyBeanRemoteHome) PortableRemoteObject.narrow(homeObject, MyBeanRemoteHome.class); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;home.create().getDate();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So access to that sarvlet can be done only by authenticated user. Let's try to access as weblogic user. Result is: Security Violation: User: 'weblogic' has insufficient permission to access EJB:..&lt;br /&gt;Nice! Next login as alex user. Result is Ok (ejb method returned string successfuly). Great. Servlet accesseb EJB with account of user that has been invoking the servlet.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2772708935383334262?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2772708935383334262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2772708935383334262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2772708935383334262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2772708935383334262'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/j2ee-security-with-weblogic-921-part-2.html' title='J2EE Security with WebLogic 9.2.1 Part 2. EJB'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/R-udd9tGWpI/AAAAAAAAAG0/9XSWzUrIt00/s72-c/wine-glass.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-4860938355506876703</id><published>2008-03-26T12:42:00.000+02:00</published><updated>2008-03-27T14:54:37.453+02:00</updated><title type='text'>J2EE Security with WebLogic 9.2.1 Part 1. Web</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_A2LVSsaF3eo/R-uY99tGWnI/AAAAAAAAAGk/Tf3HuKByKhk/s1600-h/security.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5182403986523052658" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 134px; CURSOR: hand; HEIGHT: 136px" height="156" alt="" src="http://3.bp.blogspot.com/_A2LVSsaF3eo/R-uY99tGWnI/AAAAAAAAAGk/Tf3HuKByKhk/s200/security.jpg" width="149" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;First of all let us look into web application sequrity. Suppose we have some .war file with servlet com.MyServlet and web.xml:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;web-app id="WebApp_ID" version="2.4"&lt;br /&gt;xmlns="http://java.sun.com/xml/ns/j2ee"&lt;br /&gt;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;display-name&amp;gt;Investigation_web&amp;lt;/display-name&amp;gt;&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;display-name&amp;gt;MyServlet&amp;lt;/display-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;MyServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;com.MyServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;MyServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;/MyServlet&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;welcome-file-list&amp;gt;&lt;br /&gt;&amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;&amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;security-role&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;This is the boss&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;role-name&amp;gt;manager&amp;lt;/role-name&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/security-role&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;security-constraint&amp;gt;&lt;br /&gt;&amp;lt;web-resource-collection&amp;gt;&lt;br /&gt;&amp;lt;web-resource-name&amp;gt;Protected Area&amp;lt;/web-resource-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;http-method&amp;gt;DELETE&amp;lt;/http-method&amp;gt;&lt;br /&gt;&amp;lt;http-method&amp;gt;GET&amp;lt;/http-method&amp;gt;&lt;br /&gt;&amp;lt;http-method&amp;gt;POST&amp;lt;/http-method&amp;gt;&lt;br /&gt;&amp;lt;http-method&amp;gt;PUT&amp;lt;/http-method&amp;gt;&lt;br /&gt;&amp;lt;/web-resource-collection&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;auth-constraint&amp;gt;&lt;br /&gt;&amp;lt;role-name&amp;gt;manager&amp;lt;/role-name&amp;gt;&lt;br /&gt;&amp;lt;/auth-constraint&amp;gt;&lt;br /&gt;&amp;lt;/security-constraint&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;login-config&amp;gt;&lt;br /&gt;&amp;lt;auth-method&amp;gt;FORM&amp;lt;/auth-method&amp;gt;&lt;br /&gt;&amp;lt;realm-name&amp;gt;Example Form-Based Authentication Area&amp;lt;/realm-name&amp;gt;&lt;br /&gt;&amp;lt;form-login-config&amp;gt;&lt;br /&gt;&amp;lt;form-login-page&amp;gt;/login.jsp&amp;lt;/form-login-page&amp;gt;&lt;br /&gt;&amp;lt;form-error-page&amp;gt;/login.jsp&amp;lt;/form-error-page&amp;gt;&lt;br /&gt;&amp;lt;/form-login-config&amp;gt;&lt;br /&gt;&amp;lt;/login-config&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Also weblogic.xml contains:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:arial;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd"&amp;gt;&lt;br /&gt;&amp;lt;wls:context-root&amp;gt;Investigation_web&amp;lt;/wls:context-root&amp;gt;&lt;br /&gt;&amp;lt;wls:security-role-assignment&amp;gt;&lt;br /&gt;&amp;lt;wls:role-name&amp;gt;manager&amp;lt;/wls:role-name&amp;gt;&lt;br /&gt;&amp;lt;wls:principal-name&amp;gt;alex&amp;lt;/wls:principal-name&amp;gt;&lt;br /&gt;&amp;lt;/wls:security-role-assignment&amp;gt;&lt;br /&gt;&amp;lt;/wls:weblogic-web-app&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;And in WebLogic Server console of our Domain we created user alex in default Realm. And finally there is login.jsp:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;&amp;lt;form method="POST" action="j_security_check"&amp;gt;&lt;br /&gt;Username: &amp;lt;input type="text" value="weblogic" name="j_username"&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;Password: &amp;lt;input type="password" value="weblogic" name="j_password"&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Login"&amp;gt;&lt;br /&gt;&amp;lt;input type="reset" value="Reset"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So if user try to access MyServlet or any other resource that meets &lt;url-pattern&gt;&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt; he will be redirected into login page. Also if use &amp;lt;auth-method&amp;gt;BASIC&amp;lt;/auth-method&amp;gt; then no jsp login page is needed instead will be used popup window from your browser.&lt;br /&gt;It is clear but what if we will try to acess URL in java standalone application's code? First of all I consider possibility of using HttpURLConnection as described in previous post of my blog. In that case we can fulfil:&lt;br /&gt;1-request to login page and accept cookie;&lt;br /&gt;2-post form with parameter names that we can find in login page HTML source (usual: username and password) with cookie;&lt;br /&gt;3-request desired resource with cookie.&lt;br /&gt;&lt;br /&gt;But it not seems the solution is simple. There is also Authenticator class to do similar job:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:78%;"&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.net.Authenticator;&lt;br /&gt;import java.net.HttpURLConnection;&lt;br /&gt;import java.net.PasswordAuthentication;&lt;br /&gt;import java.net.URL;&lt;br /&gt;&lt;br /&gt;public class Main { &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;public static void main(String[] args) throws IOException {&lt;br /&gt;Authenticator.setDefault(new SimpleAuthenticator("alex", "password"));&lt;br /&gt;URL myUrl = new URL("http://localhost:7001/Investigation_web/MyServlet");&lt;br /&gt;HttpURLConnection yc = (HttpURLConnection)myUrl.openConnection();&lt;br /&gt;yc.setDoInput(true);&lt;br /&gt;yc.setDoOutput(true);&lt;br /&gt;BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));&lt;br /&gt;String inputLine;&lt;br /&gt;while ((inputLine = in.readLine()) != null)&lt;br /&gt;System.out.println(inputLine);&lt;br /&gt;in.close();&lt;br /&gt;} &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;public static class SimpleAuthenticator extends Authenticator {&lt;br /&gt;private String username;&lt;br /&gt;private String password;&lt;br /&gt;public SimpleAuthenticator(String username, String password) {&lt;br /&gt;this.username = username;&lt;br /&gt;this.password = password; }&lt;br /&gt;protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;return new PasswordAuthentication(username, password.toCharArray());&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;But it approach useful only in case of BASIC auth-method. It is called "authenticate using the digest method". Might be we can use JAAS functionality? Pay attention that to run this code on Java 1.5 you have to add file sample_jaas.config that contains:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;/** Login Configuration for the JAAS Sample Application **/&lt;br /&gt;Sample { weblogic.security.auth.login.UsernamePasswordLoginModule required debug=false;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and add line to java.security:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;login.config.url.1=file:${java.home}/lib/security/sample_jaas.config&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;all those in directory: JAVA_HOME\jre\lib\security.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.net.HttpURLConnection;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.security.PrivilegedAction;&lt;br /&gt;import java.util.Hashtable;&lt;br /&gt;import javax.naming.Context;&lt;br /&gt;import javax.naming.InitialContext;&lt;br /&gt;import javax.naming.NamingException;&lt;br /&gt;import javax.rmi.PortableRemoteObject;&lt;br /&gt;import javax.security.auth.login.*;&lt;br /&gt;import com.MyBeanRemoteHome;&lt;br /&gt;import weblogic.security.Security;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;public class Main {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;LoginContext loginContext = null;&lt;br /&gt;loginContext = new LoginContext("Sample", new SampleCallbackHandler("alex", "weblogic", "t3://localhost:7001"));&lt;br /&gt;loginContext.login();&lt;br /&gt;Security.runAs(loginContext.getSubject(), new WebInvocation());&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;public static class WebInvocation implements PrivilegedAction {&lt;br /&gt;public Object run() {&lt;br /&gt;URL myUrl;&lt;br /&gt;try {&lt;br /&gt;myUrl = new URL("http://localhost:7001/Investigation_web/MyServlet");&lt;br /&gt;HttpURLConnection yc = null;&lt;br /&gt;yc = (HttpURLConnection) myUrl.openConnection();&lt;br /&gt;yc.setDoInput(true);&lt;br /&gt;yc.setDoOutput(true);&lt;br /&gt;BufferedReader in = new BufferedReader(new InputStreamReader(yc&lt;br /&gt;.getInputStream()));&lt;br /&gt;String inputLine;&lt;br /&gt;while ((inputLine = in.readLine()) != null)&lt;br /&gt;System.out.println(inputLine);&lt;br /&gt;in.close();&lt;br /&gt;} catch (IOException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No.. result is the same - we recieve redirect to login page in case of FORM auth-method and "Response: 401: Unauthorized" for BASIC. What about authenticate with certificates? For now nothing ). There is also question about why code to logout user:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;request.getSession().invalidate();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;does not work in case of BASIC authentication..&lt;br /&gt;&lt;br /&gt;Next let's look into using URLConnection from some secured servlet to it themselves. Result of such invoking is the same as from standalone client: so in case of FORM authentication method request redirected to login page and in case of BASIC authentication method Response: '401: Unauthorized'. So the fact that invoking of some URL is doing from already authenticated code does not matter at all. The code have to tranfer cookie explicitly or use another method to authetication (Authenticator class and probably others). What about using url appending instead cookie? For now nothing again)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-4860938355506876703?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/4860938355506876703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=4860938355506876703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4860938355506876703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4860938355506876703'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/j2ee-security-with-weblogic-921.html' title='J2EE Security with WebLogic 9.2.1 Part 1. Web'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/R-uY99tGWnI/AAAAAAAAAGk/Tf3HuKByKhk/s72-c/security.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2295930527227463911</id><published>2008-03-25T17:00:00.000+02:00</published><updated>2008-03-27T15:00:53.037+02:00</updated><title type='text'>Servlets invoking by java standalone (form posting)</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_A2LVSsaF3eo/R-uaddtGWoI/AAAAAAAAAGs/Ikr_LYVF84g/s1600-h/mosaic.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5182405627200559746" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 162px; CURSOR: hand; HEIGHT: 151px" height="165" alt="" src="http://1.bp.blogspot.com/_A2LVSsaF3eo/R-uaddtGWoI/AAAAAAAAAGs/Ikr_LYVF84g/s200/mosaic.jpg" width="178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Sometimes we have to do access to URL resource or in particular invoke some servlet (via HTTP protocol). There is some different approaches to invocation via HTTP protocol: through GET or through POST. GET request is pretty simple to realize. Just put next code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;String url = http://localhost/AppWeb/myServlet?param1=val1&amp;amp;param2=val2";&lt;br /&gt;URLConnection uc = new URL(url).openConnection();&lt;br /&gt;uc.setDoOutput(true);&lt;br /&gt;uc.setDoInput(true);&lt;br /&gt;//TO DO #1 some code put here to sign request as POST&lt;br /&gt;InputStream istr = uc.getInputStream();&lt;br /&gt;//TO DO #2 something do with respond (istr)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Differences (rather similarities) between &lt;span style="font-family:courier new;font-size:85%;"&gt;URLConnection&lt;/span&gt; and &lt;span style="font-family:courier new;font-size:85%;"&gt;HttpURLConnection&lt;/span&gt; can be shown in next lines:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;URL url = new URL(urlString);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;URLConnection connection = url.openConnection();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;if (connection instanceof HttpURLConnection) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;HttpURLConnection httpConnection = (HttpURLConnection)connection;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Servlet (myServlet) will accept request from first source as GET method. In "TO DO #2" just do something with servlet's respond. In case of HttpURLConnection it is possible to retrieve response code and message: &lt;span style="font-family:courier new;font-size:85%;"&gt;httpConnection.getResponseCode();&lt;/span&gt; or &lt;span style="font-family:courier new;font-size:85%;"&gt;httpConnection.getResponseMessage()&lt;/span&gt; .&lt;br /&gt;It is possible to put next code instead "TO DO #1" to convert that request into POST request:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;BufferedWriter wr = new BufferedWriter(new PrintWriter(uc.getOutputStream()));&lt;br /&gt;wr.write("param3=val3&amp;amp;"); //PAY ATTENTION. SYMBOL &gt; &lt;strong&gt;&amp;amp;&lt;/strong&gt; &lt; param4="val4"&gt;&lt;br /&gt;Just we fulfil some writing into body of our connection, connection become POST request. There are some difficulties with file adding to POST request from java application and treatment those files in servlets. Firstly, for simple html form posting with file fild, form has to be multipart/form-data (enctype) and there is method setRequestProperty(key, value) in our URLConnection to set these property in java code like by html tags:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;form enctype="multipart/form-data" action="DownWithAPI" method="POST"&amp;gt;&lt;br /&gt;&amp;lt;input type="file" name="filetoupload" /&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Go" /&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Secondly we need not write some parameters manualy. Instead we can use some simple API (one java file): &lt;a href="http://www.koders.com/java/fidD2DFE2EAEEE2C1A5BB56629AD65C1FF272EE51A0.aspx"&gt;ClientHttpRequest 1.4&lt;/a&gt; or &lt;a href="http://assets.devx.com/sourcecode/7315.zip"&gt;ClientHttpRequest 1.0&lt;/a&gt;. Using is pretty simple too:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;String url = http://localhost/AppWeb/myServlet?param1=val1&amp;amp;param2=val2";&lt;br /&gt;ClientHttpRequest client = new ClientHttpRequest(url);&lt;br /&gt;client.setParameter("file", new File("d:/dome.txt"));&lt;br /&gt;client.setParameter("param5", "value5");&lt;br /&gt;client.post().read();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now look into more difficult part of work - treatment our request on server side (in servlet). Pay attention that servlet deals with post request in doPost method. Transmitted parameters in both case can be retrieved via &lt;span style="font-family:courier new;font-size:85%;"&gt;HttpServletRequest&lt;/span&gt; parameter (in doGet or doPost) in manner:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;String dataFromClient = request.getParameter("param1");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But in case of &lt;span style="font-family:courier new;font-size:85%;"&gt;multipart/form-data&lt;/span&gt; that approach is not useful. Instead we need to parse &lt;span style="font-family:courier new;font-size:85%;"&gt;request.getInputStream()&lt;/span&gt; as multipart container. To do this I suggest to use API again: &lt;a href="http://www.snippetcenter.org/en/multipart-form-data-reader-s1550.aspx"&gt;form-data Reader&lt;/a&gt; in manner:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Map map = MultipartFormReader.read(request); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;String value1= map.get("SomeParamName1").toString(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;byte[] file =((DataSource) map.get("fileParam1")).getBinaryContent(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;String value2 = map.get("SomeParamName1").toString();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All keys can be retrieved via:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Map map = MultipartFormReader.read(request);&lt;br /&gt;Iterator it = map.keySet().iterator();&lt;br /&gt;while(it.hasNext()){&lt;br /&gt;System.out.println(it.next().toString());&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And also I will talk about downloading with servlet functionality. Method below can clarify this situation:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private void doDownload(HttpServletRequest req, HttpServletResponse resp, String original_filename, InputStream istr){&lt;br /&gt;ServletOutputStream op = resp.getOutputStream();&lt;br /&gt;resp.setContentType("application/octet-stream");&lt;br /&gt;resp.setHeader("Content-Disposition", "attachment; filename=\"" + original_filename + "\"");&lt;br /&gt;byte[] b = new byte[8164];&lt;br /&gt;int len = 0;&lt;br /&gt;int fullLen = 0;&lt;br /&gt;while ((len = istr.read(b, 0, 8164)) != -1){&lt;br /&gt;op.write(b, 0, len);&lt;br /&gt;fullLen = fullLen + len;&lt;br /&gt;}&lt;br /&gt;resp.setContentLength(fullLen);&lt;br /&gt;istr.close();&lt;br /&gt;op.flush();&lt;br /&gt;op.close();&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just put him some InputStream (from file for example or byte array stream). After and before invoking of that method do not invoke any &lt;span style="font-family:courier new;font-size:85%;"&gt;response.getWriter().write(" &lt;some&gt;");&lt;/span&gt; because it will be Exception throwing.&lt;br /&gt;&lt;br /&gt;There are some interesting issue in working with &lt;span style="font-family:courier new;font-size:85%;"&gt;java.net.URLConnection&lt;/span&gt; or&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;HttpURLConnection&lt;/span&gt;. For example it is posible to set some usefull properties:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;String url = http://localhost:8080/MyJavaServer_web/Down;&lt;br /&gt;HttpURLConnection hconn = (HttpURLConnection) new URL(url).openConnection(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;hconn.setDoInput(true);&lt;br /&gt;hconn.setDoOutput(true);&lt;br /&gt;&lt;br /&gt;hconn.setRequestMethod("POST");&lt;br /&gt;&lt;br /&gt;hconn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461)"); &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setRequestProperty("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setRequestProperty("Accept-Language","de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setRequestProperty( "Accept-Encoding","gzip,deflate");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setRequestProperty( "Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setRequestProperty( "Keep-Alive","300"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setRequestProperty( "Proxy-Connection","keep-alive"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setRequestProperty( "Cache-Control","max-age=0"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;conn.setConnectTimeout(5000);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;wr.flush();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After flushing servlet Down will accept POST request from .. Mozilla.&lt;br /&gt;There is also posibility to set up cookie in the reques:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;String cookie = null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;hconn.setRequestProperty("Cookie", cookie);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you can see "Cookie" in transmitted while web request as plain string. Those string can be retrieved after first request to the server in code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;cookie = hconn.getHeaderField("Set-Cookie");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pay attention that if server accepts request with "Cookie" property it will not fulfil "Set-Cookie" in response and hconn.getHeaderField("Set-Cookie") will be null.&lt;br /&gt;For using proxy put next code before invoking &lt;span style="font-family:courier new;font-size:85%;"&gt;openConnection()&lt;/span&gt; for URL:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Properties systemProperties = System.getProperties();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;systemProperties.setProperty("http.proxyHost",proxy);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;systemProperties.setProperty("http.proxyPort",port);&lt;/span&gt; //And optionally:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;System.setProperty("http.proxyUser", ""); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;System.setProperty("http.proxyPassword", "");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;And finally for authentication create simple class:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public class SimpleAuthenticator extends Authenticator{ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private String username;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private String password;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public SimpleAuthenticator(String username,String password) { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;this.username = username;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;this.password = password;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;protected PasswordAuthentication getPasswordAuthentication() { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;return new PasswordAuthentication( username,password.toCharArray()); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And before creating new URL (&lt;span style="font-family:courier new;font-size:85%;"&gt;URL myUrl= new URL(url);&lt;/span&gt;) invoke:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Authenticator.setDefault(new SimpleAuthenticator(username, password));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The end.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2295930527227463911?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2295930527227463911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2295930527227463911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2295930527227463911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2295930527227463911'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/servlets-invoking-by-java-standalone.html' title='Servlets invoking by java standalone (form posting)'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_A2LVSsaF3eo/R-uaddtGWoI/AAAAAAAAAGs/Ikr_LYVF84g/s72-c/mosaic.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-8310678049802327961</id><published>2008-03-13T17:56:00.000+02:00</published><updated>2008-03-13T19:16:26.682+02:00</updated><title type='text'>Linux forever or dead-end road</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_A2LVSsaF3eo/R9lSrAaHCGI/AAAAAAAAAF8/4tMFVC1Q1m0/s1600-h/Ubuntu.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5177260145436461154" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_A2LVSsaF3eo/R9lSrAaHCGI/AAAAAAAAAF8/4tMFVC1Q1m0/s400/Ubuntu.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I installed Linux Ubuntu 10.4 about two weeks ago.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Firs impressions was very positive. I have some experience with Linux in the past. But it did not meter for now :). I was not able to do any thing except invoke some pre installed application, especially game. &lt;/div&gt;&lt;div&gt;I had some success after two days with help of my friend KirGiz. I have got pretty good speed of system loading, have installed midnight commander :), arena 3 and even new version of JDK and Eclipe Europa (Thanks to Stas also). It was greate. Also I have installed my ATI video card and XGL engine. I did not gain success with "cube desktop" but other nice visual effects was presented. By the the time I bored with all those beauty and even thought that Ubuntu was not good place for me. But. &lt;/div&gt;&lt;div&gt;I returned to research my laptop's Linux couple of days ago. It was related to recent c++ programming under the DOS in Borland c++ 3. When only keyboard was used. First af all I switched off my Gnome XConsole (with rcconf) and find myself in Linux command line interface. After couple of hours I find real beauty and real satisfaction. It was so suddenly that I am fall in love with this OS. I even used lynx. It was very strange experience but cool also. Only command prompt and you. Without any visual unusuall most of time widgets. Only couple of terminals. It is inconvenient for first time but regular operation will be very fast in due course. &lt;/div&gt;&lt;div&gt;There are much programms for console mode, for example audio player. I hope I will find some Java IDE for terminal. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Some usefull commands: &lt;/div&gt;&lt;div&gt;- gedit // Text Editor (GUI)&lt;/div&gt;&lt;div&gt;- dav // Text Editor (console)&lt;/div&gt;&lt;div&gt;- lynx // Web Browser (console) G - addres; O - config; Q - quit; / - page source; [Del] - list of visited addresses.&lt;/div&gt;&lt;div&gt;- rcconf // boot options&lt;/div&gt;&lt;div&gt;- touch Par1 //creates empty file with name as Par1. e.g. /fastboot or /forcefsck&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Some interesting locations:&lt;/div&gt;&lt;div&gt;- /etc/fstab&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-8310678049802327961?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/8310678049802327961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=8310678049802327961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8310678049802327961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8310678049802327961'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/lunux-forever-or-dead-end-road.html' title='Linux forever or dead-end road'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/R9lSrAaHCGI/AAAAAAAAAF8/4tMFVC1Q1m0/s72-c/Ubuntu.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-4122552981932705218</id><published>2008-03-13T16:41:00.000+02:00</published><updated>2008-03-14T12:45:26.964+02:00</updated><title type='text'>Titanic just wanted to be submarine</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_A2LVSsaF3eo/R9lOAAaHCFI/AAAAAAAAAF0/hpfN-chfUTs/s1600-h/JAD.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5177255008655575122" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_A2LVSsaF3eo/R9lOAAaHCFI/AAAAAAAAAF0/hpfN-chfUTs/s400/JAD.gif" border="0" /&gt;&lt;/a&gt;Open source or warranty of support?&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I met with some problem with WebLogic 9.2 last week.&lt;br /&gt;&lt;br /&gt;I am using WebLogic 9.2 sp1 + AquaLogic 2.6 last time. I have created EJB (2.1 right from WLW) with some methods that throws Exceptions. I have tried to create transport typed business service (BS) for my EJB. When I looked into WSDL for that BS I did not find soap faults description for my methods. I sent request to BEA and got response with clarification and patch Id for resolve that problem :)&lt;br /&gt;I installed that patch with Smart Update and it seemed was all okay then. I found SOAP fault block in my WSDL. But.&lt;br /&gt;I tried to fulfil simple code on the patched serverside:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Hashtable&lt;string,&gt; h = new Hashtable&lt;string,&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;h.put(Context.PROVIDER_URL, "t3://localhost:7002");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;h.put(Context.SECURITY_PRINCIPAL, "weblogic");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;h.put(Context.SECURITY_CREDENTIALS, "weblogic");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;InitialContext inc = new InitialContext(h);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pay attention that I looked up Initial Context in web application running on the "9.2 SP1 WebLogic Server with patched ALSB" to "8.1 "WebLogic Server"!&lt;br /&gt;&lt;br /&gt;I have got Exception:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;java.lang.AssertionError: java.lang.ClassNotFoundException: weblogic.jndi.internal.ServerNamingNode_920_WLStubat weblogic.jndi.WLInitialContextFactoryDelegate.newRootNamingNodeStub(WLInitialContextFactoryDelegate.java:587)at weblogic.jndi.WLInitialContextFactoryDelegate.newRemoteContext(WLInitialContextFactoryDelegate.java:559)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I had question: "Why Class Loader tries to find ServerNamingNode_920_WLStubat instead of ServerNamingNode_921_WLStubat". I started investigate that problem couple of days ago. I know reason now. But I have spent about a week for that problem :(&lt;br /&gt;&lt;br /&gt;First of all I found line in my %WLS_HOME%\common\bin\commEnv.cmd&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;set PATCH_CLASSPATH=%WLS_HOME%\profiles\default\sys_manifest_classpath\weblogic_patch.jar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pay attention that PATCH_CLASSPATH got the first place in domain claspath!&lt;br /&gt;That was Jar was installed with patch. By going through chain from that Jar (&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;by manifest Class-Path:...&lt;/span&gt; &lt;/span&gt;) I found another Jar. It contains manifest file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Manifest-Version: 1.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Created-By: 1.5.0_03 (Sun Microsystems Inc.)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Implementation-Title: AquaLogic Service Bus 2.6 Patch for CR311833&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Implementation-Version: 9.2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Implementation-Vendor: BEA Systems&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next I decompiled some chain of weblogic.jar classes (first was WLInitialContextFactoryDelegate) with JAD and have strange result:&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WLInitialContextFactoryDelegate:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private NamingNode newRootNamingNodeStub(RemoteReference remotereference, int i)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...&lt;br /&gt;Class class1 = Class.forName(&lt;strong&gt;RootNamingNode&lt;/strong&gt;.STUB_NAME);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;RootNamingNode:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;STUB_NAME = &lt;strong&gt;ServerHelper&lt;/strong&gt;.getStubClassName((weblogic.jndi.internal.ServerNamingNode.class).getName());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ServerHelper:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public static String getStubClassName(String s)&lt;br /&gt;{&lt;br /&gt;return s + WLS_STUB_VERSION;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;....&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public static final String WLS_STUB_VERSION = "_" + &lt;strong&gt;PeerInfo&lt;/strong&gt;.getPeerInfo().getMajor() + &lt;strong&gt;PeerInfo&lt;/strong&gt;.getPeerInfo().getMinor() + &lt;strong&gt;PeerInfo&lt;/strong&gt;.getPeerInfo().getServicePack() + "_WLStub";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PeerInfo:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public static PeerInfo getPeerInfo()&lt;br /&gt;{&lt;br /&gt;return singleton;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;VersionInfo&lt;/strong&gt; versioninfo = &lt;strong&gt;VersionInfo&lt;/strong&gt;.theOne();&lt;br /&gt;singleton = new PeerInfo(versioninfo.getMajor(), versioninfo.getMinor(), versioninfo.getServicePack(), versioninfo.getRollingPatch(), versioninfo.hasTemporaryPatch(), versioninfo.getPackages());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;VersionInfo:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;public static VersionInfo theOne()&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;return &lt;strong&gt;Maker&lt;/strong&gt;.THE_ONE;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public final int getServicePack()&lt;br /&gt;{&lt;br /&gt;return servicePack;&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;public VersionInfo&lt;/span&gt;(boolean flag) throws VersioningError&lt;br /&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;packages = getLocalWLPackages();&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;implVendor = packages[0].getImplementationVendor();&lt;br /&gt;implTitle = packages[0].getImplementationTitle();&lt;br /&gt;implVersion = packages[0].getImplementationVersion();&lt;br /&gt;major = packages[0].getMajor();&lt;br /&gt;minor = packages[0].getMinor();&lt;br /&gt;servicePack = packages[0].getServicePack();&lt;br /&gt;...&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Maker:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;static final VersionInfo THE_ONE = VersionInfo.access$000() ? new VersionInfo(true) : new VersionInfo(9, 2, 1, 0);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;There are another constructors in the VersionInfo class but it is clear that for some reason in case of my web application constructor &lt;span style="font-family:courier new;font-size:85%;"&gt;VersionInfo(true)&lt;/span&gt; was invoked in runtime.&lt;br /&gt;&lt;br /&gt;So as you can see WebLogic gets its version information from ... manifest of the Jar file that placed first in the CLASSPATH!!!! As you remember first Jar file is my patche's Jar with:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Implementation-Version: 9.2&lt;/span&gt;&lt;br /&gt;It does not contain version of SP. So WebLogic after patch of AquaLogic does not know about its SP version!&lt;br /&gt;Now I can change order of my Jar in the server CLASSPATH or ... change line:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Implementation-Version: 9.2&lt;/span&gt;&lt;br /&gt;to&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Implementation-Version: 9.2.1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Both cases are work. I have tested.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The engineer form BEA support said me about those code:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;"Well yes, that's true, but you see that the problem is coming from the patch that you install the first time, I guess if the patch was the correct one of the WLS installation , every thing will work fine, but since the patch was not well installed let say, it's logic that nothing will work, for me."&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Nevertheless I have one question: why BEA WebLogic AS that able to do anything (almost anything) and costs so much money retrieve version info about itself by using logic: &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;packages = getLocalWLPackages(); //All WebLogic AquaLogic packages in CP&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;servicePack = packages[0].getServicePack(); //First off all&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...&lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;It seems like Titanic 9.2 is the ship until it have gotten some screws from submarine. Just it happens the same time it considered whole itself as submarine :). There is no reason to explain result of that misunderstanding. LOL.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_A2LVSsaF3eo/R9pFpAaHCJI/AAAAAAAAAGU/ZBa9kHtW5GY/s1600-h/titanic_3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5177527292402272402" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_A2LVSsaF3eo/R9pFpAaHCJI/AAAAAAAAAGU/ZBa9kHtW5GY/s320/titanic_3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://forums.bea.com/thread.jspa?threadID=5700000130"&gt;http://forums.bea.com/thread.jspa?threadID=5700000130&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://forums.bea.com/forum.jspa?forumID=2057"&gt;http://forums.bea.com/forum.jspa?forumID=2057&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-4122552981932705218?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/4122552981932705218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=4122552981932705218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4122552981932705218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4122552981932705218'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/open-source-or-warranty-of-support.html' title='Titanic just wanted to be submarine'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/R9lOAAaHCFI/AAAAAAAAAF0/hpfN-chfUTs/s72-c/JAD.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2766875444903811136</id><published>2008-03-06T18:26:00.000+02:00</published><updated>2008-03-13T18:21:09.797+02:00</updated><title type='text'>English Learning: Dictionary + Trainer</title><content type='html'>&lt;div align="left"&gt;Today I shown my Top Dictionary (also known as Top Editor) to Thor: &lt;/div&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_A2LVSsaF3eo/R9lUWgaHCII/AAAAAAAAAGM/obV6CzPSd4k/s1600-h/Top.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5177261992272398466" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_A2LVSsaF3eo/R9lUWgaHCII/AAAAAAAAAGM/obV6CzPSd4k/s400/Top.jpg" border="0" /&gt;&lt;/a&gt; &lt;div&gt;&lt;div&gt;&lt;br /&gt;So I think it is time to show my product here also. It was long way from my first simple HTML-based english trainer. I have made it on c++, php and C#. But always idea was prety identical - if you want to study English - you need partner. Exactly such e-partner I have been trying to implements a lot of years. May be name "partner" is too loude but anyway it is prety usefull tool. I hope it will be better in future.&lt;br /&gt;Main futures:&lt;br /&gt;- usefull editing studied words;&lt;br /&gt;- management by samples for those words;&lt;br /&gt;- ability to record sound for a words and samples;&lt;br /&gt;- presence of trainer;&lt;br /&gt;- easy printing all wards in paper;&lt;br /&gt;- easy play sounds in any mp3-player; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2766875444903811136?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2766875444903811136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2766875444903811136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2766875444903811136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2766875444903811136'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/english-learning-dictionary-trainer.html' title='English Learning: Dictionary + Trainer'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_A2LVSsaF3eo/R9lUWgaHCII/AAAAAAAAAGM/obV6CzPSd4k/s72-c/Top.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-229349477421582694</id><published>2008-03-06T18:22:00.000+02:00</published><updated>2008-03-06T18:26:42.321+02:00</updated><title type='text'>BEA forever</title><content type='html'>Yesterday I posted request to BEA customer support. Today I have received full description of the possble decision. Thanks a lot. It was my first request to official support and successfull. Also I have respond on BEA forum. Great&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-229349477421582694?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/229349477421582694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=229349477421582694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/229349477421582694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/229349477421582694'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/bea-forever.html' title='BEA forever'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-6107561437753733104</id><published>2008-03-04T19:34:00.001+02:00</published><updated>2008-03-13T19:15:07.308+02:00</updated><title type='text'>There is xsd inheritance!</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_A2LVSsaF3eo/R85qxHtDgpI/AAAAAAAAADw/Ytwku1A2xUA/s1600-h/inheritCompl.jpg"&gt;&lt;/a&gt;Look into two classes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;package com;&lt;br /&gt;public class SomeBase {&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;package com;&lt;br /&gt;public class SomeChild extends SomeBase {&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and result conversion into xsd:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;xs:complexType name="SomeChild"&amp;gt;&lt;br /&gt;&amp;lt;xs:complexContent&amp;gt;&lt;br /&gt;&amp;lt;xs:extension base="java:SomeBase" xmlns:java="java:com"/&amp;gt;&lt;br /&gt;&amp;lt;/xs:complexContent&amp;gt;&lt;br /&gt;&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;lt;xs:complexType name="SomeBase"/&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-6107561437753733104?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/6107561437753733104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=6107561437753733104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6107561437753733104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6107561437753733104'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/there-is-xsd-inheritance.html' title='There is xsd inheritance!'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2369324680207205120</id><published>2008-03-04T18:53:00.000+02:00</published><updated>2008-03-06T14:53:30.696+02:00</updated><title type='text'>Some incomprehension</title><content type='html'>I have found some xsd definition:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;xs:schema targetNamespace="java:java.lang"&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; xmlns:xs=http://www.w3.org/2001/XMLSchema&amp;gt;&lt;br /&gt;&amp;lt;xs:complexType name="NullPointerException"&amp;gt;&lt;br /&gt;&amp;lt;xs:complexContent&amp;gt;&lt;br /&gt;&amp;lt;xs:extension base="java:RuntimeException" xmlns:java="java:java.lang"/&amp;gt;&lt;br /&gt;&amp;lt;/xs:complexContent&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;lt;xs:complexType name="RuntimeException"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;/xs:schema&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My attention is attracted by line &amp;lt;xs:extension base="... &lt;strong&gt;Is there inheritance in XML Schema?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Another strange issue. Let's look into my MyException src:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;package com;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public class MyException extends java.lang.Exception {&lt;br /&gt;private static final long serialVersionUID = 6543L;&lt;br /&gt;private java.lang.String myException;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public java.lang.String getMyException() { return this.myException; }&lt;br /&gt;public MyException() { }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public MyException(java.lang.String myException) { this.myException = myException; }&lt;br /&gt;&lt;br /&gt;// public MyException(Throwable ex) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;// super(ex);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;// }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;In WSDL for my service it appears as:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;xs:complexType name="MyException"&amp;gt;&lt;br /&gt;&amp;lt;xs:sequence&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;xs:element minOccurs="1" name="MyException" nillable="true" type="xs:string"/&amp;gt;&lt;br /&gt;&amp;lt;/xs:sequence&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;lt;xs:element name="MyException" type="java:MyException" xmlns:java="java:com"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But clientgen generates right definition for class MyException (with extends). From where it know about if in WSDL information is absence?&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Next incomprehension tied with comment code in my Exception class. If uncomment those lines then web service invocation will be accompanied with:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;weblogic.wsee.codec.CodecException: Failed to encode&lt;br /&gt;at weblogic.wsee.codec.soap11.SoapCodec.encodeFault(SoapCodec.java:362)...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;-----------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;JNDI&lt;br /&gt;I have deployed EJB on the WebLogic server. It has jndi:&lt;br /&gt; &lt;img id="BLOGGER_PHOTO_ID_5174607880535638818" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 282px; CURSOR: pointer; HEIGHT: 42px; TEXT-ALIGN: center" height="43" alt="" src="http://4.bp.blogspot.com/_A2LVSsaF3eo/R8_mc3tDgyI/AAAAAAAAAE4/BQsjy12S1DQ/s400/jndi_name.jpg" width="381" border="0" /&gt;&lt;br /&gt;EJB is allocated in EAR project:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_A2LVSsaF3eo/R8_mXXtDgxI/AAAAAAAAAEw/eaPwj9C6vbg/s1600-h/EJB-prj.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5174607786046358290" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 207px; CURSOR: pointer; HEIGHT: 28px; TEXT-ALIGN: center" height="33" alt="" src="http://2.bp.blogspot.com/_A2LVSsaF3eo/R8_mXXtDgxI/AAAAAAAAAEw/eaPwj9C6vbg/s400/EJB-prj.jpg" width="210" border="0" /&gt;&lt;/a&gt;First question:&lt;br /&gt;I looked up that EJB via:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;context.lookup("ejb.ScfBeanRemoteHome");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;EAR project name not needs while jndi lookup???&lt;br /&gt;&lt;br /&gt;Second:&lt;br /&gt;I listed all context containig by:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;NamingEnumeration en = context.list("");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;while(en.hasMore())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.out.println(en.next().toString());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and did not find "ejb.ScfBeanRemoteHome" name.. Why? Where is that name?&lt;br /&gt;&lt;br /&gt;List:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:78%;"&gt;com_bea_wli_monitoring_alert_AlertLogService: com.bea.wli.monitoring.alert.AlertLoggerImpl&lt;br /&gt;mejbmejb_jarMejb_EO: weblogic.rmi.cluster.ClusterableRemoteObject&lt;br /&gt;ejb: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;ALSB Test FrameworksbTestFwkEjb_jarTestService_EO: weblogic.rmi.cluster.ClusterableRemoteObject&lt;br /&gt;com_bea_wli_monitoring_Aggregator: com.bea.wli.monitoring.statistics.prototype.ClusterAggregatorImpl&lt;br /&gt;QueueIn: weblogic.jms.common.WrappedDestinationImpl&lt;br /&gt;javax: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;wli: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;ScfEjbMediator_ear: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;wlsbjmsrpDataSource: weblogic.rmi.cluster.ClusterableRemoteObject&lt;br /&gt;AdminServer_clusterTimerAuthority: com.bea.wli.timer.ClusterTimerAuthorityImpl&lt;br /&gt;weblogic: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;bea_wls_remote_deployerbea_wls_remote_deployer_jarDeployerBean_EO: weblogic.rmi.cluster.ClusterableRemoteObject&lt;br /&gt;ScfEjbMediator_earScfEjbMediator_ejb_jarScfBean_EO: weblogic.rmi.cluster.ClusterableRemoteObject&lt;br /&gt;ScfEjbMediator_earScfEjbMediator_ejb_jarUtiliteBean_EO: weblogic.rmi.cluster.ClusterableRemoteObject&lt;br /&gt;wlsb: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;ServiceBus_Console: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;com: weblogic.jndi.internal.ServerNamingNode&lt;br /&gt;WebLogicEJB_ejbWebLogicEJB_ejbSomeEjb_EO: weblogic.rmi.cluster.ClusterableRemoteObject&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2369324680207205120?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2369324680207205120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2369324680207205120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2369324680207205120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2369324680207205120'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/some-incomprehension.html' title='Some incomprehension'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_A2LVSsaF3eo/R8_mc3tDgyI/AAAAAAAAAE4/BQsjy12S1DQ/s72-c/jndi_name.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2826037870080712613</id><published>2008-03-04T16:18:00.000+02:00</published><updated>2008-03-05T13:12:30.300+02:00</updated><title type='text'>Weblogic Service Bus service generation</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_A2LVSsaF3eo/R85__HtDgtI/AAAAAAAAAEQ/XONukIG5wYo/s1600-h/EjbM.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5174213744271786706" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 122px; CURSOR: hand; HEIGHT: 171px" height="165" alt="" src="http://4.bp.blogspot.com/_A2LVSsaF3eo/R85__HtDgtI/AAAAAAAAAEQ/XONukIG5wYo/s200/EjbM.jpg" width="130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Some unexpected behaviour was trailed when business Transport Typed Service generated. My EJB looks like: &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;@RemoteMethod&lt;br /&gt;public String someMethod(String arg) { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;return "Hello " + arg; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;@RemoteMethod&lt;br /&gt;public String someMethod2(String arg) throws MyException {&lt;br /&gt;throw new MyException("ERR");&lt;br /&gt;//return "Hello " + arg;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;but if I generate business service by EJBClientJar of that EJB I do not find fault part in operation description for second method in the its WSDL. Moreover I do not find MyException type definition as well:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;s0:operation name="someMethod2"&amp;gt;&lt;br /&gt;&amp;lt;s2:operation soapAction="http://www.openuri.org/someMethod2&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;" style="document"/&amp;gt;&lt;br /&gt;&amp;lt;s0:input&amp;gt;&lt;br /&gt;&amp;lt;s2:body parts="parameters" use="literal"/&amp;gt;&lt;br /&gt;&amp;lt;/s0:input&amp;gt;&lt;br /&gt;&amp;lt;s0:output&amp;gt;&lt;br /&gt;&amp;lt;s2:body parts="parameters" use="literal"/&amp;gt;&lt;br /&gt;&amp;lt;/s0:output&amp;gt;&lt;br /&gt;&amp;lt;/s0:operation&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.bea.com/thread.jspa?threadID=300006140"&gt;http://forums.bea.com/thread.jspa?threadID=300006140&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2826037870080712613?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2826037870080712613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2826037870080712613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2826037870080712613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2826037870080712613'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/weblogic-service-bus-service-generation.html' title='Weblogic Service Bus service generation'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_A2LVSsaF3eo/R85__HtDgtI/AAAAAAAAAEQ/XONukIG5wYo/s72-c/EjbM.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-6052133398179960701</id><published>2008-03-04T13:53:00.000+02:00</published><updated>2008-03-04T16:11:16.219+02:00</updated><title type='text'>Web services exceptions handling</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_A2LVSsaF3eo/R81J_FVI6YI/AAAAAAAAACU/irr-Mjq91QM/s1600-h/116001.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5173872895029995906" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 111px; CURSOR: hand; HEIGHT: 85px" height="80" alt="" src="http://4.bp.blogspot.com/_A2LVSsaF3eo/R81J_FVI6YI/AAAAAAAAACU/irr-Mjq91QM/s200/116001.jpg" width="138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;There are two web methods in previous topic. Each of them throws exception:&lt;br /&gt;RuntimeException and checked exception com.MyException&lt;br /&gt;&lt;br /&gt;In second case wsdl description has fault description part:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;s0:operation name="meth2Checked"&amp;gt;&lt;br /&gt;&amp;lt;s3:operation soapAction="" style="document"/&amp;gt;&lt;br /&gt;&amp;lt;s0:input&amp;gt;&lt;br /&gt;&amp;lt;s3:body parts="parameters" use="literal"/&amp;gt;&lt;br /&gt;&amp;lt;/s0:input&amp;gt;&lt;br /&gt;&amp;lt;s0:output&amp;gt;&lt;br /&gt;&amp;lt;s3:body use="literal"/&amp;gt;&lt;br /&gt;&amp;lt;/s0:output&amp;gt;&lt;br /&gt;&amp;lt;s0:fault name="MyException"&amp;gt;&lt;br /&gt;&amp;lt;s3:fault name="MyException" use="literal"/&amp;gt;&lt;br /&gt;&amp;lt;/s0:fault&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So JAX-RPC stubs has exception description in signature of the correspondent methods.&lt;br /&gt;If involkes such methods:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Exception in thread "main" com.MyException&lt;br /&gt;at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&lt;br /&gt;at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In case of throwing RuntimeException we just have in runtime:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;Exception in thread "main" java.rmi.RemoteException: SOAPFaultException - FaultCode [{http://schemas.xmlsoap.org/soap/envelope/}Server] FaultString [Failed to invoke end componentFailed to invoke method &amp;gt;&amp;gt; RUN TIME EXCEPTION &amp;lt;&amp;lt; ] FaultActor [null] Detail [&amp;lt;detail&amp;gt;&amp;lt;bea_fault:stacktrace xmlns:bea_fault=http://www.bea.com/servers/wls70/webservice/fault/1.0.0&amp;gt;java.lang.RuntimeException: &amp;gt;&amp;gt; RUN TIME EXCEPTION &amp;lt;&amp;lt;&lt;br /&gt;at com.ErrWs.meth1RunTime(ErrWs.java:10)&lt;br /&gt;at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source)&lt;br /&gt;at java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown Source)&lt;/span&gt;....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In case of some transport problem (e.g. absent WS in the defined location) is gotten:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Exception in thread "main" java.rmi.RemoteException: SOAPFaultException - FaultCode [{http://schemas.xmlsoap.org/soap/envelope/}Server] FaultString [Failed to receive message java.io.IOException: The server at http://localhost:7001/WebService_ws/ErrWs returned a 404 error code (Not Found). Please ensure that your URL is correct, and the web service has deployed without error.The server at http://localhost:7001/WebService_ws/ErrWs returned a 404 error code (Not Found). Please ensure that your URL is correct, and the web service has deployed without error.] FaultActor [null] Detail [&lt;detail&gt;&lt;?xml:namespace prefix = bea_fault /&gt;&lt;bea_fault:stacktrace bea_fault="http://www.bea.com/servers/wls70/webservice/fault/1.0.0"&gt;java.io.IOException: The server at http://localhost:7001/WebService_ws/ErrWs returned a 404 error code (Not Found). Please ensure that your URL is correct, and the web service has deployed without error....&lt;/span&gt;&lt;/bea_fault:stacktrace&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-6052133398179960701?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/6052133398179960701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=6052133398179960701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6052133398179960701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/6052133398179960701'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/web-services-exceptions-handling.html' title='Web services exceptions handling'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_A2LVSsaF3eo/R81J_FVI6YI/AAAAAAAAACU/irr-Mjq91QM/s72-c/116001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-3739703667813901207</id><published>2008-03-04T12:16:00.000+02:00</published><updated>2008-03-04T18:44:44.788+02:00</updated><title type='text'>Webogic Web Services invocation</title><content type='html'>&lt;p align="left"&gt;&lt;a href="http://4.bp.blogspot.com/_A2LVSsaF3eo/R81EKFVI6UI/AAAAAAAAAB0/XD-8QA1IrBA/s1600-h/90131.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5173866486938790210" style="FLOAT: right; MARGIN: 0px 10px 10px 0px; WIDTH: 161px; CURSOR: hand; HEIGHT: 130px" height="138" alt="" src="http://4.bp.blogspot.com/_A2LVSsaF3eo/R81EKFVI6UI/AAAAAAAAAB0/XD-8QA1IrBA/s200/90131.JPG" width="162" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Let's look into some WebLogic WebService:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import javax.jws.*;&lt;br /&gt;@WebServicepublic class ErrWs {&lt;br /&gt;@WebMethod &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public void meth1RunTime() { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;throw new RuntimeException(" &gt;&gt; RUN TIME EXCEPTION &lt;&lt; "); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;@WebMethod &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public void meth2Checked() throws MyException { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;throw new MyException(" &gt;&gt; MyException EXCEPTION &lt;&lt; "); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How we can use that web service in java code? First of all use&lt;span style="font-size:85%;"&gt; &lt;span style="font-family:courier new;"&gt;jwsc&lt;/span&gt;&lt;/span&gt; ant task to genrate JAX-RPC code for that web service:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;taskdef name="jwsc"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;classname="weblogic.wsee.tools.anttasks.JwscTask"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;classpath refid="..." /&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;/taskdef&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="251052"&gt;&lt;/a&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;jwsc srcdir="src" destdir="${somedir-dir}"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;jws file="com/ws/ErrWs.java"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;a name="225254"&gt;&lt;/a&gt;&lt;a name="225258"&gt;&lt;/a&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;/jws&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="225260"&gt;&lt;/a&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;/jwsc&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In case of some WebLogic web application we can generate web service control but for standalone application (or non WebLogic web application) we need use ClientGenTask. But there is some strange behaviour I meet with..&lt;br /&gt;Below content of my ant build.xml:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt; project&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;default="wsc_lient_gen"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;name="LocalClient"&amp;gt;&lt;br /&gt;&amp;lt; path id="wl_cp"&amp;gt;&lt;br /&gt;&amp;lt; pathelement path="lib/weblogic.jar"&amp;gt;&lt;br /&gt;&amp;lt; pathelement path="lib/xbean.jar"&amp;gt;&lt;br /&gt;&amp;lt; pathelement path="lib/apache_xbean.jar"&amp;gt;&lt;br /&gt;&amp;lt; pathelement path="lib/webserviceclient.jar"&amp;gt;&lt;br /&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&amp;lt;taskdef &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;name="clientgen" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;classpathref="wl_cp" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;classname="weblogic.wsee.tools.anttasks.ClientGenTask"&amp;gt;&lt;br /&gt;&amp;lt;/taskdef &amp;gt;&lt;br /&gt;&amp;lt;target name="wsc_lient_gen"&amp;gt;&lt;br /&gt;&amp;lt;clientgen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;classpathref="wl_cp" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;wsdl=http://localhost:7001/WebService_ws/ErrWs?WSDL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;destdir="gen"&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But there is exception while run that code right in Eclipse environment:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Buildfile: D:\Screwfix\ErrAttempts_java2\Test\build.xml&lt;br /&gt;wsc_lient_gen:&lt;br /&gt;Generating client from http://localhost:7001/WebService_ws/ErrWs?WSDL ...&lt;br /&gt;[clientgen] Package name is com&lt;br /&gt;[clientgen] DestDir is D:\Screwfix\ErrAttempts_java2\Test\gen&lt;br /&gt;[clientgen] class name is ErrWs_Stub&lt;br /&gt;[clientgen] service class name is ErrWsService&lt;br /&gt;[clientgen] Porttype name is ErrWs&lt;br /&gt;[clientgen] service impl name is ErrWsService_Impl&lt;br /&gt;BUILD FAILED&lt;br /&gt;java.lang.AssertionError: java.io.IOException&lt;br /&gt;Total time: 3 seconds&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But in CLI, if before invoking set domain environment:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&gt; %SOME_WL_DOMAIN_PATH%\bin\setDomainEnv.cmd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&gt; ant&lt;/span&gt;&lt;br /&gt;&lt;span&gt;all artifacts are generated successfully. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After those operation we need some client's code to invoke web service: (and also 4 *.jar in classpath presented in ant's build file)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;ErrWsService service = new ErrWsService_Impl(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;ErrWs port = service.getErrWsSoapPort(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;port.meth1RunTime();&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-3739703667813901207?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/3739703667813901207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=3739703667813901207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3739703667813901207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/3739703667813901207'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/webogic-web-services-invocation.html' title='Webogic Web Services invocation'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_A2LVSsaF3eo/R81EKFVI6UI/AAAAAAAAAB0/XD-8QA1IrBA/s72-c/90131.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-4921411418666336863</id><published>2008-03-03T17:26:00.000+02:00</published><updated>2008-03-06T13:08:03.867+02:00</updated><title type='text'>WebLogic EJB invocation</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_A2LVSsaF3eo/R86BE3tDguI/AAAAAAAAAEY/ob_fHQKTfjg/s1600-h/RMI.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5174214942567662306" style="FLOAT: right; MARGIN: 0px 0px 1px 1px; WIDTH: 139px; CURSOR: hand; HEIGHT: 92px" height="136" alt="" src="http://3.bp.blogspot.com/_A2LVSsaF3eo/R86BE3tDguI/AAAAAAAAAEY/ob_fHQKTfjg/s200/RMI.jpg" width="200" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you have Ejb Client Jar: (code needs weblogic.jar and Client Jar for yours EJB) :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import java.rmi.RemoteException;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import java.util.Hashtable;&lt;br /&gt;import javax.ejb.CreateException;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import javax.naming.Context;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import javax.naming.InitialContext;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import javax.naming.NamingException;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import javax.rmi.PortableRemoteObject;&lt;br /&gt;import com.epam.ejb.SomeEjbRemoteHome;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;public static void main(String[] args) throws NamingException, RemoteException, CreateException{&lt;br /&gt;Hashtable&lt;string,&gt; env = new Hashtable&lt;string,&gt;();&lt;br /&gt;env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");&lt;br /&gt;env.put(Context.SECURITY_PRINCIPAL, "weblogic");&lt;br /&gt;env.put(Context.SECURITY_CREDENTIALS, "weblogic");&lt;br /&gt;env.put(Context.PROVIDER_URL,"t3://localhost:7001/Errors_ejb");&lt;br /&gt;Context context = new InitialContext(env);&lt;br /&gt;Object homeObject = context.lookup("ejb.SomeEjbRemoteHome");&lt;br /&gt;SomeEjbRemoteHome home = (SomeEjbRemoteHome)PortableRemoteObject.narrow(homeObject, SomeEjbRemoteHome.class);&lt;br /&gt;home.create().someMethod("some string");&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is also abiliti to invoke as simple class (needs to have Ejb Class in classpath)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import com.epam.ejb.MyException;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;import com.epam.ejb.SomeEjb;&lt;br /&gt;public class Main {&lt;br /&gt;public static void main(String[] args) throws MyException {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;SomeEjb ejb = new SomeEjb();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;System.out.println(ejb.someMethod("555"));&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-4921411418666336863?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/4921411418666336863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=4921411418666336863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4921411418666336863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/4921411418666336863'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/03/weblogic-ejb-invocation.html' title='WebLogic EJB invocation'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/R86BE3tDguI/AAAAAAAAAEY/ob_fHQKTfjg/s72-c/RMI.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2373079028480849893</id><published>2008-02-27T20:39:00.000+02:00</published><updated>2008-03-04T17:30:21.480+02:00</updated><title type='text'>Exception handling (continuation)</title><content type='html'>&lt;div&gt;The great news for me that there are possibility to throw any type of exception in EJB's methods.&lt;br /&gt;For example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class MyException extends Exception {&lt;br /&gt;public MyException(String mess) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{ super(mess); }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;So my EJB method might be:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@RemoteMethod public String someMethod(String param) throws MyException { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;throw new MyException("Text"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also client have to catch it. Pay attention that now stack trace will look like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Exception in thread "main" com.epam.ejb.MyException: Test..&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;not the same as in case of throwing RuntimeException :&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;Exception in thread "main" java.rmi.RemoteException: EJB Exception: ; nested exception is:&lt;br /&gt;java.lang.RuntimeException: Text..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another interesting fact is understanding about exception chaining:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Exception e = new Exception();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if( e.getCause() instanceof MyException) { }&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2373079028480849893?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2373079028480849893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2373079028480849893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2373079028480849893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2373079028480849893'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/02/exception-handling-continuation.html' title='Exception handling (continuation)'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-2255635556538931675</id><published>2008-02-27T16:28:00.000+02:00</published><updated>2008-03-04T17:28:58.749+02:00</updated><title type='text'>Exceptions handling</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_A2LVSsaF3eo/R81qM1VI6iI/AAAAAAAAADg/lK-SRjHpRNo/s1600-h/froggy_mini.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5173908315625286178" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_A2LVSsaF3eo/R81qM1VI6iI/AAAAAAAAADg/lK-SRjHpRNo/s200/froggy_mini.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Sometimes unconscious using of a simple and usual things led to unexpected consequences. And than we look on those things with misunderstanding.&lt;br /&gt;Let us consider so widely known conception as handling of exception in java programming language and its impact on the enterprise application's architecture.&lt;br /&gt;&lt;br /&gt;There are some classes that represents exception:&lt;br /&gt;javax.ejb.EJBException&lt;br /&gt;java.rmi.RemoteException&lt;br /&gt;java.lang.RuntimeException&lt;br /&gt;java.lang.Exception&lt;br /&gt;java.io.IOException&lt;br /&gt;java.lang.ArithmeticException&lt;br /&gt;java.lang.NullPointerException&lt;br /&gt;java.sql.SQLExceptionThere are some questions:&lt;br /&gt;&lt;br /&gt;What is the relation betwen these classes?&lt;br /&gt;What kind of exception can be thrown in the EJB methods?&lt;br /&gt;What kind of exception will be received by EJB or WebService client?&lt;br /&gt;How EJB client can receive underlying exception infofmation?&lt;br /&gt;How can client of the web service retrieve proper information about exception?&lt;br /&gt;Is it necessity in delivering an underlying exceptions classes to the client application?&lt;br /&gt;What is best practices to handle excepion in our code?&lt;br /&gt;What is best place to implemests code to write logging messages?&lt;br /&gt;How can I use java.lang.Error?&lt;br /&gt;&lt;br /&gt;For answer on first quastion enough to look into java API documentation:&lt;br /&gt;&lt;br /&gt;ArithmeticException extends RuntimeException&lt;br /&gt;EJBException extends RuntimeException&lt;br /&gt;NullPointerException extends RuntimeException&lt;br /&gt;SQLException extends Exception&lt;br /&gt;RuntimeException extends Exception&lt;br /&gt;RemoteException extends IOException&lt;br /&gt;IOException extends Exception&lt;br /&gt;exception extends Throwable&lt;br /&gt;&lt;span&gt;Inside of implementation of EJB methods there is not facility to throw some checked exception, is there? Let's consider examples: if inside of such method present some like int i = 1/0; client will receive:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;java.rmi.RemoteException: EJB Exception: ;&lt;br /&gt;nested exception is: java.lang.ArithmeticException: / by zero at&lt;br /&gt;weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:195)...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you call throw new RuntimeException("Ops!"); you get in fist lines:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;java.rmi.RemoteException: EJB Exception: ;&lt;br /&gt;nested exception is: java.lang.RuntimeException: Ops! at&lt;br /&gt;weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:195)... &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you write throw new java.rmi.RemoteException(); compiler will check:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;"Unhandled exception type RemoteException".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What exactly is mean "EJB Exception" in end of first line of &lt;/span&gt;stack trace?.. For sure we can throw EJBException inside above mentioned methods because it (EJBException) derivers its functionality from RuntimeException. What kind of exception we able to trows inside EJB methods except of RuntimeException? If exists ability to trows only RuntimeException what exactly does EJB container with these exceptions? Does it implement exception chaining?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-2255635556538931675?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/2255635556538931675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=2255635556538931675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2255635556538931675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/2255635556538931675'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/02/exceptions-handling.html' title='Exceptions handling'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A2LVSsaF3eo/R81qM1VI6iI/AAAAAAAAADg/lK-SRjHpRNo/s72-c/froggy_mini.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-817234283164242145</id><published>2008-02-27T15:33:00.001+02:00</published><updated>2008-02-27T15:33:41.732+02:00</updated><title type='text'>Some useful links</title><content type='html'>http://mms.mts.com.ua/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-817234283164242145?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/817234283164242145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=817234283164242145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/817234283164242145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/817234283164242145'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/02/some-useful-links.html' title='Some useful links'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2104415194242396962.post-8795593064792597607</id><published>2008-02-27T13:09:00.000+02:00</published><updated>2008-03-04T15:50:23.746+02:00</updated><title type='text'>I have started</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_A2LVSsaF3eo/R8VSZmEU6NI/AAAAAAAAAAg/mGc7sOpKv-8/s1600-h/ThorSmile.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5171630346773784786" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_A2LVSsaF3eo/R8VSZmEU6NI/AAAAAAAAAAg/mGc7sOpKv-8/s200/ThorSmile.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="justify"&gt;Today I have found some interesting site: http://big-dot.blogspot.com. It was very unexpected for me, because.. the owner of that resource is my good friend Thor. Hello Thor I am glad to see you..&lt;br /&gt;We were working in Ukrtelecom for one and half year. So I have already been working in EPAM about one year and he has been working in some another company in Kherson.&lt;br /&gt;Our ways have parted but we have pretty good relation for now. And also we have quite similar looking for some things but not to all. We both have thechnology on a first place but not the same technology. He has chosen .NET instead ot the Delphi while I have chosen JAVA istead of .NET.&lt;br /&gt;But my choice was not decision at all. It was just my little interest to new technology and some good luck. I sometimes argue with my friends about choice in like situation. For now I do not ready to explain my preferences between those ideology but I hope it will be not long time before I can. Not occasionally this post is first in the blog, I dedicate my blog for technology.. and what can be better to understanding some things than comparison of several ones? &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2104415194242396962-8795593064792597607?l=aillusions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aillusions.blogspot.com/feeds/8795593064792597607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2104415194242396962&amp;postID=8795593064792597607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8795593064792597607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2104415194242396962/posts/default/8795593064792597607'/><link rel='alternate' type='text/html' href='http://aillusions.blogspot.com/2008/02/i-have-started.html' title='I have started'/><author><name>illusions</name><uri>http://www.blogger.com/profile/13650379963324635087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://bp1.blogger.com/_A2LVSsaF3eo/R81NzlVI6aI/AAAAAAAAACg/XDp_i_4hWuk/S220/YA.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_A2LVSsaF3eo/R8VSZmEU6NI/AAAAAAAAAAg/mGc7sOpKv-8/s72-c/ThorSmile.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
