<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Open Source GenXDM Project Blog</title>
	<atom:link href="http://genxdm.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://genxdm.wordpress.com</link>
	<description>Just another WordPress.com site</description>
	<lastBuildDate>Wed, 24 Aug 2011 15:43:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='genxdm.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Open Source GenXDM Project Blog</title>
		<link>http://genxdm.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://genxdm.wordpress.com/osd.xml" title="Open Source GenXDM Project Blog" />
	<atom:link rel='hub' href='http://genxdm.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Port of Santuario 1.4.5-r01</title>
		<link>http://genxdm.wordpress.com/2011/08/24/port-of-santuario-1-4-5-r01/</link>
		<comments>http://genxdm.wordpress.com/2011/08/24/port-of-santuario-1-4-5-r01/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 15:43:21 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=163</guid>
		<description><![CDATA[Yesterday I posted the new build of the GenXDM port of Apache&#8216;s Santuario XML Security Java project, version 1.4.5. This means that the port has now achieved complete parity with the official project, and further adds full support for GenXDM &#8230; <a href="http://genxdm.wordpress.com/2011/08/24/port-of-santuario-1-4-5-r01/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=163&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I posted the new build of the <a title="GenXDM" href="http://code.google.com/p/genxdm/">GenXDM</a> <a title="GenXDM port of Santuario XML Security" href="http://code.google.com/a/apache-extras.org/p/santuario-genxdm/">port</a> of <a title="Apache" href="https://www.apache.org/">Apache</a>&#8216;s Santuario XML Security Java project, version 1.4.5.</p>
<p>This means that the port has now achieved complete parity with the official project, and further adds full support for GenXDM for all public APIs.</p>
<p>The 1.4.5 release of Santuario introduced some additional test cases, and as before, I copied those test cases and ported them to use GenXDM. This means that all existing test cases continue to run unmodified, and there are yet more test cases that confirm GenXDM based functionality.</p>
<p>Particularly if you only use the library via the javax.xml.crypto APIs, this library should now be a complete drop-in replacement for existing uses, and enables the use of GenXDM whenever you want it&#8230;.</p>
<p>Please feel free to kick the tires, and let us know about issues you find with either the port, or GenXDM itself!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=163&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2011/08/24/port-of-santuario-1-4-5-r01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>Santuario port 1.4.4-r02 release</title>
		<link>http://genxdm.wordpress.com/2011/06/30/santuario-port-1-4-4-r02-release/</link>
		<comments>http://genxdm.wordpress.com/2011/06/30/santuario-port-1-4-4-r02-release/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 01:15:16 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=149</guid>
		<description><![CDATA[I just posted a new version of the port of the Santuario library. This builds upon the 2011-06-27 release of GenXDM (which includes some small fixes to the bridges that help out the Santuario port). More importantly, this adds a &#8230; <a href="http://genxdm.wordpress.com/2011/06/30/santuario-port-1-4-4-r02-release/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=149&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just posted a new version of the <a title="Santuario-GenXDM" href="http://code.google.com/a/apache-extras.org/p/santuario-genxdm/">port</a> of the Santuario library. This builds upon the 2011-06-27 release of <a title="GenXDM" href="http://code.google.com/p/genxdm/">GenXDM</a> (which includes some small fixes to the bridges that help out the Santuario port). More importantly, this adds a fix for <a title="Issue 10" href="http://code.google.com/a/apache-extras.org/p/santuario-genxdm/issues/detail?id=10">issue 10</a>, support for the javax.xml.crypto implementation using GenXDM.</p>
<p>As with the port of the rest of the library, I preserved the existing API while rewriting the existing DOM-based code to use GenXDM constructs. For example, in places where a <a title="DOMStructure" href="http://download.oracle.com/javase/6/docs/api/javax/xml/crypto/dom/DOMStructure.html">DOMStructure</a> gets passed the implementation observes that it is an instance of that class, and provides an appropriate instance of Model and DocumentHandlerFactory to code that does the actual work. Of course, clients need to be able to pass their own instances of Model and DocumentHandlerFactory. To that end, I added a GenXDMStructure class, which is analogous to the DOMStructure class, and adds instances of the Model and DocumentHandlerFactory.</p>
<p>Following the pattern of DOMStructure/GenXDMStructure, for four other classes in the original API (DOMCryptoContext, DOMSignContext, DOMURIReference, and DOMValidateContext), I created new classes for GenXDM constructs. Thus, a client wishing to use the GenXDM form of the implementation merely needs to instantiate these new constructs, rather than the old DOM-specific ones.</p>
<p>Since the port modifies the existing DOM code to use GenXDM, this means that all of the current test cases help to validate the quality of the port. To complete the picture, though, I provided additional test cases that use the APIs with non-DOM underlying trees. Since many of the existing test cases rely on a &#8220;SignatureValidator&#8221; class, and don&#8217;t have any DOM specific code, I updated the &#8220;SignatureValidator&#8221; class to enable switching amongst different underlying tree models. Fortunately, that left only a small number of additional test case files that I needed to copy and rewrite to use GenXDM constructs.</p>
<p>Please check out the 1.4.4-r02 release, and let us know how it works for you. It should be functionally equivalent to the Santuario 1.4.4 release for DOM. Of course, since it uses GenXDM, it supports non-DOM XML trees for which bridges exist &#8211; that we know of, this includes Axiom &amp; our &#8220;Cx&#8221; reference implementation.</p>
<p>The next release will address <a title="Issue 14" href="http://code.google.com/a/apache-extras.org/p/santuario-genxdm/issues/detail?id=14">issue 14</a>: porting changes made in the 1.4.5 release.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=149&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2011/06/30/santuario-port-1-4-4-r02-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>First Santuario Port Release</title>
		<link>http://genxdm.wordpress.com/2011/05/13/first-santuario-port-release/</link>
		<comments>http://genxdm.wordpress.com/2011/05/13/first-santuario-port-release/#comments</comments>
		<pubDate>Fri, 13 May 2011 21:22:31 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Announcement]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=145</guid>
		<description><![CDATA[I&#8217;ve posted the first official release of the Santuario port to use GenXDM. I&#8217;ve labeled the release santxmlsong-1.4.4-r01. The name comes from SANTuario XML Security ON Genxdm. (If you&#8217;ve got better recommendations for the name, please suggest them, and perhaps &#8230; <a href="http://genxdm.wordpress.com/2011/05/13/first-santuario-port-release/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=145&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve posted the first <a title="project downloads" href="https://code.google.com/a/apache-extras.org/p/santuario-genxdm/downloads/list">official release</a> of the <a title="Santuario home page" href="http://santuario.apache.org/">Santuario</a> port to use <a title="GenXDM Home Page" href="https://code.google.com/p/genxdm/">GenXDM</a>. I&#8217;ve labeled the release santxmlsong-1.4.4-r01. The name comes from SANTuario XML Security ON Genxdm. (If you&#8217;ve got better recommendations for the name, please suggest them, and perhaps we can use that for the next release.)</p>
<p>This release is supposed to be functionally equivalent to the <a title="release notes for santuario" href="http://santuario.apache.org/java144releasenotes.html">xmlsec-1.4.4 release</a>. I&#8217;ve attempted to keep API compatibility, but only for those methods actually being used. For example, all of the official test cases for the library pass unmodified. However, if you use some of the less frequent entry points, not covered by the test cases, then they might not be there. If that&#8217;s the case, let me know, and we can restore them!</p>
<p>Please feel free to take it for a spin!</p>
<p>For details about the project, check the project <a title="Santuario-GenXDM project page" href="https://code.google.com/a/apache-extras.org/p/santuario-genxdm/">page</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=145&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2011/05/13/first-santuario-port-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>April 2011 Release</title>
		<link>http://genxdm.wordpress.com/2011/04/29/april-2011-release/</link>
		<comments>http://genxdm.wordpress.com/2011/04/29/april-2011-release/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 23:52:39 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=140</guid>
		<description><![CDATA[We released a new version of GenXDM on April 15th of this month. With so much to work on, we were a little slow in posting notes about what went into it. Of course, you could search the issues list, &#8230; <a href="http://genxdm.wordpress.com/2011/04/29/april-2011-release/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=140&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We released a new <a title="download link" href="http://genxdm.googlecode.com/files/genxdm-20110415.zip">version</a> of GenXDM on April 15th of this month. With so much to work on, we were a little slow in posting notes about what went into it.</p>
<p>Of course, you could <a title="Query of issues fixed for 2011-04-15 release" href="https://code.google.com/p/genxdm/issues/list?can=1&amp;q=milestone%3D20110415&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;cells=tiles">search</a> the issues list, but you might miss some of the subtlety, so let me see if I can summarize the key points:</p>
<ul>
<li><a href="https://code.google.com/p/genxdm/issues/detail?id=34">34</a> &amp; <a href="https://code.google.com/p/genxdm/issues/detail?id=16">16</a> &amp; <a href="https://code.google.com/p/genxdm/issues/detail?id=19">19</a>: We changed the mutable API to match, as closely as possible, the <a title="XQuery Update Facility" href="http://www.w3.org/TR/xquery-update-10/">XQuery Update Facility</a> specification.</li>
<li><a href="https://code.google.com/p/genxdm/issues/detail?id=48">48</a>: Reorganized core API packages. We wanted to get this out of the way so that we can consider the API stable.</li>
<li><a href="https://code.google.com/p/genxdm/issues/detail?id=9">9</a> &amp; <a href="https://code.google.com/p/genxdm/issues/detail?id=11">11</a>: Significant overhaul to the XPath API. See the previous post on this.</li>
<li><a href="https://code.google.com/p/genxdm/issues/detail?id=35">35</a>: Switched to using JUnit 4. OK, well maybe clients of the code won&#8217;t care, but we do.</li>
<li><a href="https://code.google.com/p/genxdm/issues/detail?id=41">41</a>: Clarified meaning of node identity</li>
<li><a href="https://code.google.com/p/genxdm/issues/detail?id=12">12</a> &amp; <a href="https://code.google.com/p/genxdm/issues/detail?id=42">42</a> and various commits: DOM bridge improvements &amp; bug fixes.</li>
<li>A completely overhauled test suite that does a much better job of validating the implementation of a bridge. Also fixed the DOM &amp; Cx bridges to match the test suite.</li>
<li>A completely overhauled, and almost complete implementation of a bridge for <a href="http://ws.apache.org/axiom/">Axiom</a>. Note that we since fixed a bug related to the axiom bridge that didn&#8217;t make it in this release.</li>
</ul>
<p>The bridge implementations now get tested far more fully, and we&#8217;re far more confident of their completeness, now. Please dive in and let us know what you think of the latest release!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=140&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2011/04/29/april-2011-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>Improved XPath API</title>
		<link>http://genxdm.wordpress.com/2011/04/09/improved-xpath-api/</link>
		<comments>http://genxdm.wordpress.com/2011/04/09/improved-xpath-api/#comments</comments>
		<pubDate>Sat, 09 Apr 2011 00:01:12 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Announcement]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=135</guid>
		<description><![CDATA[We&#8217;re working toward our next release of GenXDM. We&#8217;ve not been doing quite as good a job at the &#8220;release early, release often&#8221; approach that we should be taking, but we&#8217;re getting closer to a new release. One of our &#8230; <a href="http://genxdm.wordpress.com/2011/04/09/improved-xpath-api/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=135&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re working toward our next release of GenXDM. We&#8217;ve not been doing quite as good a job at the &#8220;release early, release often&#8221; approach that we should be taking, but we&#8217;re getting closer to a new release.</p>
<p>One of our recent key changes dealt with a long-standing bugaboo of mine. Specifically, I filed bugs <a title="issue 9" href="https://code.google.com/p/genxdm/issues/detail?id=9">9</a> and <a title="issue 11" href="https://code.google.com/p/genxdm/issues/detail?id=11">11</a>. Issues of the sort represented by this pair will cause us headaches further on if we don&#8217;t deal with them now. That&#8217;s because we don&#8217;t want to change the API more than we have to, but we definitely don&#8217;t want to change it after we reach a &#8220;1.0&#8243; milestone. Issue 11, in particular, noted the presence of a lot of concrete classes in an apparent API package.</p>
<p>Taking the approach of diving in and seeing what happens, I started replacing all the references to concrete classes with references to interfaces. The intermediate results caused some angst (&#8220;IConvertible____&#8221; interfaces) suggesting that the abstractions were not quite right. After a brief email exchange, we figured out how to address that problem, and turned forty-one class files as part of an API into a much smaller collection of what is now just twenty-two, and also reduced the package count down to just two.</p>
<p>As a nice side benefit, I can describe the purpose of the new packages much more readily. One package (org.genxdm.xpath.v10) is there for mere clients of XPath. The other package (org.genxdm.xpath.v10.extend) is there if you need to add a function to the XPath engine. What makes this change even cooler &#8211; I had to implement an extension function (&#8220;here&#8221;) for the <a title="Port of Apache Santuario to GenXDM." href="https://code.google.com/a/apache-extras.org/p/santuario-genxdm/" target="_blank">port</a> of the XML Security library. With the newly restructured API, I was able to implement the function purely with the new API, rather than resorting to extending the implementation we have.</p>
<p>One final note. Now that we have this simplified API, it looks quite possible to create a javax.xml.xpath wrapper around our API. Such an API would give people who want to experiment with GenXDM a way to do so while still using what they&#8217;re familiar with. This wrapper won&#8217;t replace the API we have for at least two reasons. Our API:</p>
<ul>
<li>uses generics and types, producing more type-safety than does the javax.xml.xpath API</li>
<li>defines how to add extension functions</li>
</ul>
<p>Well, in any case, an implementation using javax.xml.xpath APIs is possible, but we don&#8217;t have any demand for it yet&#8230;.</p>
<p>The new release has some other cool stuff in it, but that&#8217;s for another blog post.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/135/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=135&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2011/04/09/improved-xpath-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>Port of Apache Santuario to GenXDM</title>
		<link>http://genxdm.wordpress.com/2011/02/03/port-of-apache-santuario-to-genxdm/</link>
		<comments>http://genxdm.wordpress.com/2011/02/03/port-of-apache-santuario-to-genxdm/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 18:54:12 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Announcement]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=132</guid>
		<description><![CDATA[I&#8217;ve made reference to a port we&#8217;ve been working on, namely moving Apache Santuario, a.k.a. XML Security to work on top of GenXDM. I&#8217;m now pleased to announce that we&#8217;ve released said port under the Apache license, and you can &#8230; <a href="http://genxdm.wordpress.com/2011/02/03/port-of-apache-santuario-to-genxdm/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=132&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve made reference to a port we&#8217;ve been working on, namely moving Apache <a title="Apache Santuario" href="http://santuario.apache.org/">Santuario</a>, a.k.a. XML Security to work on top of GenXDM. I&#8217;m now pleased to announce that we&#8217;ve released said port under the Apache license, and you can now check out the <a title="Santuarion-GenXDM project" href="http://code.google.com/a/apache-extras.org/p/santuario-genxdm/">project </a>hosted on the <a title="Apache Extras" href="http://code.google.com/a/apache-extras.org/hosting/">Apache Extras</a> site.</p>
<p>We think this port shows important aspects of GenXDM. It shows you can take a sophisticated code base, that cares about many details of XML, and convert it to work using GenXDM. It shows that you can build such ports in a way that provides backwards compatibility with existing DOM APIs (or other tree APIs, for that matter). It validates the mutation part of the GenXDM API, something we introduced to the code-base only after we decided to release the technology as open-source. And it shows that you can do side-by-side comparisons of XML tree technologies, and choose one <em>at runtime</em> that best fits your use case.</p>
<p>We recognize that there&#8217;s still more <a title="project issue list" href="http://code.google.com/a/apache-extras.org/p/santuario-genxdm/issues/list">work</a> to do on this port. However, we pass all the existing test cases, so most of what&#8217;s to be done really falls into the category of enhancements.</p>
<p>If you&#8217;re at all interested, please check out the project, and let us know what you think. If you give it a try, let us know what you find out!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/132/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=132&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2011/02/03/port-of-apache-santuario-to-genxdm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>Improved Mutation API</title>
		<link>http://genxdm.wordpress.com/2011/01/06/improved-mutation-api/</link>
		<comments>http://genxdm.wordpress.com/2011/01/06/improved-mutation-api/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 16:42:36 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Chatter]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=127</guid>
		<description><![CDATA[What with the holidays, and actual coding work, we&#8217;ve not crammed in to many posts for GenXDM lately.  Time to fix that. We&#8217;ve made a critical improvement (well, in the source, we&#8217;ve not done a release with it yet).  Our &#8230; <a href="http://genxdm.wordpress.com/2011/01/06/improved-mutation-api/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=127&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>What with the holidays, and actual coding work, we&#8217;ve not crammed in to many posts for GenXDM lately.  Time to fix that.</p>
<p>We&#8217;ve made a critical improvement (well, in the source, we&#8217;ve not done a release with it yet).  Our original drop included a mutation API.  We added this API to facilitate the conversion of existing XML tools that actually need to mutate existing XML trees.  When we added the mutation APIs, we mirrored the functionality on what we were trying to replace: DOM.  Among the unfortunately aspects, this gave us <a title="bug 16" href="http://code.google.com/p/genxdm/issues/detail?id=16">bug 16</a>, that of baking a notion of &#8220;owner&#8221; into the mutable API.</p>
<p>A key trouble is that <a title="Document Object Model" href="http://www.w3.org/DOM/">DOM</a> conflates the &#8220;<a href="http://www.w3.org/TR/DOM-Level-3-Core/core.html#i-Document">root</a>&#8221; of a document with that of a &#8220;<a title="factory" href="http://en.wikipedia.org/wiki/Factory_%28software_concept%29">factory</a>&#8221; for new elements.  For all other XML tree APIs we&#8217;ve looked at, the APIs separate these two concepts.  GenXDM already separated these two notions by introducing a &#8220;NodeFactory&#8221;, but that still required the use of an &#8220;owner&#8221; parameter.  What to do?</p>
<h2>XQuery Update Facility</h2>
<p>Along our journey, we noticed <a title="XQuery" href="http://www.w3.org/TR/xquery/">XQuery</a> <a title="XQuery Update Facility" href="http://www.w3.org/TR/xqupdate/">Update Facility</a> (XQUF), and consequently filed <a title="bug 19" href="http://code.google.com/p/genxdm/issues/detail?id=19">bug 19</a>.  We brought together the two bugs &#8211; the annoying DOM notion of &#8220;ownership&#8221; and our failure to follow the XQUF APIs.  Fortunately, the XQUF APIs don&#8217;t have a notion of ownership, so perhaps we could kill two birds with one stone.  We converted our mutable API to follow the pattern of XQUF.  To prove it out, we also converted the one project that extensively uses the mutable APIs &#8211; XML Security.  This ended up being a fair chunk of work, in part because there was no way to incrementally port XML Security to the new APIs, the whole library had to be converted all at once.  (I&#8217;m using the combination of all of these changes plus holidays and such as part of my lame excuse for not posting more frequently.)</p>
<p>Very much like with the core GenXDM APIs, we&#8217;re <a title="Bug 37 - missing XQUF methods." href="http://code.google.com/p/genxdm/issues/detail?id=37">not able</a> to exactly follow the XQUF specification.  Notably, XQUF has a notion of pending changes &#8211; all the APIs we have make immediate changes.  This means that some of the methods, like &#8220;mergeUpdates&#8221;, and &#8220;applyUpdates&#8221; don&#8217;t make sense, and &#8220;propogateNamespaces&#8221; sort of makes sense, but we added &#8220;insertNamespace&#8221; instead.  For the APIs that do make sense, we&#8217;ve done our best to follow XQUF.</p>
<p>For now, we&#8217;re thinking that a notion of pending changes will have to <a title="Bug 36 - missing XQUF methods" href="http://code.google.com/p/genxdm/issues/detail?id=36">wait</a> until we see a need for it, and then we can make it a part of interfaces that extend the ones we just built.</p>
<p>Overall, I&#8217;m happy with the changes, because it actually simplified some of the XML Security code changes.  In places where we needed to pass along an instance of &#8220;NodeFactory&#8221;, an &#8220;owner&#8221;, and the node to be updated, we now only need to pass along the &#8220;NodeFactory&#8221; and the node to be updated.  Of course, this implies that NodeFactory actually has state, and can only be used with a single DOM Document (if that&#8217;s your underlying model), but that&#8217;s pretty easy to deal with.</p>
<h2>Conclusion</h2>
<p>Our mutable API now has the benefit of actually being more closely tied to the XQuery standard that we&#8217;re trying to follow.  Also simplified some of the code that actually mutates XML trees.  Overall, a significant improvement.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/127/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=127&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2011/01/06/improved-mutation-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>The story so far &#8230;</title>
		<link>http://genxdm.wordpress.com/2010/11/15/the-story-so-far-1/</link>
		<comments>http://genxdm.wordpress.com/2010/11/15/the-story-so-far-1/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 16:22:07 +0000</pubDate>
		<dc:creator>Amy!</dc:creator>
				<category><![CDATA[Chatter]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=120</guid>
		<description><![CDATA[So, some time ago, I posted here with the promise to address some questions. Now seems to be a good time to actually do so, for some of them. Why doesn’t it have a better name? Why isn’t there a &#8230; <a href="http://genxdm.wordpress.com/2010/11/15/the-story-so-far-1/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=120&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, some time ago, I posted here with the promise to address some questions.  Now seems to be a good time to actually do so, for some of them.</p>
<ul>
<li>Why doesn’t it have a better name?</li>
<li>Why isn’t there a better web site, source code repository, and all the other infrastructure?</li>
</ul>
<p>Yay, us.  We&#8217;ve changed the name, in response to comments.  After quite a bit of discussion (and running off in all directions), we ended up settling on <em>GenXDM</em>, which amuses those of us who are gen-X-ers (which is all of the current committers).  What do you think?  Better?</p>
<p>We have also had to concede that we don&#8217;t yet have the community around our code that would convince folks at Apache to sponsor the project.  So we&#8217;ve created a repository, and can generate a website, and have a good mailing list, and &#8230; well, there&#8217;s this blog, as well.  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>That&#8217;s what we&#8217;ve <em>done</em>.  There are also two questions I&#8217;d like to address now (without making this post too chunky).</p>
<ul>
<li>Has the opportunity for an in-memory API other than the DOM already passed?</li>
<li>Why not use an existing in-memory tree model API, then?</li>
</ul>
<p>Now, a discussion of the DOM is liable to become rather heated.  Note that I need to restrict the discussion to Java alone.  In my opinion, the opportunity for DOM to achieve credibility passed about five years ago&mdash;which doesn&#8217;t prevent it from being the dominant model.  The problem is that there is almost zero possibility of displacing an API with so broad and deep a network effect all at once.  The DOM is too many places, in too much code.  If you have to hold your nose and use it, then why make things harder by using some other tree model <em>as well</em>?</p>
<p>That&#8217;s the problem that all of the alternative XML tree model APIs in Java have faced, for the last ten years.  There are already better tree model APIs out there.  But if the developers of an XML processor want to reach an audience, to build a community, to see their code widely adopted, then they have to acknowledge that the DOM is dominant (except in certain niches).  In the development of GenXDM, we also faced and acknowledged the problem.  The GenXDM solution is deliberately built in a fashion that allows the DOM to continue in use.  We don&#8217;t <em>like</em> it, but we build on top of it&mdash;and also on top of alternative tree models.  It&#8217;s basically the same pattern that you&#8217;ll see in a number of applications/processors, where the XML tree model layer has been abstracted, so that the code can run over multiple different models.  As a rule, this has been done as a tangent, a side effort, and as a consequence tends to be the least common functionality across models.  GenXDM differs significantly: we&#8217;re providing an XDM API, which defines the utility that must be made available.  It may mean enhancing the tree models inside the bridge code, in one way or another.  Supporting multiple tree models is one of our central goals, not a tangent.  We&#8217;re doing it well.</p>
<p>In other words, we <em>are</em> using existing tree model APIs for XML&mdash;not &#8220;an&#8221; existing model, but &#8220;any&#8221; existing model (for which a bridge has been written).  In doing so, we expect not only to not fight DOM&#8217;s network effect, but to make use of it.</p>
<p>Suppose you have an idea for an application or processor for XML.  If you write it for the DOM, you get to use the DOM.  Lucky you.  You also get to integrate with other DOM-targeted processors.  Write it for GenXDM, and you get to use a much less odious API, <em>and</em> you get to integrate with other DOM-targeted processors.  Just inject a DOM bridge.  When operating in isolation, inject whatever bridge you prefer.  Down the line, when other processors also target GenXDM, inject whatever bridge you prefer.</p>
<p>It will take us some time to convince folks that this approach will work, but it has the advantage of not forcing massive disruption of existing code.</p>
<p>Enough proselytizing for now, I think.  Take a look at the code, won&#8217;t you?  Maybe you&#8217;ll find it useful.</p>
<p>Here&#8217;s the rest of the list of questions; I will get to them, in time.  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ul>
<li>Why should I implement now?</li>
<li>What’s the advantage to using gXML?</li>
<li>What is this “bridge” or “handle/body” pattern and why should I care?</li>
<li>What can it do right now, today?</li>
<li>Can it really grow to do all the things the developers say it could do?</li>
<li>Give me some numbers!</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=120&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2010/11/15/the-story-so-far-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/44731d09e939108c498fad3e84a06cf1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aaletal</media:title>
		</media:content>
	</item>
		<item>
		<title>First release under our new name</title>
		<link>http://genxdm.wordpress.com/2010/11/11/first-release-under-our-new-name/</link>
		<comments>http://genxdm.wordpress.com/2010/11/11/first-release-under-our-new-name/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 20:22:04 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://genxdm.wordpress.com/?p=116</guid>
		<description><![CDATA[We&#8217;ve posted the first release of GenXDM under the new name, having migrated from the &#8220;gxml&#8221; name. We announced it on our new mailing list, and we&#8217;re posting the site generated by Maven. In other words, lots of fun to &#8230; <a href="http://genxdm.wordpress.com/2010/11/11/first-release-under-our-new-name/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=116&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve posted the first release of <a href="http://code.google.com/p/genxdm/">GenXDM</a> under the new name, having migrated from the &#8220;gxml&#8221; name.</p>
<p>We <a href="http://groups.google.com/group/genxdm/browse_thread/thread/f91c5cfd8495fd26">announced</a> it on our new <a href="http://groups.google.com/group/genxdm?lnk=">mailing list</a>, and we&#8217;re posting the <a href="http://www.genxdm.org/">site</a> generated by Maven.</p>
<p>In other words, lots of fun to be had.  Please jump in and &#8220;kick the tires,&#8221; and let us know what you think!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=116&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2010/11/11/first-release-under-our-new-name/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
		<item>
		<title>Migrating Stateful Code to gXML &#8211; Episode 2</title>
		<link>http://genxdm.wordpress.com/2010/08/26/migrating-stateful-code-to-gxml-episode-2/</link>
		<comments>http://genxdm.wordpress.com/2010/08/26/migrating-stateful-code-to-gxml-episode-2/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 04:58:10 +0000</pubDate>
		<dc:creator>ericejohnson</dc:creator>
				<category><![CDATA[Migration]]></category>

		<guid isPermaLink="false">http://opensourcegxml.wordpress.com/?p=99</guid>
		<description><![CDATA[State Won&#8217;t Cause Problems, Will It? In the previous discussion about migration to gXML, I explored the conversion of one simple stateless method. That post explored some of the general patterns of migrating code to use gXML, by way of &#8230; <a href="http://genxdm.wordpress.com/2010/08/26/migrating-stateful-code-to-gxml-episode-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=99&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>State Won&#8217;t Cause Problems, Will It?</h1>
<p>In the <a title="migrating stateless code" href="2010/08/02/migrating-to-gxml-episode-1/" target="_blank">previous discussion</a> about migration to gXML, I explored the conversion of one simple stateless method. That post explored some of the general patterns of migrating code to use gXML, by way of deprecating old methods and adding new ones.</p>
<p>With this discussion, I want to take up a much more tangled scenario &#8211; a class that holds state, and how to migrate that.</p>
<h1>Parallel Tracks</h1>
<p>I had the most trouble with the ElementProxy class.  This class has a protected field in it of type Element.  A search of the existing source quickly revealed quite a number of subclasses that directly refer to this field. To change the class to work with gXML, though I needed to make sure that the class ElementProxy ended up being parameterized by &lt;N&gt;, and that a field corresponding to this existing field had to be of type N, rather than of type Element.  Remember, though, that my goal is to migrate the library incrementally &#8211; existing classes have to operate unmodified, at least until I have a chance to convert them.  So I took an approach of having parallel tracks.  Where I started with this:</p>
<pre>protected Element _constructionElement;
</pre>
<p>&#8230; I ended up with this:</p>
<pre>/** @deprecated **/
protected Element _constructionElement;

private N _wrappedElement;

private N _lastSyncedElement;

public void setElementNode(N elem) { ... }

public N getElementNode() { ... }
</pre>
<p>Before explaining this further, perhaps I have to explain the two scenarios more fully. In the easy case, a given subclass has been fully modified to use the new gXML-based approach, and that class uses new getter/setter methods I defined. This easy scenario works, because all access goes through the the get and set methods.  In the harder case, existing clients directly set and get the old protected member that I want to replace.  Unless I wanted to convert the entire class hierarchy stemming from this one class all at the same time, I needed a way to support a partially ported class hierarchy stemming from this one class.</p>
<p>In my first attempt at this, I didn&#8217;t have the &#8220;_lastSyncedElement&#8221; member. This didn&#8217;t work, though.  Instead, I found code directly setting the protected member, and yet I had already rewritten the parent class to use the new private member via the getter method.  Since Java doesn&#8217;t give me any way to detect when a protected member is altered, the value returned by the get method didn&#8217;t match the value directly set into the protected method, and tests failed.  The solution, simple enough, was to add a <em>third</em> copy of the field, as show above, the &#8220;lastSyncedElement&#8221;.  The third copy kept track of the last value set using the new API.  Now, the &#8220;get&#8221; method, whenever it went to get the new private value, it would first check to see if the &#8220;last sync value&#8221; matched the value of the old protected field.  If it didn&#8217;t, it would copy the value from the protected field into the new private member.</p>
<p>This change meant that all the as-yet-unmodified DOM-based code could run unmodified by directly accessing the &#8220;_constructionElement&#8221; field.  All the new code would call the &#8220;set&#8221; method to set the value, and the object being set was of type Element, I would also set the original protected value, and its shadow &#8211; &#8220;_lastSyncedElement&#8221;.  The new set  and get methods look like this:</p>
<pre>protected void setElementNode(N elem) {
    _constructionElement = (elem instanceof Element) ? (Element) elem : null;
    _lastSyncedElement = _constructionElement;
    _wrappedElement = elem;
}

public N getElementNode() {
    if (_constructionElement != _lastSyncedElement) {
        _lastSyncedElement = _constructionElement;
        _wrappedElement = (N) _constructionElement;
    }

    return _wrappedElement;
}
</pre>
<p>In this way, any direct changes to the old protected member would be detected and used by new code.</p>
<h2>Tricks For Constructors</h2>
<p>ElementProxy gave me another problem, too.  It had existing constructors that took Element object as parameters.  In the gXML world, that had to be turned into an element of type N, and an XmlContext&lt;N&gt; ctx, so that it would be possible to do something with the type N parameter.  So similar to the approach used with the purely static methods I discussed in my previous writeup, I deprecated the existing constructor, and had it call a new constructor with a new DOM-specific context object.</p>
<p>That solved one problem, but another cropped up.  Some subclasses of ElementProxy had a pair of constructors, each with a single parameter, but one taking Document, and one taking Element.  In gXML, both Document and Element collapse to type N.  This meant that a new constructor method taking a context and an N could no longer distinguish these two cases.  As a somewhat silly solution, I changed it so that the &#8220;Document&#8221; form of the constructors took an extra &#8220;do nothing&#8221; boolean parameter (which I named &#8220;unusedDiscriminator&#8221;).</p>
<h1>Perhaps A Different Approach?</h1>
<p>I might have followed an alternate course.  I could have wrapped the _constructionElement member with methods to access it.  That is, I might have swept through the code base once to add calls to get/set methods that still used the Element type.  This would have let me directly intercept all attempts to set the value.  However, as I went through and converted code, I would have had to replace these method calls with ones that returned and set values of type &lt;N&gt;.  I think this means that I would have needed to touch each source file twice &#8211; once to convert it to use the method wrapping access to an Element, and then to convert those calls to something wrapping &lt;N&gt;.  In the end, I think the approach I took probably worked just as well, if not slightly better.</p>
<h1>End Result</h1>
<p>The end result of this careful backwards compatibility left me with unnecessary code.  Once I converted <em>all</em> of the code &#8211; all of the subclasses of this class, and all of the direct uses of the protected field, I was left with no direct access to the protected field, and I have found I can now remove the parallel tracks.  But the intermediate solution did let me worry about migrating code a file at a time, rather than a class hierarchy at a time.  I think that made the extra complexity worth it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/genxdm.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/genxdm.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/genxdm.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/genxdm.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/genxdm.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/genxdm.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/genxdm.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/genxdm.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/genxdm.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/genxdm.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/genxdm.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/genxdm.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/genxdm.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/genxdm.wordpress.com/99/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=genxdm.wordpress.com&amp;blog=17383146&amp;post=99&amp;subd=genxdm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://genxdm.wordpress.com/2010/08/26/migrating-stateful-code-to-gxml-episode-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68e9c67cac2b381632dc981ff78725ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ericejohnson</media:title>
		</media:content>
	</item>
	</channel>
</rss>
