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

<channel>
	<title>World Wide Woogie</title>
	<atom:link href="http://woogie.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://woogie.net</link>
	<description>You know the best thing about the Internet? Neither do I but I&#039;m pretty sure it&#039;s not this.</description>
	<lastBuildDate>Wed, 07 Jul 2010 17:18:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Chase Is Here!!!!</title>
		<link>http://woogie.net/2010/07/07/chase-is-here/</link>
		<comments>http://woogie.net/2010/07/07/chase-is-here/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 17:18:34 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Domesticity]]></category>

		<guid isPermaLink="false">http://woogie.net/?p=153</guid>
		<description><![CDATA[Chase Michael Wohlgemuth was born at 9:15 today.  He was 7 pounds 15 ounces and was 20 inches long.  Everyone is doing great.]]></description>
			<content:encoded><![CDATA[<div id="attachment_154" class="wp-caption alignright" style="width: 160px"><a href="http://woogie.net/wp-content/uploads/2010/07/cimg0013.jpg"><img class="size-thumbnail wp-image-154 " title="Chase Michael Wohlgemuth" src="http://woogie.net/wp-content/uploads/2010/07/cimg0013-150x150.jpg" alt="Chase Michael Wohlgemuth" width="150" height="150" /></a><p class="wp-caption-text">Chase Michael Wohlgemuth</p></div>
<p>Chase Michael Wohlgemuth was born at 9:15 today.  He was 7 pounds 15 ounces and was 20 inches long.  Everyone is doing great.</p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2010/07/07/chase-is-here/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Strongbox 7&#8243;</title>
		<link>http://woogie.net/2010/02/09/strongbox-7/</link>
		<comments>http://woogie.net/2010/02/09/strongbox-7/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 11:17:05 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://woogie.net/?p=139</guid>
		<description><![CDATA[In 1991, Bullethead Records put out a 7&#8243; by Strongbox.  I always thought they were underrated in the local scene.  Live they were aggro without being extremely heavy, and put on one of the cheapest but most effective light shows I&#8217;ve seen.  The record always sounded a bit more laid back and jammy to me, [...]]]></description>
			<content:encoded><![CDATA[
<div class="ngg-galleryoverview" id="ngg-gallery-3-139">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-60" class="ngg-gallery-thumbnail-box" style="width:25%;" >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://woogie.net/wp-content/gallery/strongbox/strongboxfront.jpg" title="Strongbox Cover (Front)" class="shutterset_set_3" >
								<img title="strongboxfront" alt="strongboxfront" src="http://woogie.net/wp-content/gallery/strongbox/thumbs/thumbs_strongboxfront.jpg" width="100" height="100" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-57" class="ngg-gallery-thumbnail-box" style="width:25%;" >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://woogie.net/wp-content/gallery/strongbox/strongboxback.jpg" title="Strongbox Cover (Back)" class="shutterset_set_3" >
								<img title="strongboxback" alt="strongboxback" src="http://woogie.net/wp-content/gallery/strongbox/thumbs/thumbs_strongboxback.jpg" width="100" height="99" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-58" class="ngg-gallery-thumbnail-box" style="width:25%;" >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://woogie.net/wp-content/gallery/strongbox/strongboxinsertfront.jpg" title="Strongbox Insert (Front)" class="shutterset_set_3" >
								<img title="strongboxinsertfront" alt="strongboxinsertfront" src="http://woogie.net/wp-content/gallery/strongbox/thumbs/thumbs_strongboxinsertfront.jpg" width="100" height="100" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-59" class="ngg-gallery-thumbnail-box" style="width:25%;" >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://woogie.net/wp-content/gallery/strongbox/strongboxinsertback.jpg" title="Strongbox Insert (Back)" class="shutterset_set_3" >
								<img title="strongboxinsertback" alt="strongboxinsertback" src="http://woogie.net/wp-content/gallery/strongbox/thumbs/thumbs_strongboxinsertback.jpg" width="100" height="100" />
							</a>
		</div>
	</div>
	
				<br style="clear: both" />
	
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>In 1991, Bullethead Records put out a 7&#8243; by Strongbox.  I always thought they were underrated in the local scene.  Live they were aggro without being extremely heavy, and put on one of the cheapest but most effective light shows I&#8217;ve seen.  The record always sounded a bit more laid back and jammy to me, so it didn&#8217;t really capture the live feel, but listening to it now, it really holds up well.</p>
<p>[See post to listen to audio]</p>
<ol>
<li><a href="/audio/Strongbox-DiedofaTheory.mp3">Died of a Theory</a></li>
<li><a href="/audio/Strongbox-HarryHoudini.mp3">Harry Houdini</a></li>
<li><a href="/audio/Strongbox-HateMail.mp3">Hate Mail</a></li>
<li><a href="/audio/Strongbox-DeadlySeason.mp3">Deadly Season</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2010/02/09/strongbox-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You just don&#8217;t draw so well.</title>
		<link>http://woogie.net/2010/01/30/you-just-dont-draw-so-well/</link>
		<comments>http://woogie.net/2010/01/30/you-just-dont-draw-so-well/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 21:38:19 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Awesome]]></category>

		<guid isPermaLink="false">http://woogie.net/?p=130</guid>
		<description><![CDATA[Bill Zeman is an artist.  His daughter is the Tiny Art Director.  She tells him what to draw, he draws it, and she critiques it.  More often than not, she is not pleased.  She only occasionally destroys the artwork, which I guess must be sort of good for Bill&#8217;s ego.]]></description>
			<content:encoded><![CDATA[<div id="attachment_129" class="wp-caption alignright" style="width: 226px"><a href="http://tinyartdirector.blogspot.com/"><img class="size-full wp-image-129 " title="tinyartdirector" src="http://woogie.net/wp-content/uploads/2010/01/tinyartdirector.jpg" alt="Tiny Art Director" width="216" height="227" /></a><p class="wp-caption-text">Tiny Art Director</p></div>
<p>Bill Zeman is an artist.  His daughter is the <a title="Tiny Art Director" href="http://tinyartdirector.blogspot.com/">Tiny Art Director</a>.  She tells him what to draw, he draws it, and she critiques it.  More often than not, she is not pleased.  She only occasionally destroys the artwork, which I guess must be sort of good for Bill&#8217;s ego.</p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2010/01/30/you-just-dont-draw-so-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Behold, Axe Cop, the most awesome comic ever!</title>
		<link>http://woogie.net/2010/01/30/behold-axe-cop-the-most-awesome-comic-ever/</link>
		<comments>http://woogie.net/2010/01/30/behold-axe-cop-the-most-awesome-comic-ever/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 12:52:24 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Awesome]]></category>

		<guid isPermaLink="false">http://woogie.net/?p=122</guid>
		<description><![CDATA[Ethan Nicolle is a 29 year old comic artist/author.  Malachai Nicolle is his 5 year old brother.  Together, they produce Axe Cop.  Malachai writes the stories, and Ethan illustrates them.  If you&#8217;ve ever spent much time with or as a 5 year old boy, you already know where this will lead.  If not, I will [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_123" class="wp-caption alignright" style="width: 328px"><a href="http://axecop.com/"><img class="size-full wp-image-123" title="axecop" src="http://woogie.net/wp-content/uploads/2010/01/axecop.png" alt="Axe Cop" width="318" height="441" /></a><p class="wp-caption-text">Axe Cop</p></div>
<p>Ethan Nicolle is a 29 year old comic artist/author.  Malachai Nicolle is his 5 year old brother.  Together, they produce <a href="http://axecop.com/">Axe Cop</a>.  Malachai writes the stories, and Ethan illustrates them.  If you&#8217;ve ever spent much time with or as a 5 year old boy, you already know where this will lead.  If not, I will tell you, it leads to the most awesome comic book ever written.</p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2010/01/30/behold-axe-cop-the-most-awesome-comic-ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Invoking a Task via XPRESS in Sun&#8217;s Identity Manager 7.1</title>
		<link>http://woogie.net/2008/07/08/invoking-a-task-via-xpress-in-suns-identity-manager-7-1/</link>
		<comments>http://woogie.net/2008/07/08/invoking-a-task-via-xpress-in-suns-identity-manager-7-1/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 09:17:09 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://woogie.net/wordpress/?p=58</guid>
		<description><![CDATA[Occasionally, I&#8217;ve wanted to invoke an Identity Manager Task from within a rule in XPRESS. Here is a rule that will do that: &#60;Rule&#160;name="runTask"&#62; &#160;&#160;&#160;&#160;&#60;RuleArgument&#160;name='taskName'/&#62; &#160;&#160;&#160;&#160;&#60;RuleArgument&#160;name='taskVariables'/&#62; &#160;&#160;&#160;&#160;&#60;RuleArgument&#160;name='execMode'/&#62; &#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#60;block&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;defvar&#160;name='processView'&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;new&#160;class='com.waveset.object.GenericObject'&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ref&#62;taskVariables&#60;/ref&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/new&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/defvar&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;invoke&#160;name='setId'&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ref&#62;processView&#60;/ref&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;s&#62;Process&#60;/s&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/invoke&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;invoke&#160;name='put'&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ref&#62;processView&#60;/ref&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;s&#62;task.process&#60;/s&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ref&#62;taskName&#60;/ref&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/invoke&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;invoke&#160;name='put'&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ref&#62;processView&#60;/ref&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;s&#62;task.taskName&#60;/s&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ref&#62;taskName&#60;/ref&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/invoke&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;cond&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;ref&#62;execMode&#60;/ref&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;invoke&#160;name='put'&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Occasionally, I&#8217;ve wanted to invoke an Identity Manager Task from within a rule in XPRESS.  Here is a rule that will do that:</p>
<p><code>&lt;Rule&nbsp;name="runTask"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument&nbsp;name='taskName'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument&nbsp;name='taskVariables'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument&nbsp;name='execMode'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;block&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;defvar&nbsp;name='processView'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new&nbsp;class='com.waveset.object.GenericObject'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;taskVariables&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/defvar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='setId'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;processView&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;Process&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='put'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;processView&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;task.process&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;taskName&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='put'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;processView&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;task.taskName&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;taskName&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cond&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;execMode&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='put'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;processView&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;task.execMode&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;execMode&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/cond&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='checkinView'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;rule&nbsp;name='getCallerSession'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;processView&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;null/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;<br />
&lt;/Rule&gt;</code></p>
<p>And here is a sample invocation:</p>
<p><code>&lt;rule&nbsp;name='runTask'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&nbsp;name='taskName'&nbsp;value='myTask'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&nbsp;name='taskVariables'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;map&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;taskArgument1&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;myVariable&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;taskArgument2&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;String&nbsp;Data&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/map&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/argument&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&nbsp;name='execMode'&nbsp;value='async'/&gt;<br />
&lt;/rule&gt;</code></p>
<p>The value of execMode should be one of the following:</p>
<dl>
<dt><cite>sync</cite></dt>
<dd>Specifies synchronous or foreground execution</dd>
<dt><cite>async</cite></dt>
<dd>Specifies asynchronous or background execution</dd>
<dt><cite>asyncImmediate</cite></dt>
<dd>Specifies asynchronous with immediate thread launch</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2008/07/08/invoking-a-task-via-xpress-in-suns-identity-manager-7-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTTP File Uploads with Sun&#8217;s Identity Manager 7.1</title>
		<link>http://woogie.net/2008/05/17/http-file-uploads-with-suns-identity-manager-7-1/</link>
		<comments>http://woogie.net/2008/05/17/http-file-uploads-with-suns-identity-manager-7-1/#comments</comments>
		<pubDate>Sat, 17 May 2008 08:20:42 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://woogie.net/wordpress/?p=54</guid>
		<description><![CDATA[Identity Manager has a display class called FileUpload which you can use to do HTTP File Uploads. In a form, it would look something like this: &#60;Field&#160;name='fileUpload'&#62; &#160;&#160;&#160;&#160;&#60;Display class='FileUpload'&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;Property&#160;name='Title'&#160;value='File&#160;to&#160;upload'/&#62; &#160;&#160;&#160;&#160;&#60;/Display&#62; &#60;/Field&#62; In the above example, the field fileUpload would be set to an object of type DataSource. I want to use the contents of [...]]]></description>
			<content:encoded><![CDATA[<p>Identity Manager has a display class called <cite>FileUpload</cite> which you can use to do HTTP File Uploads.  In a form, it would look something like this:</p>
<p><code>&lt;Field&nbsp;name='fileUpload'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;Display class='FileUpload'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Property&nbsp;name='Title'&nbsp;value='File&nbsp;to&nbsp;upload'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Display&gt;<br />
&lt;/Field&gt;</code></p>
<p>In the above example, the field <cite>fileUpload</cite> would be set to an object of type <cite>DataSource</cite>.  I want to use the contents of the file as a string in my XPRESS rules, but how do I do that?</p>
<p>The most obvious thing to try would be to invoke the appropriate java directly from XPRESS.  Here is a rule that does that:</p>
<p><code>&lt;Rule&nbsp;name="getStringFromFileUpload"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument&nbsp;name='fileUpload'/&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;block&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;defvar&nbsp;name='bufferedReader'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new&nbsp;class='java.io.BufferedReader'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new&nbsp;class="java.io.InputStreamReader"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='getInputStream'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;fileUpload&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/defvar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;defvar&nbsp;name='fileContentAsString'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;defvar&nbsp;name='nextLine'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='readLine'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;bufferedReader&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/defvar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;while&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;notnull&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;nextLine&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/notnull&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;block&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;setvar&nbsp;name='fileContentAsString'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;concat&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;fileContentAsString&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;nextLine&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/concat&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/setvar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;setvar&nbsp;name='nextLine'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='readLine'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;bufferedReader&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/setvar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/while&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;fileContentAsString&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;<br />
&lt;/Rule&gt;</code></p>
<p>Unfortunately, when I attempt that, I get this:</p>
<blockquote><p>XPRESS  exception ==&gt; com.waveset.util.WavesetException: XPRESS  exception ==&gt; com.waveset.util.WavesetException: XPRESS  exception ==&gt; com.waveset.util.WavesetException: Couldn&#8217;t find method getInputStream() in class com.waveset.ui.util.BufferedRequest$AttachmentDataSource</p></blockquote>
<p>That&#8217;s odd, because there really is a method called <cite>getInputStream</cite> on <cite>AttachmentDataSource</cite>.  Ah well, so I seem to have hit a bug in XPRESS.  No bother, I&#8217;ll just try invoking the appropriate Java in Javascript.  Here is a rule that does that:</p>
<p><code>&lt;Rule&nbsp;name="getStringFromFileUpload"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument&nbsp;name='fileUpload'/&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;importPackage(Packages.javax.activation);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;importPackage(Packages.com.waveset.ui.util);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;importPackage(Packages.java.io);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;importPackage(Packages.java.lang);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;attachment&nbsp;=&nbsp;env.get('fileUpload');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fileContentsAsString&nbsp;=&nbsp;'';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bufferedReader&nbsp;=&nbsp;new&nbsp;BufferedReader(new&nbsp;InputStreamReader(attachment.getInputStream()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;line&nbsp;=&nbsp;'';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((line&nbsp;=&nbsp;bufferedReader.readLine())&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileContentsAsString&nbsp;+=&nbsp;line&nbsp;+&nbsp;"\n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(err)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;err.getMessage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileContentsAsString;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br />
&lt;/Rule&gt;</code></p>
<p>Hmm, no dice that way, either:</p>
<blockquote><p>org.mozilla.javascript.EvaluatorException: Class org.mozilla.javascript.NativeJavaMethod can not access a member of class com.waveset.ui.util.BufferedRequest$AttachmentDataSource with modifiers &#8220;public&#8221;</p></blockquote>
<p>OK, so it seems that it&#8217;s not just XPRESS, but Javascript also has a problem invoking the method.  The only solution I could find is to write a custom bit of Java to do the actual work like this:</p>
<p><code>package&nbsp;net.woogie.idm.util;<br />
&nbsp;<br />
import&nbsp;java.io.*;<br />
import&nbsp;javax.activation.*;<br />
import&nbsp;com.waveset.ui.util.*;<br />
&nbsp;<br />
public&nbsp;class&nbsp;Attachment&nbsp;{<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Attachment()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;toString(DataSource&nbsp;attachment)&nbsp;throws&nbsp;IOException&nbsp;{<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileContentsAsString&nbsp;=&nbsp;"";<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inputStream&nbsp;=&nbsp;attachment.getInputStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;inputStreamReader&nbsp;=&nbsp;new&nbsp;InputStreamReader(inputStream);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;bufferedReader&nbsp;=&nbsp;new&nbsp;BufferedReader(inputStreamReader);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((line&nbsp;=&nbsp;bufferedReader.readLine())&nbsp;!=&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileContentsAsString&nbsp;+=&nbsp;line&nbsp;+&nbsp;"\n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fileContentsAsString;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></p>
<p>And to invoke it via XPRESS like this:</p>
<p><code>&lt;Rule&nbsp;name="getStringFromFileUpload"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument&nbsp;name='fileUpload'/&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke&nbsp;name='toString'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new&nbsp;class='net.woogie.idm.util.Attachment'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;fileUpload&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&lt;/Rule&gt;</code></p>
<p>This works, but it sort of bums me out because it would be nice to have an XML only solution to this.</p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2008/05/17/http-file-uploads-with-suns-identity-manager-7-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parsing XML in XPRESS Rules Within Sun&#8217;s Identity Manager</title>
		<link>http://woogie.net/2008/05/04/parsing-xml-in-xpress-rules-within-suns-identity-manager/</link>
		<comments>http://woogie.net/2008/05/04/parsing-xml-in-xpress-rules-within-suns-identity-manager/#comments</comments>
		<pubDate>Sun, 04 May 2008 14:39:35 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://woogie.net/wordpress/?p=47</guid>
		<description><![CDATA[I&#8217;ve been doing a lot of work with Sun&#8217;s Identity Manager lately, and have some things that might be of interest to other&#8217;s so I&#8217;ll try to post them here as time permits. I think the coolest thing I&#8217;ve done so far is to build a library for parsing XML within XPRESS. It&#8217;s actually fairly [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been doing a lot of work with <a href="http://www.sun.com/software/products/identity_mgr/index.jsp">Sun&#8217;s Identity Manager</a> lately, and have some things that might be of interest to other&#8217;s so I&#8217;ll try to post them here as time permits.</p>
<p>I think the coolest thing I&#8217;ve done so far is to build a library for parsing XML within XPRESS.  It&#8217;s actually fairly straightforward, but it took me long enough to get right that it seems like a good thing to share.  I have 2 XPRESS rules:</p>
<dl>
<dt>transformXML</dt>
<dd>Takes 2 strings, xml and xsl, as input, and returns the transformed data.</dd>
<dt>validateXML</dt>
<dd>Takes 2 strings, xml and xsd, as input, and returns 1 true if the XML validates against the XSD, and returns false otherwise.</dd>
</dl>
<p>Both rules invoke Java to do the actual work, but for reasons I&#8217;ll explain later, validateXML is a bit more complex than transformXML.  The XML transformation is simply a matter of figuring out the proper incantation to invoke:</p>
<p><code>&lt;Rule name='transformXML'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument name='xml'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument name='xsl'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;block&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;defvar name="StringWriter"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new class="java.io.StringWriter"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/defvar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke name="transform"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke name="newTransformer"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke name="newInstance" class="javax.xml.transform.TransformerFactory"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new class="javax.xml.transform.stream.StreamSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new class="java.io.StringReader"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;xsl&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new class="javax.xml.transform.stream.StreamSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new class="java.io.StringReader"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;xml&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;new class="javax.xml.transform.stream.StreamResult"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;StringWriter&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/new&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;invoke name="toString"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;StringWriter&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/invoke&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;<br />
&lt;/Rule&gt;</code></p>
<p>That looks fairly complicated, but it is pretty much a straight translation from the Java to XPRESS invocations.  Unfortunately, XML validation isn&#8217;t quite as straightforward.  If there is a way to do it without exception handling, which is not available in XPRESS, I don&#8217;t know what that way is.  So, the direct invocations similar to the code above will not work.</p>
<p>It would be possible to write a bit of simple Java code to wrap the exception handling in a nice set of return codes, deploy that code with the IDM deployment and then invoke that from XPRESS, but I was really hoping to avoid custom Java if possible.  In this case, JavaScript comes to the rescue (man, I never thought I would say that):</p>
<p><code>&lt;Rule name='validateXML'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument name='xsd'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;RuleArgument name='xml'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;cond&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;and&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;notnull&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;xsd&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/notnull&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;notnull&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref&gt;xml&lt;/ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/notnull&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/and&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;importPackage(Packages.javax.xml.validation);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;importPackage(Packages.java.io);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;importPackage(Packages.javax.xml.transform.stream);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var xsd = env.get('xsd');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var xml = env.get('xml');</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var schemaFactory = SchemaFactory.newInstance('http://www.w3.org/2001/XMLSchema');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var schema = schemaFactory.newSchema(new StreamSource(new StringReader(xsd)));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var validator = schema.newValidator();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var result = 'true';</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validator.validate(new StreamSource(new StringReader(xml)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(err) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result = 'false';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s&gt;false&lt;/s&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/cond&gt;<br />
&lt;/Rule&gt;</code></p>
<p>I&#8217;ve attached a rule library containing both these rules that you should be able to import and use in your project.</p>
<p>Have Fun.</p>
<p><a href='http://woogie.net/wordpress/wp-content/uploads/2008/05/Configuration-xmlRuleLibrary.xml_.zip'>Configuration-xmlRuleLibrary.xml</a></p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2008/05/04/parsing-xml-in-xpress-rules-within-suns-identity-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linksysmon Is Dead, Long Live linksysmon</title>
		<link>http://woogie.net/2006/07/12/linksysmon-is-dead-long-live-linksysmon/</link>
		<comments>http://woogie.net/2006/07/12/linksysmon-is-dead-long-live-linksysmon/#comments</comments>
		<pubDate>Wed, 12 Jul 2006 06:14:59 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://woogie.net/wordpress/?p=60</guid>
		<description><![CDATA[Well, it looks like there might still be some interest in linksysmon, so I&#8217;ve put a link to the final tar file here. linksysmon-1.1.4.tar.gz]]></description>
			<content:encoded><![CDATA[<p>Well, it looks like there might still be some interest in linksysmon, so I&#8217;ve put a link to the final tar file here.</p>
<p><a href='http://woogie.net/wordpress/wp-content/uploads/2010/01/linksysmon-1.1.4.tar.gz'>linksysmon-1.1.4.tar.gz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2006/07/12/linksysmon-is-dead-long-live-linksysmon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linksysmon Is Dead, Long Live openwrt</title>
		<link>http://woogie.net/2006/07/02/linksysmon-is-dead-long-live-openwrt/</link>
		<comments>http://woogie.net/2006/07/02/linksysmon-is-dead-long-live-openwrt/#comments</comments>
		<pubDate>Sun, 02 Jul 2006 13:58:14 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://woogie.net/wordpress/?p=63</guid>
		<description><![CDATA[With the update of the new site, I&#8217;m dropping support for linksysmon all together. A cursory glance at the logs finds no downloads from anything but the search engines, and I&#8217;ve upgraded my router hardware to a Linksys WRT54GL, so I don&#8217;t even use it anymore. Instead, I use openwrt.]]></description>
			<content:encoded><![CDATA[<p>With the update of the new site, I&#8217;m dropping support for linksysmon all together. A cursory glance at the logs finds no downloads from anything but the search engines, and I&#8217;ve upgraded my router hardware to a Linksys WRT54GL, so I don&#8217;t even use it anymore. Instead, I use <a href="http://openwrt.org/">openwrt</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2006/07/02/linksysmon-is-dead-long-live-openwrt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grant is here!</title>
		<link>http://woogie.net/2006/01/22/grant-is-here/</link>
		<comments>http://woogie.net/2006/01/22/grant-is-here/#comments</comments>
		<pubDate>Sun, 22 Jan 2006 14:33:15 +0000</pubDate>
		<dc:creator>woogie</dc:creator>
				<category><![CDATA[Domesticity]]></category>

		<guid isPermaLink="false">http://woogie.net/wordpress/?p=41</guid>
		<description><![CDATA[I should have mentioned this a while ago, but Grant Hamilton Wohlgemuth was born on October 19, 2005 at 12:19 PM, and weighed 7 pounds 15 ounces. He&#8217;s been an absolute wonder.]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 110px"><a class="shutterset_" href="http://woogie.net/wp-content/gallery/misc/new_grant.jpg"><img class="ngg-singlepic ngg-none " title="Grant Hamilton Wohlgemuth" src="http://woogie.net/wp-content/gallery/misc/thumbs/thumbs_new_grant.jpg" alt="new_grant" width="100" height="75" /></a><p class="wp-caption-text">Grant Hamilton Wohlgemuth</p></div>
<p>I should have mentioned this a while ago, but Grant Hamilton Wohlgemuth was born on October 19, 2005 at 12:19 PM, and weighed 7 pounds 15 ounces. He&#8217;s been an absolute wonder.</p>
]]></content:encoded>
			<wfw:commentRss>http://woogie.net/2006/01/22/grant-is-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
