From c35a6b151259c980bb1ceec57abe65a79c6f6ac8 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Fri, 23 Nov 2012 00:41:19 +0800
Subject: [PATCH] EOFM-207	and update geotools to 8.3.x

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java                            |   35 
 xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java                              |    8 
 .gitattributes                                                                                                           |    1 
 xdgnjobs/ximple-build/maven/jar-collector/pom.xml                                                                        |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java           |   10 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java       |   31 
 xdgnjobs/ximple-spatialjob/pom.xml                                                                                       |   29 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java     |   25 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java    |   24 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java         |   35 -
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java      |   12 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java                            |   16 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/DigesterUtils.java                                        |   25 +
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java                           |   34 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java   |   23 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java   |   32 -
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java     |   23 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java                          |   40 +-
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2EdbGeoJob.java                           |   52 +-
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java                    |    5 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java                               |   31 +
 xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml                     |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java         |   32 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java        |   12 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java  |    8 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java       |   23 
 xdgnjobs/ximple-jobcarrier/quartz_jobs.xml                                                                               |   10 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java       |   29 
 xdgnjobs/ximple-jobcarrier/pom.xml                                                                                       |   31 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java           |   10 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java                     |   10 
 xdgnjobs/ximple-dgnio/pom.xml                                                                                            |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java     |   11 
 xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml                         |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractDgnToEdbGeoJobContext.java         |   22 
 xdgnjobs/pom.xml                                                                                                         |  109 +++--
 xdgnjobs/ximple-build/maven/pom.xml                                                                                      |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java     |   31 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java   |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java                        |   33 -
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java   |   31 
 xdgnjobs/ximple-build/pom.xml                                                                                            |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java   |    8 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java                               |  125 ++++-
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractOracleToEdbGeoJobContext.java      |   21 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java |   31 
 xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml                                                            |    5 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java         |   10 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java     |   21 
 xdgnjobs/ximple-elmparser/pom.xml                                                                                        |    4 
 50 files changed, 599 insertions(+), 539 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 816d1e7..bf21934 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -144,6 +144,7 @@
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/ByteArrayCompressor.java svneol=native#text/plain
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/ColorTableMapping.java svneol=native#text/plain
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/DefaultColorTable.java svneol=native#text/plain
+xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/DigesterUtils.java -text
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/EPSG3825GeometryConverterDecorator.java -text svneol=unset#text/plain
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/EPSG3826GeometryConverterDecorator.java svneol=native#text/plain
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java svneol=native#text/plain
diff --git a/xdgnjobs/pom.xml b/xdgnjobs/pom.xml
index fae559c..5242e39 100644
--- a/xdgnjobs/pom.xml
+++ b/xdgnjobs/pom.xml
@@ -17,9 +17,9 @@
     <oracle.jdbc>true</oracle.jdbc>
     <test.maxHeapSize>512M</test.maxHeapSize>
     <src.output>${basedir}/target</src.output>
-    <java5>1.5</java5>
-    <xdgnio.version>1.2.2</xdgnio.version>
-    <gt2.version>2.7.5-1</gt2.version>
+    <java5>1.6</java5>
+    <xdgnio.version>1.3.0</xdgnio.version>
+    <gt.version>8.3.x</gt.version>
     <failIfNoTests>false</failIfNoTests>
     <stress.skip.pattern></stress.skip.pattern>
     <online.skip.pattern></online.skip.pattern>
@@ -57,15 +57,15 @@
 
   <scm>
     <connection>
-      scm:svn:http://www.ximple.com.tw/svn/xeofms/xspatialjob/truck/
+      scm:svn:http://www.ximple.com.tw:8079/svn/xeofms/xspatialjob/truck/
     </connection>
-    <url>http://www.ximple.com.tw/svn/xeofms/xspatialjob/truck/</url>
+    <url>http://www.ximple.com.tw:8079/svn/xeofms/xspatialjob/truck/</url>
   </scm>
 
   <groupId>com.ximple.eofms</groupId>
   <artifactId>ximple-dgnjobs</artifactId>
   <packaging>pom</packaging>
-  <version>1.2.2</version>
+  <version>1.3.0</version>
   <name>ximple-dgnjobs</name>
   <url>http://www.ximple.com.tw</url>
 
@@ -76,7 +76,7 @@
     <url>http://www.ximple.com.tw</url>
   </organization>
 
-  <inceptionYear>2010</inceptionYear>
+  <inceptionYear>2012</inceptionYear>
 
   <!-- =========================================================== -->
   <!--     Issue managements and mailing lists.                    -->
@@ -134,9 +134,9 @@
         <version>3.2.1</version>
       </dependency>
       <dependency>
-        <groupId>commons-digester</groupId>
-        <artifactId>commons-digester</artifactId>
-        <version>2.1</version>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-digester3</artifactId>
+        <version>3.2</version>
       </dependency>
       <dependency>
         <groupId>commons-pool</groupId>
@@ -167,79 +167,84 @@
       <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi</artifactId>
-        <version>3.7</version>
+        <version>3.8</version>
       </dependency>
 
       <!-- geotools -->
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-api</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
       </dependency>
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-main</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
       </dependency>
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-shapefile</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
       </dependency>
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-sample-data</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-data</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
       </dependency>
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-jdbc</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.geotools</groupId>
-        <artifactId>gt-oracle-spatial</artifactId>
-        <version>${gt2.version}</version>
+        <groupId>org.geotools.jdbc</groupId>
+        <artifactId>gt-jdbc-oracle</artifactId>
+        <version>${gt.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.geotools</groupId>
-        <artifactId>gt-postgis</artifactId>
-        <version>${gt2.version}</version>
-        <exclusions>
+        <groupId>org.geotools.jdbc</groupId>
+        <artifactId>gt-jdbc-postgis</artifactId>
+        <version>${gt.version}</version>
+        <!--exclusions>
           <exclusion>
             <groupId>org.postgis</groupId>
             <artifactId>postgis-driver</artifactId>
           </exclusion>
-        </exclusions>
+        </exclusions-->
       </dependency>
       <dependency>
-        <groupId>org.geotools</groupId>
-        <artifactId>gt-mysql</artifactId>
-        <version>${gt2.version}</version>
+        <groupId>org.geotools.jdbc</groupId>
+        <artifactId>gt-jdbc-mysql</artifactId>
+        <version>${gt.version}</version>
       </dependency>
 
       <!-- because main and sample-data depend on referencing we need a tie breaker -->
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-referencing</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
       </dependency>
       <dependency>
         <groupId>org.geotools</groupId>
-        <artifactId>gt-epsg-h2</artifactId>
-        <version>${gt2.version}</version>
-        <exclusions>
+        <artifactId>gt-epsg-hsql</artifactId>
+        <version>${gt.version}</version>
+        <!--exclusions>
           <exclusion>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
           </exclusion>
-        </exclusions>
+        </exclusions-->
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt-epsg-wkt</artifactId>
+        <version>${gt.version}</version>
       </dependency>
 
       <dependency>
@@ -258,7 +263,7 @@
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-epsg-hsql</artifactId>
-        <version>${gt2.version}</version>
+        <version>${gt.version}</version>
         <scope>test</scope>
       </dependency>
 
@@ -285,28 +290,28 @@
         <version>11.1.0</version>
       </dependency>
 
-      <dependency>
+      <!--dependency>
         <groupId>postgresql</groupId>
         <artifactId>postgresql</artifactId>
         <version>8.4-702.jdbc3</version>
-      </dependency>
+      </dependency-->
       <dependency>
         <groupId>org.postgis</groupId>
         <artifactId>postgis-driver</artifactId>
         <version>1.5.3</version>
       </dependency>
 
-      <dependency>
+      <!--dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.18</version>
-      </dependency>
+      </dependency-->
 
-      <dependency>
+      <!--dependency>
         <groupId>com.h2database</groupId>
         <artifactId>h2</artifactId>
         <version>1.3.163</version>
-      </dependency>
+      </dependency-->
 
       <!-- EnterpriseDB -->
       <dependency>
@@ -319,7 +324,7 @@
       <dependency>
         <groupId>org.quartz-scheduler</groupId>
         <artifactId>quartz</artifactId>
-        <version>2.1.3</version>
+        <version>2.1.6</version>
         <exclusions>
           <exclusion>
             <groupId>org.slf4j</groupId>
@@ -330,12 +335,12 @@
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
-        <version>1.6.3</version>
+        <version>1.6.6</version>
       </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
-        <version>1.6.3</version>
+        <version>1.6.6</version>
       </dependency>
       <dependency>
         <groupId>org.awl</groupId>
@@ -352,7 +357,7 @@
       <dependency>
         <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
-        <version>6.3</version>
+        <version>6.8</version>
         <scope>test</scope>
       </dependency>
     </dependencies>
@@ -373,8 +378,8 @@
       <groupId>commons-collections</groupId>
     </dependency>
     <dependency>
-      <groupId>commons-digester</groupId>
-      <artifactId>commons-digester</artifactId>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-digester3</artifactId>
     </dependency>
     <dependency>
       <groupId>commons-pool</groupId>
@@ -403,13 +408,13 @@
     </dependency>
     <dependency>
       <groupId>org.geotools</groupId>
-      <artifactId>gt-epsg-h2</artifactId>
+      <artifactId>gt-epsg-hsql</artifactId>
     </dependency>
 
-    <dependency>
+    <!--dependency>
       <groupId>com.h2database</groupId>
       <artifactId>h2</artifactId>
-    </dependency>
+    </dependency-->
 
     <dependency>
       <groupId>xerces</groupId>
@@ -480,7 +485,7 @@
           <dependency>
             <groupId>org.geotools.maven</groupId>
             <artifactId>gt2-build-configs</artifactId>
-            <version>${gt2.version}</version>
+            <version>${gt.version}</version>
           </dependency>
         </dependencies>
         -->
@@ -500,7 +505,7 @@
           <!-- The -target argument for the Java compiler. -->
           <debug>true</debug>
           <!-- Whether to include debugging information.   -->
-          <encoding>ISO-8859-1</encoding>
+          <encoding>UTF-8</encoding>
           <!-- The -encoding argument for the Java compiler. -->
         </configuration>
       </plugin>
@@ -566,7 +571,7 @@
           <dependency>
             <groupId>org.geotools.maven</groupId>
             <artifactId>gt2-build-configs</artifactId>
-            <version>${gt2.version}</version>
+            <version>${gt.version}</version>
           </dependency>
         </dependencies>
       </plugin>
diff --git a/xdgnjobs/ximple-build/maven/jar-collector/pom.xml b/xdgnjobs/ximple-build/maven/jar-collector/pom.xml
index f9823b8..73105f2 100644
--- a/xdgnjobs/ximple-build/maven/jar-collector/pom.xml
+++ b/xdgnjobs/ximple-build/maven/jar-collector/pom.xml
@@ -7,7 +7,7 @@
   <parent>
     <groupId>com.ximple.eofms.maven</groupId>
     <artifactId>ximple-maven</artifactId>
-    <version>1.2.2</version>
+    <version>1.3.0</version>
   </parent>
 
 
diff --git a/xdgnjobs/ximple-build/maven/pom.xml b/xdgnjobs/ximple-build/maven/pom.xml
index 23f939f..f90eeee 100644
--- a/xdgnjobs/ximple-build/maven/pom.xml
+++ b/xdgnjobs/ximple-build/maven/pom.xml
@@ -7,7 +7,7 @@
   <parent>
     <groupId>com.ximple.eofms.maven</groupId>
     <artifactId>ximple-build</artifactId>
-    <version>1.2.2</version>
+    <version>1.3.0</version>
   </parent>
 
 
diff --git a/xdgnjobs/ximple-build/pom.xml b/xdgnjobs/ximple-build/pom.xml
index 1f49ed6..e71a950 100644
--- a/xdgnjobs/ximple-build/pom.xml
+++ b/xdgnjobs/ximple-build/pom.xml
@@ -7,7 +7,7 @@
   <parent>
     <groupId>com.ximple.eofms</groupId>
     <artifactId>ximple-dgnjobs</artifactId>
-    <version>1.2.2</version>
+    <version>1.3.0</version>
   </parent>
 
 
@@ -16,7 +16,7 @@
   <!-- =========================================================== -->
   <groupId>com.ximple.eofms.maven</groupId>
   <artifactId>ximple-build</artifactId>
-  <version>1.2.2</version>
+  <version>1.3.0</version>
   <packaging>pom</packaging>
   <name>Build tools for Ximple DgnJobs</name>
 
diff --git a/xdgnjobs/ximple-dgnio/pom.xml b/xdgnjobs/ximple-dgnio/pom.xml
index 777eb8b..9fe8352 100644
--- a/xdgnjobs/ximple-dgnio/pom.xml
+++ b/xdgnjobs/ximple-dgnio/pom.xml
@@ -7,7 +7,7 @@
   <parent>
     <groupId>com.ximple.eofms</groupId>
     <artifactId>ximple-dgnjobs</artifactId>
-    <version>1.2.2</version>
+    <version>1.3.0</version>
   </parent>
 
   <!-- =========================================================== -->
@@ -15,7 +15,7 @@
   <!-- =========================================================== -->
   <groupId>com.ximple.eofms</groupId>
   <artifactId>ximple-dgnio</artifactId>
-  <version>1.2.2</version>
+  <version>1.3.0</version>
   <packaging>jar</packaging>
   <name>ximple-dgnio</name>
   <url>http://www.ximple.com.tw</url>
diff --git a/xdgnjobs/ximple-elmparser/pom.xml b/xdgnjobs/ximple-elmparser/pom.xml
index b22d962..3608cfc 100644
--- a/xdgnjobs/ximple-elmparser/pom.xml
+++ b/xdgnjobs/ximple-elmparser/pom.xml
@@ -5,12 +5,12 @@
   <parent>
     <groupId>com.ximple.eofms</groupId>
     <artifactId>ximple-dgnjobs</artifactId>
-    <version>1.2.2</version>
+    <version>1.3.0</version>
   </parent>
 
   <groupId>com.ximple.eofms</groupId>
   <artifactId>ximple-elmparser</artifactId>
-  <version>1.2.2</version>
+  <version>1.3.0</version>
   <packaging>jar</packaging>
   <name>ximple-elmparser</name>
   <url>http://maven.apache.org</url>
diff --git a/xdgnjobs/ximple-jobcarrier/pom.xml b/xdgnjobs/ximple-jobcarrier/pom.xml
index a819472..5f5a6c2 100644
--- a/xdgnjobs/ximple-jobcarrier/pom.xml
+++ b/xdgnjobs/ximple-jobcarrier/pom.xml
@@ -6,19 +6,19 @@
   <parent>
     <groupId>com.ximple.eofms</groupId>
     <artifactId>ximple-dgnjobs</artifactId>
-    <version>1.2.2</version>
+    <version>1.3.0</version>
   </parent>
 
 
   <groupId>com.ximple.eofms</groupId>
   <artifactId>ximple-jobcarrier</artifactId>
-  <version>1.2.2</version>
+  <version>1.3.0</version>
   <packaging>jar</packaging>
   <name>ximple-jobcarrier</name>
   <url>http://maven.apache.org</url>
 
   <properties>
-    <xdgnio.version>1.2.2</xdgnio.version>
+    <xdgnio.version>1.3.0</xdgnio.version>
   </properties>
 
   <scm>
@@ -37,7 +37,7 @@
     <url>http://www.ximple.com.tw</url>
   </organization>
 
-  <inceptionYear>2010</inceptionYear>
+  <inceptionYear>2012</inceptionYear>
 
   <developers>
     <developer>
@@ -119,16 +119,16 @@
       <artifactId>gt-jdbc</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.geotools</groupId>
-      <artifactId>gt-postgis</artifactId>
+      <groupId>org.geotools.jdbc</groupId>
+      <artifactId>gt-jdbc-postgis</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.geotools</groupId>
-      <artifactId>gt-oracle-spatial</artifactId>
+      <groupId>org.geotools.jdbc</groupId>
+      <artifactId>gt-jdbc-oracle</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.geotools</groupId>
-      <artifactId>gt-mysql</artifactId>
+      <groupId>org.geotools.jdbc</groupId>
+      <artifactId>gt-jdbc-mysql</artifactId>
     </dependency>
 
     <!-- because main and sample-data depend on referencing we need a tie breaker -->
@@ -140,8 +140,7 @@
     <!-- We need this to make the referencing module useful -->
     <dependency>
       <groupId>org.geotools</groupId>
-      <artifactId>gt-epsg-hsql</artifactId>
-      <scope>test</scope>
+      <artifactId>gt-epsg-wkt</artifactId>
     </dependency>
 
     <dependency>
@@ -181,19 +180,19 @@
       <artifactId>sdoutl</artifactId>
     </dependency>
 
-    <dependency>
+    <!--dependency>
       <groupId>postgresql</groupId>
       <artifactId>postgresql</artifactId>
     </dependency>
     <dependency>
       <groupId>org.postgis</groupId>
       <artifactId>postgis-driver</artifactId>
-    </dependency>
+    </dependency-->
 
-    <dependency>
+    <!--dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
-    </dependency>
+    </dependency-->
 
     <!-- AWL -->
     <dependency>
diff --git a/xdgnjobs/ximple-jobcarrier/quartz_jobs.xml b/xdgnjobs/ximple-jobcarrier/quartz_jobs.xml
index ad62a0a..9813c4d 100644
--- a/xdgnjobs/ximple-jobcarrier/quartz_jobs.xml
+++ b/xdgnjobs/ximple-jobcarrier/quartz_jobs.xml
@@ -30,7 +30,7 @@
       <job-data-map>
         <entry>
           <key>JOBDATA_DIR</key>
-          <value>C:\Usr\Projects\XDCAD\nstpcjobs\jobdata</value>
+          <value>~/Projects/XDCAD/xjobrun/nntpcjobs/jobdata</value>
         </entry>
         <entry>
           <key>PGHOST</key>
@@ -38,7 +38,7 @@
         </entry>
         <entry>
           <key>PGDATBASE</key>
-          <value>pgNSTPC</value>
+          <value>pgNNTPC</value>
         </entry>
         <entry>
           <key>PGPORT</key>
@@ -58,7 +58,7 @@
         </entry>
         <entry>
           <key>ORAHOST</key>
-          <value>192.168.11.199</value>
+          <value>192.168.11.99</value>
         </entry>
         <entry>
           <key>ORAINST</key>
@@ -70,11 +70,11 @@
         </entry>
         <entry>
           <key>ORAUSER</key>
-          <value>basedb</value>
+          <value>system</value>
         </entry>
         <entry>
           <key>ORAPASS</key>
-          <value>basedb000</value>
+          <value>simple000</value>
         </entry>
         <entry>
           <key>ORGSCHEMA</key>
diff --git a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
index 2974ca1..5fe5b95 100644
--- a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
+++ b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
@@ -30,7 +30,7 @@
       <job-data-map>
         <entry>
           <key>JOBDATA_DIR</key>
-          <value>C:\Usr\Projects\XDCAD\xjobrun\nntpcjobs\jobdata</value>
+          <value>/Users/ulysseskao/Projects/XDCAD/xjobrun/nntpcjobs/jobdata</value>
         </entry>
         <entry>
           <key>PGHOST</key>
@@ -78,7 +78,8 @@
         </entry>
         <entry>
           <key>ORGSCHEMA</key>
-          <value>SPATIALDB, CMMS_SPATIALDB</value>
+          <value>SPATIALDB</value>
+          <!--value>SPATIALDB, CMMS_SPATIALDB</value-->
         </entry>
         <entry>
           <key>CONVERTDB</key>
diff --git a/xdgnjobs/ximple-spatialjob/pom.xml b/xdgnjobs/ximple-spatialjob/pom.xml
index c64016e..bdbb485 100644
--- a/xdgnjobs/ximple-spatialjob/pom.xml
+++ b/xdgnjobs/ximple-spatialjob/pom.xml
@@ -7,18 +7,18 @@
   <parent>
     <groupId>com.ximple.eofms</groupId>
     <artifactId>ximple-dgnjobs</artifactId>
-    <version>1.2.2</version>
+    <version>1.3.0</version>
   </parent>
 
   <groupId>com.ximple.eofms</groupId>
   <artifactId>ximple-spatialjob</artifactId>
-  <version>1.2.2</version>
+  <version>1.3.0</version>
   <packaging>jar</packaging>
   <name>ximple-spatialjob</name>
   <url>http://www.ximple.com.tw</url>
 
   <properties>
-    <xdgnio.version>1.2.2</xdgnio.version>
+    <xdgnio.version>1.3.0</xdgnio.version>
   </properties>
 
   <description>
@@ -82,16 +82,16 @@
       <artifactId>gt-jdbc</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.geotools</groupId>
-      <artifactId>gt-postgis</artifactId>
+      <groupId>org.geotools.jdbc</groupId>
+      <artifactId>gt-jdbc-postgis</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.geotools</groupId>
-      <artifactId>gt-oracle-spatial</artifactId>
+      <groupId>org.geotools.jdbc</groupId>
+      <artifactId>gt-jdbc-oracle</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.geotools</groupId>
-      <artifactId>gt-mysql</artifactId>
+      <groupId>org.geotools.jdbc</groupId>
+      <artifactId>gt-jdbc-mysql</artifactId>
     </dependency>
 
     <!-- because main and sample-data depend on referencing we need a tie breaker -->
@@ -103,8 +103,7 @@
     <!-- We need this to make the referencing module useful -->
     <dependency>
       <groupId>org.geotools</groupId>
-      <artifactId>gt-epsg-hsql</artifactId>
-      <scope>test</scope>
+      <artifactId>gt-epsg-wkt</artifactId>
     </dependency>
 
     <dependency>
@@ -135,10 +134,10 @@
       <artifactId>sdoutl</artifactId>
     </dependency>
 
-    <dependency>
+    <!--dependency>
       <groupId>postgresql</groupId>
       <artifactId>postgresql</artifactId>
-    </dependency>
+    </dependency-->
     <dependency>
       <groupId>org.postgis</groupId>
       <artifactId>postgis-driver</artifactId>
@@ -149,10 +148,10 @@
       <artifactId>xedb-gt-geospatial</artifactId>
     </dependency>
 
-    <dependency>
+    <!--dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
-    </dependency>
+    </dependency-->
 
     <!-- Ximple Library -->
     <dependency>
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
index bc8c675..3c9916c 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
@@ -84,7 +84,7 @@
             sb.append("-");
             sb.append(txtElement.getFontIndex());
 
-            Geometry gobj;
+            Geometry gobj, geomOrigin = null;
             if (useTransform) {
                 GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
                 convertDecorator.setConverter(txtElement);
@@ -94,41 +94,10 @@
             }
 
             if (gobj instanceof Point) {
-                Coordinate p = gobj.getCoordinate();
-                double width = txtElement.getTextWidth();
-                double height = txtElement.getTextHeight();
-
-                AffineTransform at = new AffineTransform();
-                at.translate(width, height);
-                at.setToRotation(angle, p.x, p.y);
-                at.scale(1, 1);
-
-                Envelope envelope = new Envelope(p);
-                envelope.expandBy(width / 2, height / 2);
-
-                double[] srcPt = new double[8];
-                double[] dstPt = new double[8];
-                srcPt[0] = envelope.getMinX();
-                srcPt[1] = envelope.getMinY();
-                srcPt[2] = envelope.getMinX();
-                srcPt[3] = envelope.getMaxY();
-                srcPt[4] = envelope.getMaxX();
-                srcPt[5] = envelope.getMaxY();
-                srcPt[6] = envelope.getMaxX();
-                srcPt[7] = envelope.getMinY();
-
-                at.transform(srcPt, 0, dstPt, 0, 4);
-
-                Coordinate[] coords = new Coordinate[5];
-                for (int i = 0; i < 4; i++) {
-                    coords[i] = new Coordinate(dstPt[i*2], dstPt[i*2+1]);
-                }
-                coords[4] = new Coordinate(dstPt[0], dstPt[1]);
-                int srid = gobj.getSRID();
-                gobj = geometryFactory.createPolygon(geometryFactory.createLinearRing(coords), null);
-                if (gobj.getSRID() != srid) {
-                    gobj.setSRID(srid);
-                }
+                geomOrigin = gobj;
+                gobj = buildBoundaryPolygon(txtElement.getUserOrigin(), // txtElement.getOrigin()
+                    txtElement.getTextWidth(), txtElement.getTextHeight(),
+                    angle, txtElement.getJustification(), gobj.getSRID());
             } else {
                 gobj = null;
             }
@@ -148,7 +117,8 @@
                     (float) txtElement.getTextHeight(),
                     (float) txtElement.getTextWidth(),
                     (float) angle,
-                    sb.toString()
+                    sb.toString(),
+                    geomOrigin
                 }, null);
         } else {
             logger.info("CreateSymbolStrategy cannot conver " + element.toString() + "to Feature");
@@ -173,5 +143,86 @@
             }
         }
     }
+
+    private Geometry buildBoundaryPolygon(Coordinate p, double symbolWidth, double symbolHeight, double rotationAngle,
+                                         int justification, int srid) {
+        double angle = Math.toRadians(rotationAngle);
+
+        AffineTransform at = new AffineTransform();
+        // at.translate(width, height);
+        at.setToRotation(angle, p.x, p.y);
+        at.scale(1, 1);
+
+        double width = symbolWidth;
+        switch (justification) {
+        case TextElement.TXTJUST_LT:
+        case TextElement.TXTJUST_LC:
+        case TextElement.TXTJUST_LB:
+            width = width / 2;
+            break;
+
+        case TextElement.TXTJUST_CT:
+        case TextElement.TXTJUST_CC:
+        case TextElement.TXTJUST_CB:
+            width = 0;
+            break;
+
+        case TextElement.TXTJUST_RT:
+        case TextElement.TXTJUST_RC:
+        case TextElement.TXTJUST_RB:
+            width = -(width / 2);
+            break;
+        }
+
+        double height = symbolHeight;
+        switch (justification) {
+        case TextElement.TXTJUST_LB:
+        case TextElement.TXTJUST_CB:
+        case TextElement.TXTJUST_RB:    // bottom
+            height = height / 2;
+            break;
+
+        case TextElement.TXTJUST_LC:
+        case TextElement.TXTJUST_CC:
+        case TextElement.TXTJUST_RC:    // center
+            height = 0;
+            break;
+
+        case TextElement.TXTJUST_LT:
+        case TextElement.TXTJUST_CT:
+        case TextElement.TXTJUST_RT:    // height
+            height = -(height / 2);
+            break;
+        }
+
+
+        Envelope envelope = new Envelope(new Coordinate(p.x + width, p.y + height));
+        envelope.expandBy(symbolWidth / 2, symbolHeight / 2);
+
+        double[] srcPt = new double[8];
+        double[] dstPt = new double[8];
+        srcPt[0] = envelope.getMinX();
+        srcPt[1] = envelope.getMinY();
+        srcPt[2] = envelope.getMinX();
+        srcPt[3] = envelope.getMaxY();
+        srcPt[4] = envelope.getMaxX();
+        srcPt[5] = envelope.getMaxY();
+        srcPt[6] = envelope.getMaxX();
+        srcPt[7] = envelope.getMinY();
+
+        at.transform(srcPt, 0, dstPt, 0, 4);
+
+        Coordinate[] coords = new Coordinate[5];
+        for (int i = 0; i < 4; i++) {
+            coords[i] = new Coordinate(dstPt[i*2], dstPt[i*2+1]);
+        }
+        coords[4] = new Coordinate(dstPt[0], dstPt[1]);
+
+        Geometry geom = geometryFactory.createPolygon(geometryFactory.createLinearRing(coords), null);
+        if (geom.getSRID() != srid) {
+            geom.setSRID(srid);
+        }
+        return geom;
+    }
 }
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
index d941a3f..4661fab 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
@@ -14,8 +14,9 @@
 import com.ximple.eofms.util.FeatureTypeBuilderUtil;
 import org.apache.commons.logging.Log;
 import org.geotools.data.DataStore;
-import org.geotools.data.oracle.OracleDataStore;
-import org.geotools.data.oracle.OracleDataStoreFactory;
+import org.geotools.data.DataStoreFinder;
+import org.geotools.data.oracle.OracleNGDataStoreFactory;
+import org.geotools.jdbc.JDBCDataStore;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
@@ -57,7 +58,7 @@
     private static final String PROFILEMODE = "PROFILEMODE";
     private static final String USEZONE121 = "USEZONE121";
 
-    protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory();
+    protected static OracleNGDataStoreFactory dataStoreFactory = new OracleNGDataStoreFactory();
 
     protected String _dataPath;
     protected String _filterPath;
@@ -79,7 +80,7 @@
     protected boolean _useTransform = true;
 
     protected int _testCount = -1;
-    protected OracleDataStore sourceDataStore;
+    protected JDBCDataStore sourceDataStore;
     private boolean driverFound = true;
 
     private long _processTime;
@@ -363,19 +364,19 @@
             throw new JobExecutionException("Oracle JDBC Driver not found.-" + JDBC_DRIVER);
         }
         Map<String, String> map = new TreeMap<String, String>();
-        map.put("host", _oracleHost);
-        map.put("port", _oraclePort);
-        map.put("instance", _oracleInstance);
-        map.put("user", _username);
-        map.put("passwd", _password);
-        map.put("dbtype", "oracle");
-        map.put("alias", _oracleInstance);
-        map.put("namespace", null);
-        if (!map.containsKey(OracleDataStoreFactory.MAXCONN.key)) {
-            map.put(OracleDataStoreFactory.MAXCONN.key, "5");
+        map.put(OracleNGDataStoreFactory.HOST.key, _oracleHost);
+        map.put(OracleNGDataStoreFactory.PORT.key, _oraclePort);
+        map.put(OracleNGDataStoreFactory.DATABASE.key, _oracleInstance);
+        map.put(OracleNGDataStoreFactory.USER.key, _username);
+        map.put(OracleNGDataStoreFactory.PASSWD.key, _password);
+        map.put(OracleNGDataStoreFactory.DBTYPE.key, "oracle");
+        map.put(OracleNGDataStoreFactory.NAMESPACE.key, null);
+
+        if (!map.containsKey(OracleNGDataStoreFactory.MAXCONN.key)) {
+            map.put(OracleNGDataStoreFactory.MAXCONN.key, "5");
         }
-        if (!map.containsKey(OracleDataStoreFactory.MINCONN.key)) {
-            map.put(OracleDataStoreFactory.MINCONN.key, "1");
+        if (!map.containsKey(OracleNGDataStoreFactory.MINCONN.key)) {
+            map.put(OracleNGDataStoreFactory.MINCONN.key, "1");
         }
 
         if (!dataStoreFactory.canProcess(map)) {
@@ -383,7 +384,7 @@
             throw new JobExecutionException("cannot process properties-");
         }
         try {
-            sourceDataStore = (OracleDataStore) dataStoreFactory.createDataStore(map);
+            sourceDataStore = dataStoreFactory.createDataStore(map);
         } catch (IOException e) {
             getLogger().warn(e.getMessage(), e);
             throw new JobExecutionException(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
index 7b80d8c..ca2e17b 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
@@ -11,8 +11,19 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeIdDispatchableFilter;
+import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -28,20 +39,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class DummyFeatureConvertJobContext extends AbstractDgnFileJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertJobContext.class);
@@ -68,9 +65,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -84,6 +78,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2EdbGeoJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2EdbGeoJob.java
index a24eccd..dee8809 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2EdbGeoJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2EdbGeoJob.java
@@ -1,5 +1,27 @@
 package com.ximple.eofms.jobs;
 
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
 import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
 import com.ximple.eofms.jobs.context.edbgeo.FeatureDgnConvertEdbGeoJobContext;
 import com.ximple.eofms.jobs.context.edbgeo.GeneralDgnConvertEdbGeoJobContext;
@@ -28,37 +50,15 @@
 import org.apache.commons.logging.LogFactory;
 import org.geotools.data.DataStore;
 import org.geotools.data.Transaction;
-import org.geotools.data.jdbc.JDBCUtils;
-import org.geotools.data.edbgeo.PostgisDataStore;
 import org.geotools.data.edbgeo.PostgisDataStoreFactory;
+import org.geotools.data.jdbc.JDBCUtils;
 import org.geotools.feature.SchemaException;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.IllegalAttributeException;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.nio.BufferOverflowException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.FileChannel;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
 
 public class OracleConvertDgn2EdbGeoJob extends AbstractOracleDatabaseJob {
     final static Log logger = LogFactory.getLog(OracleConvertDgn2EdbGeoJob.class);
@@ -99,7 +99,7 @@
     protected String _edbUseWKB;
 
     protected Map<String, String> edbProperties;
-    protected PostgisDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
     // protected OracleConvertEdbGeoJobContext oracleJobContext;
 
     private long queryTime = 0;
@@ -1204,7 +1204,7 @@
             throw new JobExecutionException("cannot process properties-");
         }
         try {
-            targetDataStore = (PostgisDataStore) dataStoreFactory.createDataStore(edbProperties);
+            targetDataStore = (JDBCDataStore) dataStoreFactory.createDataStore(edbProperties);
         } catch (IOException e) {
             getLogger().warn(e.getMessage(), e);
             throw new JobExecutionException(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java
index ef26b4a..960cbf0 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java
@@ -25,9 +25,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.geotools.data.DataStore;
-import org.geotools.data.mysql.MySQLDataStore;
 import org.geotools.data.mysql.MySQLDataStoreFactory;
 import org.geotools.feature.SchemaException;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.IllegalAttributeException;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
@@ -92,7 +92,7 @@
     protected String _myUseWKB;
 
     protected Map<String, String> myProperties;
-    protected MySQLDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
 
     public Log getLogger() {
         return logger;
@@ -946,24 +946,26 @@
         }
         */
 
-        if (!myProperties.containsKey("max connections" /*MySQLDataStoreFactory.MAXCONN.key */)) {
-            myProperties.put("max connections", "2");
+        if (!myProperties.containsKey(MySQLDataStoreFactory.MAXCONN.key)) {
+            myProperties.put(MySQLDataStoreFactory.MAXCONN.key, "2");
         }
 
-        if (!myProperties.containsKey("min connections" /* MySQLDataStoreFactory.MINCONN.key */)) {
-            myProperties.put("min connections", "1");
+        if (!myProperties.containsKey(MySQLDataStoreFactory.MINCONN.key)) {
+            myProperties.put(MySQLDataStoreFactory.MINCONN.key, "1");
         }
 
+        /*
         if (!myProperties.containsKey(MySQLDataStoreFactory.WKBENABLED.key)) {
             myProperties.put(MySQLDataStoreFactory.WKBENABLED.key, "true");
         }
+        */
 
         if (!dataStoreFactory.canProcess(myProperties)) {
             getLogger().warn("cannot process properties-");
             throw new JobExecutionException("cannot process properties-");
         }
         try {
-            targetDataStore = (MySQLDataStore) dataStoreFactory.createDataStore(myProperties);
+            targetDataStore = dataStoreFactory.createDataStore(myProperties);
         } catch (IOException e) {
             getLogger().warn(e.getMessage(), e);
             throw new JobExecutionException(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
index 07a4b03..1a3a4ee 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
@@ -26,9 +26,9 @@
 import org.apache.commons.logging.LogFactory;
 import org.geotools.data.DataStore;
 import org.geotools.data.jdbc.JDBCUtils;
-import org.geotools.data.oracle.OracleDataStore;
-import org.geotools.data.oracle.OracleDataStoreFactory;
+import org.geotools.data.oracle.OracleNGDataStoreFactory;
 import org.geotools.feature.SchemaException;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.IllegalAttributeException;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
@@ -84,7 +84,7 @@
         }
     }
 
-    protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory();
+    protected static OracleNGDataStoreFactory dataStoreFactory = new OracleNGDataStoreFactory();
 
     protected String _sdoHost;
     protected String _sdoDatabase;
@@ -95,7 +95,7 @@
     protected String _sdoUseWKB;
 
     protected Map<String, String> sdoProperties;
-    protected OracleDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
 
     public Log getLogger() {
         return logger;
@@ -155,14 +155,14 @@
         }
 
         Map<String, String> remote = new TreeMap<String, String>();
-        remote.put("dbtype", "OraSDO");
-        remote.put("charset", "UTF-8");
-        remote.put("host", _sdoHost);
-        remote.put("port", _sdoPort);
-        remote.put("database", _sdoDatabase);
-        remote.put("user", _sdoUsername);
-        remote.put("passwd", _sdoPassword);
-        remote.put("namespace", null);
+        remote.put(OracleNGDataStoreFactory.DBTYPE.key, "oracle");
+        // remote.put("charset", "UTF-8");
+        remote.put(OracleNGDataStoreFactory.HOST.key, _sdoHost);
+        remote.put(OracleNGDataStoreFactory.PORT.key, _sdoPort);
+        remote.put(OracleNGDataStoreFactory.DATABASE.key, _sdoDatabase);
+        remote.put(OracleNGDataStoreFactory.USER.key, _sdoUsername);
+        remote.put(OracleNGDataStoreFactory.PASSWD.key, _sdoPassword);
+        // remote.put("namespace", null);
         sdoProperties = remote;
     }
 
@@ -950,12 +950,12 @@
         }
         */
 
-        if (!sdoProperties.containsKey(OracleDataStoreFactory.MAXCONN.key)) {
-            sdoProperties.put(OracleDataStoreFactory.MAXCONN.key, "2");
+        if (!sdoProperties.containsKey(OracleNGDataStoreFactory.MAXCONN.key)) {
+            sdoProperties.put(OracleNGDataStoreFactory.MAXCONN.key, "2");
         }
 
-        if (!sdoProperties.containsKey(OracleDataStoreFactory.MINCONN.key)) {
-            sdoProperties.put(OracleDataStoreFactory.MINCONN.key, "1");
+        if (!sdoProperties.containsKey(OracleNGDataStoreFactory.MINCONN.key)) {
+            sdoProperties.put(OracleNGDataStoreFactory.MINCONN.key, "1");
         }
 
         /*
@@ -970,7 +970,7 @@
             throw new JobExecutionException("cannot process properties-");
         }
         try {
-            targetDataStore = (OracleDataStore) dataStoreFactory.createDataStore(sdoProperties);
+            targetDataStore = dataStoreFactory.createDataStore(sdoProperties);
         } catch (IOException e) {
             getLogger().warn(e.getMessage(), e);
             throw new JobExecutionException(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
index 0f2aede..c5938a1 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
@@ -30,9 +30,9 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.Transaction;
 import org.geotools.data.jdbc.JDBCUtils;
-import org.geotools.data.postgis.PostgisDataStore;
-import org.geotools.data.postgis.PostgisDataStoreFactory;
+import org.geotools.data.postgis.PostgisNGDataStoreFactory;
 import org.geotools.feature.SchemaException;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.IllegalAttributeException;
 import org.quartz.JobDataMap;
 import org.quartz.JobDetail;
@@ -90,7 +90,7 @@
         }
     }
 
-    protected static PostgisDataStoreFactory dataStoreFactory = new PostgisDataStoreFactory();
+    protected static PostgisNGDataStoreFactory dataStoreFactory = new PostgisNGDataStoreFactory();
 
     protected String _pgHost;
     protected String _pgDatabase;
@@ -101,7 +101,7 @@
     protected String _pgUseWKB;
 
     protected Map<String, String> pgProperties;
-    protected PostgisDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
     // protected OracleConvertEdbGeoJobContext oracleJobContext;
 
     private long queryTime = 0;
@@ -166,14 +166,14 @@
         }
 
         Map<String, String> remote = new TreeMap<String, String>();
-        remote.put("dbtype", "postgis");
-        remote.put("charset", "UTF-8");
-        remote.put("host", _pgHost);
-        remote.put("port", _pgPort);
-        remote.put("database", _pgDatabase);
-        remote.put("user", _pgUsername);
-        remote.put("passwd", _pgPassword);
-        remote.put("namespace", null);
+        remote.put(PostgisNGDataStoreFactory.DBTYPE.key, "postgis");
+        // remote.put("charset", "UTF-8");
+        remote.put(PostgisNGDataStoreFactory.HOST.key, _pgHost);
+        remote.put(PostgisNGDataStoreFactory.PORT.key, _pgPort);
+        remote.put(PostgisNGDataStoreFactory.DATABASE.key, _pgDatabase);
+        remote.put(PostgisNGDataStoreFactory.USER.key, _pgUsername);
+        remote.put(PostgisNGDataStoreFactory.PASSWD.key, _pgPassword);
+        // remote.put( "namespace", null);
         pgProperties = remote;
     }
 
@@ -1189,24 +1189,26 @@
         }
         */
 
-        if (!pgProperties.containsKey(PostgisDataStoreFactory.MAXCONN.key)) {
-            pgProperties.put(PostgisDataStoreFactory.MAXCONN.key, "5");
+        if (!pgProperties.containsKey(PostgisNGDataStoreFactory.MAXCONN.key)) {
+            pgProperties.put(PostgisNGDataStoreFactory.MAXCONN.key, "5");
         }
 
-        if (!pgProperties.containsKey(PostgisDataStoreFactory.MINCONN.key)) {
-            pgProperties.put(PostgisDataStoreFactory.MINCONN.key, "1");
+        if (!pgProperties.containsKey(PostgisNGDataStoreFactory.MINCONN.key)) {
+            pgProperties.put(PostgisNGDataStoreFactory.MINCONN.key, "1");
         }
 
-        if (!pgProperties.containsKey(PostgisDataStoreFactory.WKBENABLED.key)) {
-            pgProperties.put(PostgisDataStoreFactory.WKBENABLED.key, "true");
+        /*
+        if (!pgProperties.containsKey(PostgisNGDataStoreFactory.WKBENABLED.key)) {
+            pgProperties.put(PostgisNGDataStoreFactory.WKBENABLED.key, "true");
         }
+        */
 
         if (!dataStoreFactory.canProcess(pgProperties)) {
             getLogger().warn("cannot process properties-");
             throw new JobExecutionException("cannot process properties-");
         }
         try {
-            targetDataStore = (PostgisDataStore) dataStoreFactory.createDataStore(pgProperties);
+            targetDataStore = dataStoreFactory.createDataStore(pgProperties);
         } catch (IOException e) {
             getLogger().warn(e.getMessage(), e);
             throw new JobExecutionException(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java
index e1abbd2..28a05e0 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java
@@ -2,12 +2,17 @@
 
 import java.util.Map;
 
+import com.ximple.eofms.filter.ElementDispatcher;
+import org.apache.commons.digester3.Digester;
+import org.apache.commons.digester3.binder.DigesterLoader;
+import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
 import org.apache.commons.logging.Log;
 import org.quartz.JobExecutionContext;
 
 import com.ximple.io.dgn7.Dgn7fileReader;
 
 public abstract class AbstractDgnFileJobContext {
+
 // ------------------------------ FIELDS ------------------------------
 
     /**
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java
index 408aeab..9d0e097 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java
@@ -8,7 +8,7 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.Transaction;
 import org.geotools.data.jdbc.JDBCUtils;
-import org.geotools.data.oracle.OracleDataStore;
+import org.geotools.jdbc.JDBCDataStore;
 
 public abstract class AbstractOracleJobContext {
     /**
@@ -248,7 +248,7 @@
      * Encoding of URL path.
      */
     protected static final String ENCODING = "UTF-8";
-    protected OracleDataStore sourceDataStore;
+    protected JDBCDataStore sourceDataStore;
 
     protected String _dataPath;
     protected Properties properties;
@@ -267,13 +267,13 @@
         this.useTransform = useTransform;
     }
 
-    public OracleDataStore getSourceDataStore() {
+    public JDBCDataStore getSourceDataStore() {
         return sourceDataStore;
     }
 
     public void setSourceDataStore(DataStore sourceDataStore) {
-        if ((sourceDataStore != null) && (sourceDataStore instanceof OracleDataStore)) {
-            this.sourceDataStore = (OracleDataStore) sourceDataStore;
+        if ((sourceDataStore != null) && (sourceDataStore instanceof JDBCDataStore)) {
+            this.sourceDataStore = (JDBCDataStore) sourceDataStore;
         } else {
             assert sourceDataStore != null;
             getLogger().warn("setSourceDataStore(datastore) need OracleDataStore but got " +
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractDgnToEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractDgnToEdbGeoJobContext.java
index 3172de7..8bddca6 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractDgnToEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractDgnToEdbGeoJobContext.java
@@ -10,14 +10,15 @@
 import java.sql.Statement;
 import java.util.*;
 
+import com.vividsolutions.jts.geom.LinearRing;
 import com.ximple.eofms.util.FeatureTypeBuilderUtil;
 import org.geotools.data.DataSourceException;
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
 import org.geotools.data.Transaction;
 import org.geotools.data.jdbc.JDBCUtils;
-import org.geotools.data.edbgeo.PostgisDataStore;
 import org.geotools.filter.LengthFunction;
+import org.geotools.jdbc.JDBCDataStore;
 import org.geotools.referencing.NamedIdentifier;
 import org.geotools.referencing.crs.DefaultGeographicCRS;
 import org.opengis.feature.simple.SimpleFeature;
@@ -25,7 +26,6 @@
 import org.opengis.feature.type.AttributeDescriptor;
 import org.opengis.feature.type.AttributeType;
 import org.opengis.feature.type.GeometryDescriptor;
-import org.opengis.feature.type.GeometryType;
 import org.opengis.feature.type.PropertyType;
 import org.opengis.filter.BinaryComparisonOperator;
 import org.opengis.filter.Filter;
@@ -121,7 +121,7 @@
     protected static WKTWriter geometryWriter = new WKTWriter();
     protected static JtsBinaryWriter binaryWriter = new JtsBinaryWriter();
 
-    private PostgisDataStore targetDataStore;
+    private JDBCDataStore targetDataStore;
     // protected Connection connection;
     protected String targetSchema = "public";
 
@@ -130,8 +130,8 @@
     public AbstractDgnToEdbGeoJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
                                           boolean profileMode, boolean useTransform) {
         super(dataPath, profileMode, useTransform);
-        if ((targetDataStore != null) && (targetDataStore instanceof PostgisDataStore)) {
-            this.targetDataStore = (PostgisDataStore) targetDataStore;
+        if ((targetDataStore != null) && (targetDataStore instanceof JDBCDataStore)) {
+            this.targetDataStore = (JDBCDataStore) targetDataStore;
         } else {
             getLogger().info("targetDataStore has wrong.");
         }
@@ -139,11 +139,11 @@
         setTargetSchema(targetSchema);
     }
 
-    public PostgisDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(PostgisDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
@@ -484,6 +484,7 @@
             return "null";
         }
 
+        /*
         if (targetDataStore.isWKBEnabled()) {
             //String wkb = WKBEncoder.encodeGeometryHex(geom);
             String wkb = WKBWriter.bytesToHex(new WKBWriter().write(geom));
@@ -496,8 +497,13 @@
         }
 
         String geoText = geometryWriter.write(geom);
-
         return "GeometryFromText('" + geoText + "', " + srid + ")";
+        */
+        if (geom instanceof LinearRing) {
+            //postgis does not handle linear rings, convert to just a line string
+            geom = geom.getFactory().createLineString(((LinearRing) geom).getCoordinateSequence());
+        }
+        return "ST_GeomFromText('" + geom.toText() + "', " + srid + ")";
     }
 
     protected String makeInsertSql(SimpleFeature feature, int srid) // throws IOException
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractOracleToEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractOracleToEdbGeoJobContext.java
index 03c27fe..3723cf1 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractOracleToEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/AbstractOracleToEdbGeoJobContext.java
@@ -10,12 +10,13 @@
 import java.sql.Statement;
 import java.util.*;
 
+import com.vividsolutions.jts.geom.LinearRing;
 import com.ximple.eofms.util.FeatureTypeBuilderUtil;
 import org.geotools.data.DataSourceException;
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
-import org.geotools.data.edbgeo.PostgisDataStore;
 import org.geotools.filter.LengthFunction;
+import org.geotools.jdbc.JDBCDataStore;
 import org.geotools.referencing.NamedIdentifier;
 import org.geotools.referencing.crs.DefaultGeographicCRS;
 import org.opengis.feature.simple.SimpleFeature;
@@ -120,14 +121,14 @@
 
     protected boolean schemaEnabled = true;
 
-    private PostgisDataStore targetDataStore;
+    private JDBCDataStore targetDataStore;
     private String targetSchema = "public";
 
     public AbstractOracleToEdbGeoJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
                                              boolean profileMode, boolean useTransform) {
         super(profileMode, useTransform);
-        if ((targetDataStore != null) && (targetDataStore instanceof PostgisDataStore)) {
-            this.targetDataStore = (PostgisDataStore) targetDataStore;
+        if ((targetDataStore != null) && (targetDataStore instanceof JDBCDataStore)) {
+            this.targetDataStore = (JDBCDataStore) targetDataStore;
         } else {
             getLogger().info("targetDataStore has wrong.");
         }
@@ -135,11 +136,11 @@
         setTargetSchema(targetSchema);
     }
 
-    public PostgisDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(PostgisDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
@@ -506,6 +507,7 @@
             return "null";
         }
 
+        /*
         if (targetDataStore.isWKBEnabled()) {
             //String wkb = WKBEncoder.encodeGeometryHex(geom);
             String wkb = WKBWriter.bytesToHex(new WKBWriter().write(geom));
@@ -518,8 +520,13 @@
         }
 
         String geoText = geometryWriter.write(geom);
-
         return "GeometryFromText('" + geoText + "', " + srid + ")";
+        */
+        if (geom instanceof LinearRing) {
+            //postgis does not handle linear rings, convert to just a line string
+            geom = geom.getFactory().createLineString(((LinearRing) geom).getCoordinateSequence());
+        }
+        return "ST_GeomFromText('" + geom.toText() + "', " + srid + ")";
     }
 
     protected String makeInsertSql(SimpleFeature feature, int srid) // throws IOException
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java
index 1cd0adb..9f19654 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/DummyFeatureConvertEdbGeoJobContext.java
@@ -10,8 +10,8 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.util.DigesterUtils;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -63,9 +63,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -79,6 +76,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java
index 826253b..20d1aca 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/FeatureDgnConvertEdbGeoJobContext.java
@@ -10,8 +10,14 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -25,13 +31,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class FeatureDgnConvertEdbGeoJobContext extends AbstractDgnToEdbGeoJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertEdbGeoJobContext.class);
@@ -57,9 +56,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -73,6 +69,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java
index 9191594..311a91b 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/edbgeo/OracleConvertEdbGeoJobContext.java
@@ -15,35 +15,33 @@
 import java.util.HashMap;
 import java.util.Iterator;
 
+import com.edb.util.PSQLException;
 import com.vividsolutions.jts.geom.Geometry;
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.vividsolutions.jts.util.Assert;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.CreateFeatureTypeEventListener;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.FeatureTypeEvent;
+import com.ximple.eofms.jobs.OracleElementLogger;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.util.CommonsLoggingLogger;
 import org.apache.commons.transaction.util.LoggerFacade;
 import org.geotools.data.DataStore;
 import org.geotools.data.Transaction;
-import org.geotools.data.jdbc.JDBCUtils;
 import org.geotools.data.edbgeo.PostgisDataStoreFactory;
+import org.geotools.data.jdbc.JDBCUtils;
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.type.FeatureTypeImpl;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
-import com.edb.util.PSQLException;
 import org.quartz.JobExecutionContext;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.util.Assert;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.CreateFeatureTypeEventListener;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.FeatureTypeEvent;
-import com.ximple.eofms.jobs.OracleElementLogger;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
 
 public class OracleConvertEdbGeoJobContext extends AbstractOracleToEdbGeoJobContext
     implements CreateFeatureTypeEventListener {
@@ -86,9 +84,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -102,6 +97,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java
index fbc8c44..1dc6ee4 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java
@@ -6,25 +6,25 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
 import org.geotools.data.Transaction;
-import org.geotools.data.mysql.MySQLDataStore;
 
 import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public abstract class AbstractDgnToMySQLJobContext extends AbstractDgnFileJobContext {
-    protected MySQLDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
 
     public AbstractDgnToMySQLJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
                                         boolean useTransform) {
         super(dataPath, profileMode, useTransform);
-        this.targetDataStore = (MySQLDataStore) targetDataStore;
+        this.targetDataStore = (JDBCDataStore) targetDataStore;
     }
 
-    public MySQLDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(MySQLDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java
index e901bd5..d319071 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java
@@ -6,30 +6,30 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
 import org.geotools.data.Transaction;
-import org.geotools.data.mysql.MySQLDataStore;
 
 import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public abstract class AbstractOracleToMySQLJobContext extends AbstractOracleJobContext {
-    protected MySQLDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
 
     public AbstractOracleToMySQLJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
                                            boolean useTransform) {
         super(profileMode, useTransform);
-        if ((targetDataStore != null) && (targetDataStore instanceof MySQLDataStore)) {
-            this.targetDataStore = (MySQLDataStore) targetDataStore;
+        if ((targetDataStore != null) && (targetDataStore instanceof JDBCDataStore)) {
+            this.targetDataStore = (JDBCDataStore) targetDataStore;
         } else {
             getLogger().info("targetDataStore has wrong.");
         }
         setDataPath(dataPath);
     }
 
-    public MySQLDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(MySQLDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
index 750b695..ba88010 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
@@ -10,8 +10,18 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeIdDispatchableFilter;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -25,19 +35,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class DummyFeatureConvertMySQlJobContext extends AbstractDgnToMySQLJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertMySQlJobContext.class);
@@ -65,9 +62,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -81,6 +75,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
index 72465b9..426840b 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
@@ -10,8 +10,14 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -25,15 +31,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class FeatureDgnConvertMySQLJobContext extends AbstractDgnToMySQLJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertMySQLJobContext.class);
@@ -58,9 +55,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -74,6 +68,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
index 7815432..8bb5c69 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
@@ -11,8 +11,8 @@
 import java.util.HashMap;
 import java.util.Iterator;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.util.DigesterUtils;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -78,9 +78,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -94,6 +91,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
@@ -112,7 +110,7 @@
 
     public void putFeatureCollection(Element element) {
         assert elementDispatcher != null;
-        // �P�_�O�_�ũM���
+
         SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             boolean isEmptySize = false;
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java
index 2647b46..cc0761d 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java
@@ -6,25 +6,25 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
 import org.geotools.data.Transaction;
-import org.geotools.data.oracle.OracleDataStore;
 
 import com.ximple.eofms.jobs.context.AbstractDgnFileJobContext;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public abstract class AbstractDgnToOraSDOJobContext extends AbstractDgnFileJobContext {
-    protected OracleDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
 
     public AbstractDgnToOraSDOJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
                                          boolean useTransform) {
         super(dataPath, profileMode, useTransform);
-        this.targetDataStore = (OracleDataStore) targetDataStore;
+        this.targetDataStore = (JDBCDataStore) targetDataStore;
     }
 
-    public OracleDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(OracleDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java
index dec4d5d..9535bba 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java
@@ -6,31 +6,31 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
 import org.geotools.data.Transaction;
-import org.geotools.data.oracle.OracleDataStore;
 
 import com.ximple.eofms.jobs.context.AbstractOracleJobContext;
+import org.geotools.jdbc.JDBCDataStore;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public abstract class AbstractOracleToOraSDOJobContext extends AbstractOracleJobContext {
     protected boolean profileMode = false;
-    protected OracleDataStore targetDataStore;
+    protected JDBCDataStore targetDataStore;
 
     public AbstractOracleToOraSDOJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
                                             boolean useTransform) {
         super(profileMode, useTransform);
-        if ((targetDataStore != null) && (targetDataStore instanceof OracleDataStore)) {
-            this.targetDataStore = (OracleDataStore) targetDataStore;
+        if ((targetDataStore != null) && (targetDataStore instanceof JDBCDataStore)) {
+            this.targetDataStore = (JDBCDataStore) targetDataStore;
         } else {
             getLogger().info("targetDataStore has wrong.");
         }
         setDataPath(dataPath);
     }
 
-    public OracleDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(OracleDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
index 1ba19b3..9b1bf26 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
@@ -10,8 +10,18 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeIdDispatchableFilter;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -22,23 +32,9 @@
 import org.geotools.data.Transaction;
 import org.geotools.feature.IllegalAttributeException;
 import org.geotools.feature.SchemaException;
-import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class DummyFeatureConvertOraSDOJobContext extends AbstractDgnToOraSDOJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertOraSDOJobContext.class);
@@ -66,9 +62,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -82,6 +75,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
index 3de2377..1c3ebd6 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
@@ -10,8 +10,14 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -25,15 +31,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class FeatureDgnConvertOraSDOJobContext extends AbstractDgnToOraSDOJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertOraSDOJobContext.class);
@@ -58,9 +55,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -74,6 +68,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
index c112330..c7b85f1 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
@@ -11,8 +11,15 @@
 import java.util.HashMap;
 import java.util.Iterator;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.vividsolutions.jts.util.Assert;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.jobs.OracleElementLogger;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -21,27 +28,18 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.FeatureWriter;
 import org.geotools.data.Transaction;
-import org.geotools.data.oracle.OracleDataStoreFactory;
+import org.geotools.data.oracle.OracleNGDataStoreFactory;
 import org.geotools.feature.IllegalAttributeException;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.quartz.JobExecutionContext;
 import org.xml.sax.SAXException;
 
-import com.vividsolutions.jts.util.Assert;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.jobs.OracleElementLogger;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-
 public class OracleConvertOraSDOJobContext extends AbstractOracleToOraSDOJobContext {
     static Log logger = LogFactory.getLog(OracleConvertOraSDOJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
 
-    static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory();
+    static OracleNGDataStoreFactory dataStoreFactory = new OracleNGDataStoreFactory();
 
     private OracleElementLogger elmLogger = null;
 
@@ -78,9 +76,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -94,6 +89,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
@@ -112,7 +108,7 @@
 
     public void putFeatureCollection(Element element) {
         assert elementDispatcher != null;
-        // �P�_�O�_�ũM���
+
         SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             boolean isEmptySize = false;
@@ -224,11 +220,6 @@
         executionContext = context;
     }
 
-    /**
-     * �����]�Ƽg�J��
-     *
-     * @throws IOException IO�o�Ϳ�~
-     */
     public void closeFeatureWriter() throws IOException {
 
         for (FeatureWriter featureWriter : this.featuresWriterContext.values()) {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java
index c0e2e5a..9bbc42a 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java
@@ -10,14 +10,16 @@
 import java.sql.Statement;
 import java.util.*;
 
+import com.vividsolutions.jts.geom.LinearRing;
 import com.ximple.eofms.util.FeatureTypeBuilderUtil;
 import org.geotools.data.DataSourceException;
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
 import org.geotools.data.Transaction;
 import org.geotools.data.jdbc.JDBCUtils;
-import org.geotools.data.postgis.PostgisDataStore;
+import org.geotools.data.postgis.PostGISDialect;
 import org.geotools.filter.LengthFunction;
+import org.geotools.jdbc.JDBCDataStore;
 import org.geotools.referencing.NamedIdentifier;
 import org.geotools.referencing.crs.DefaultGeographicCRS;
 import org.opengis.feature.simple.SimpleFeature;
@@ -25,7 +27,6 @@
 import org.opengis.feature.type.AttributeDescriptor;
 import org.opengis.feature.type.AttributeType;
 import org.opengis.feature.type.GeometryDescriptor;
-import org.opengis.feature.type.GeometryType;
 import org.opengis.feature.type.PropertyType;
 import org.opengis.filter.BinaryComparisonOperator;
 import org.opengis.filter.Filter;
@@ -118,10 +119,10 @@
     /**
      * Well Known Text writer (from JTS).
      */
-    protected static WKTWriter geometryWriter = new WKTWriter();
+    // protected static WKTWriter geometryWriter = new WKTWriter();
     protected static JtsBinaryWriter binaryWriter = new JtsBinaryWriter();
 
-    private PostgisDataStore targetDataStore;
+    private JDBCDataStore targetDataStore;
     // protected Connection connection;
     protected String targetSchema = "public";
 
@@ -130,8 +131,8 @@
     public AbstractDgnToPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
                                           boolean profileMode, boolean useTransform) {
         super(dataPath, profileMode, useTransform);
-        if ((targetDataStore != null) && (targetDataStore instanceof PostgisDataStore)) {
-            this.targetDataStore = (PostgisDataStore) targetDataStore;
+        if ((targetDataStore != null) && (targetDataStore instanceof JDBCDataStore)) {
+            this.targetDataStore = (JDBCDataStore) targetDataStore;
         } else {
             getLogger().info("targetDataStore has wrong.");
         }
@@ -139,11 +140,11 @@
         setTargetSchema(targetSchema);
     }
 
-    public PostgisDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(PostgisDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
@@ -153,12 +154,12 @@
 
     public void setTargetSchema(String schemaName) {
         targetSchema = schemaName;
+        targetDataStore.setDatabaseSchema(targetSchema);
     }
 
     public Connection getConnection() {
         try {
             return targetDataStore.getConnection(Transaction.AUTO_COMMIT);
-
         } catch (IOException e)
         {
             getLogger().warn(e.getMessage(), e);
@@ -237,7 +238,7 @@
 
     private String addGeometryColumn(String dbSchema, String tableName, GeometryDescriptor geometryDescriptor, int srid) {
         StringBuilder sql;
-        String typeName = getGeometrySQLTypeName(((AttributeType) geometryDescriptor.getType()).getBinding());
+        String typeName = getGeometrySQLTypeName((geometryDescriptor.getType()).getBinding());
         if (typeName == null) {
             getLogger().warn("Error: " + geometryDescriptor.getLocalName() + " unknown type!!!");
             throw new RuntimeException("Error: " + geometryDescriptor.getLocalName() + " unknown type!!!");
@@ -484,6 +485,7 @@
             return "null";
         }
 
+        /*
         if (targetDataStore.isWKBEnabled()) {
             //String wkb = WKBEncoder.encodeGeometryHex(geom);
             String wkb = WKBWriter.bytesToHex(new WKBWriter().write(geom));
@@ -496,8 +498,13 @@
         }
 
         String geoText = geometryWriter.write(geom);
-
         return "GeometryFromText('" + geoText + "', " + srid + ")";
+        */
+        if (geom instanceof LinearRing) {
+            //postgis does not handle linear rings, convert to just a line string
+            geom = geom.getFactory().createLineString(((LinearRing) geom).getCoordinateSequence());
+        }
+        return "ST_GeomFromText('" + geom.toText() + "', " + srid + ")";
     }
 
     protected String makeInsertSql(SimpleFeature feature, int srid) // throws IOException
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java
index d88fabd..9f78c89 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java
@@ -10,12 +10,13 @@
 import java.sql.Statement;
 import java.util.*;
 
+import com.vividsolutions.jts.geom.LinearRing;
 import com.ximple.eofms.util.FeatureTypeBuilderUtil;
 import org.geotools.data.DataSourceException;
 import org.geotools.data.DataStore;
 import org.geotools.data.SchemaNotFoundException;
-import org.geotools.data.postgis.PostgisDataStore;
 import org.geotools.filter.LengthFunction;
+import org.geotools.jdbc.JDBCDataStore;
 import org.geotools.referencing.NamedIdentifier;
 import org.geotools.referencing.crs.DefaultGeographicCRS;
 import org.opengis.feature.simple.SimpleFeature;
@@ -115,19 +116,19 @@
     /**
      * Well Known Text writer (from JTS).
      */
-    protected static WKTWriter geometryWriter = new WKTWriter();
+    // protected static WKTWriter geometryWriter = new WKTWriter();
     protected static JtsBinaryWriter binaryWriter = new JtsBinaryWriter();
 
     protected boolean schemaEnabled = true;
 
-    private PostgisDataStore targetDataStore;
+    private JDBCDataStore targetDataStore;
     private String targetSchema = "public";
 
     public AbstractOracleToPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
                                              boolean profileMode, boolean useTransform) {
         super(profileMode, useTransform);
-        if ((targetDataStore != null) && (targetDataStore instanceof PostgisDataStore)) {
-            this.targetDataStore = (PostgisDataStore) targetDataStore;
+        if ((targetDataStore != null) && (targetDataStore instanceof JDBCDataStore)) {
+            this.targetDataStore = (JDBCDataStore) targetDataStore;
         } else {
             getLogger().info("targetDataStore has wrong.");
         }
@@ -135,11 +136,11 @@
         setTargetSchema(targetSchema);
     }
 
-    public PostgisDataStore getTargetDataStore() {
+    public JDBCDataStore getTargetDataStore() {
         return targetDataStore;
     }
 
-    public void setTargetDataStore(PostgisDataStore targetDataStore) {
+    public void setTargetDataStore(JDBCDataStore targetDataStore) {
         this.targetDataStore = targetDataStore;
     }
 
@@ -149,6 +150,7 @@
 
     public void setTargetSchema(String schemaName) {
         targetSchema = schemaName;
+        targetDataStore.setDatabaseSchema(targetSchema);
     }
 
     public Connection getConnection() {
@@ -506,6 +508,7 @@
             return "null";
         }
 
+        /*
         if (targetDataStore.isWKBEnabled()) {
             //String wkb = WKBEncoder.encodeGeometryHex(geom);
             String wkb = WKBWriter.bytesToHex(new WKBWriter().write(geom));
@@ -518,8 +521,13 @@
         }
 
         String geoText = geometryWriter.write(geom);
-
         return "GeometryFromText('" + geoText + "', " + srid + ")";
+        */
+        if (geom instanceof LinearRing) {
+            //postgis does not handle linear rings, convert to just a line string
+            geom = geom.getFactory().createLineString(((LinearRing) geom).getCoordinateSequence());
+        }
+        return "ST_GeomFromText('" + geom.toText() + "', " + srid + ")";
     }
 
     protected String makeInsertSql(SimpleFeature feature, int srid) // throws IOException
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
index a0fd81e..aa20926 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
@@ -10,8 +10,18 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeIdDispatchableFilter;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -25,19 +35,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class DummyFeatureConvertPostGISJobContext extends AbstractDgnToPostGISJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertPostGISJobContext.class);
@@ -65,9 +62,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -81,6 +75,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
index cabcb83..60dc83d 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
@@ -10,8 +10,14 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -25,15 +31,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class FeatureDgnConvertPostGISJobContext extends AbstractDgnToPostGISJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertPostGISJobContext.class);
@@ -59,9 +56,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -75,6 +69,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
index a2f3aae..9c2d2ef 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
@@ -195,6 +195,10 @@
         } catch (SQLException e) {
             JDBCUtils.close(conn, Transaction.AUTO_COMMIT, e);
             logger.error(e.getMessage(), e);
+            Exception nextE =  e.getNextException();
+            if (nextE != null) {
+                logger.error("getNextException:" + nextE.getMessage(), nextE);
+            }
         } finally {
             if (isProfileMode()) accumulateUpdateTime();
         }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java
index bb27d52..605bfea 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java
@@ -48,6 +48,7 @@
 import com.ximple.io.dgn7.UserAttributeData;
 
 public class IndexDgnConvertPostGISJobContext extends AbstractDgnToPostGISJobContext {
+
     static final Log logger = LogFactory.getLog(IndexDgnConvertPostGISJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
     static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
@@ -86,7 +87,7 @@
     protected void putTextFeatureCollection(TextElement element) throws SchemaException, IllegalAttributeException {
         SimpleFeature feature = createFeature(element);
         if (feature == null) {
-            logger.info("cannot craete feature." + element.toString() + "'" +
+            logger.info("cannot craete feature. " + element.toString() + "'" +
                 element.getText() + "'");
             return;
         }
@@ -99,7 +100,7 @@
 
         feature = createFeature2(element);
         if (feature == null) {
-            logger.info("cannot craete feature2." + element.toString() + "'" +
+            logger.info("cannot craete feature2. " + element.toString() + "'" +
                 element.getText() + "'");
             return;
         }
@@ -134,12 +135,12 @@
         if (feature == null) {
             Polygon polygon = (Polygon) element.toGeometry(geometryFactory);
             if (polygon == null) {
-                logger.info("cannot craete feature." + element.toString() + "'" +
+                logger.info("cannot craete feature. " + element.toString() + "'" +
                     "linear is null" + "'");
             } else {
                 Coordinate pt = polygon.getEnvelopeInternal().centre();
                 String id = TPCLIDConverter.CoordinateToTpclId(pt);
-                logger.info("cannot craete feature." + element.toString() + "'" +
+                logger.info("cannot craete feature. " + element.toString() + "'" +
                     id + "'- from pt=" + pt);
             }
             return;
@@ -286,7 +287,7 @@
             logger.error(e.getMessage(), e);
             Exception nextE =  e.getNextException();
             if (nextE != null) {
-                logger.error(nextE.getMessage(), nextE);
+                logger.error("getNextException:" + nextE.getMessage(), nextE);
             }
         } finally {
             if (isProfileMode()) this.accumulateUpdateTime();
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
index b41674a..8fdced2 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
@@ -16,8 +16,17 @@
 import java.util.Iterator;
 
 import com.vividsolutions.jts.geom.Geometry;
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.vividsolutions.jts.util.Assert;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.CreateFeatureTypeEventListener;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.FeatureTypeEvent;
+import com.ximple.eofms.jobs.OracleElementLogger;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.util.CommonsLoggingLogger;
@@ -25,7 +34,6 @@
 import org.geotools.data.DataStore;
 import org.geotools.data.Transaction;
 import org.geotools.data.jdbc.JDBCUtils;
-import org.geotools.data.postgis.PostgisDataStoreFactory;
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.type.FeatureTypeImpl;
 import org.opengis.feature.simple.SimpleFeature;
@@ -34,23 +42,12 @@
 import org.quartz.JobExecutionContext;
 import org.xml.sax.SAXException;
 
-import com.vividsolutions.jts.util.Assert;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.CreateFeatureTypeEventListener;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.FeatureTypeEvent;
-import com.ximple.eofms.jobs.OracleElementLogger;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-
 public class OracleConvertPostGISJobContext extends AbstractOracleToPostGISJobContext
     implements CreateFeatureTypeEventListener {
     static Log logger = LogFactory.getLog(OracleConvertPostGISJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
 
-    static PostgisDataStoreFactory dataStoreFactory = new PostgisDataStoreFactory();
+    // static PostgisNGDataStoreFactory dataStoreFactory = new PostgisNGDataStoreFactory();
 
     private OracleElementLogger elmLogger = null;
 
@@ -86,9 +83,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -102,6 +96,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
index d34314e..0e86fbb 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
@@ -11,8 +11,18 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
+import com.ximple.eofms.filter.TypeIdDispatchableFilter;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -28,19 +38,6 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
-
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.eofms.filter.TypeCompIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeCompLevelIdDispatchableFilter;
-import com.ximple.eofms.filter.TypeIdDispatchableFilter;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
 
 public class DummyFeatureConvertShpJobContext extends AbstractDgnToShapefileJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertShpJobContext.class);
@@ -68,9 +65,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -84,6 +78,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
index 0208b29..5825139 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
@@ -11,8 +11,14 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
+import com.ximple.eofms.filter.ElementDispatcher;
+import com.ximple.eofms.util.DigesterUtils;
+import com.ximple.io.dgn7.ComplexElement;
+import com.ximple.io.dgn7.Element;
+import com.ximple.io.dgn7.FrammeAttributeData;
+import com.ximple.io.dgn7.UserAttributeData;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -29,18 +35,11 @@
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
 
-import com.vividsolutions.jts.geom.GeometryFactory;
-
-import com.ximple.eofms.filter.AbstractFLinkageDispatchableFilter;
-import com.ximple.eofms.filter.ElementDispatcher;
-import com.ximple.io.dgn7.ComplexElement;
-import com.ximple.io.dgn7.Element;
-import com.ximple.io.dgn7.FrammeAttributeData;
-import com.ximple.io.dgn7.UserAttributeData;
-
 public class FeatureDgnConvertShpJobContext extends AbstractDgnToShapefileJobContext {
+
     static final Log logger = LogFactory.getLog(FeatureDgnConvertShpJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
+
     static final String SHPOUTPATH = "shpout";
 
     private String dataOut = null;
@@ -64,9 +63,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -80,6 +76,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
index 72a1796..ea60c5a 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
@@ -13,8 +13,8 @@
 import java.util.Iterator;
 import java.util.Properties;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.util.DigesterUtils;
+import org.apache.commons.digester3.Digester;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.transaction.memory.PessimisticMapWrapper;
@@ -89,9 +89,6 @@
 
     private ElementDispatcher createElementDispatcher() {
         try {
-            URL rulesURL = ElementDispatcher.class.getResource("ElementDispatcherRules.xml");
-            assert rulesURL != null;
-            Digester digester = DigesterLoader.createDigester(rulesURL);
             URL filterURL = null;
             if (_filterConfig != null) {
                 File config = new File(_filterConfig);
@@ -105,6 +102,7 @@
                 // filterURL = this.getClass().getResource("/conf/ConvertShpFilterForLevel.xml");
             }
             assert filterURL != null;
+            Digester digester = DigesterUtils.getElementDigester();
             return (ElementDispatcher) digester.parse(filterURL);
         } catch (UnsupportedEncodingException e) {
             logger.info(e.getMessage(), e);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/DigesterUtils.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/DigesterUtils.java
new file mode 100644
index 0000000..65cc217
--- /dev/null
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/DigesterUtils.java
@@ -0,0 +1,25 @@
+package com.ximple.eofms.util;
+
+import com.ximple.eofms.filter.ElementDispatcher;
+import org.apache.commons.digester3.Digester;
+import org.apache.commons.digester3.binder.DigesterLoader;
+import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
+
+public class DigesterUtils {
+    protected static Digester digester = null;
+    protected static DigesterLoader loader = DigesterLoader.newLoader( new FromXmlRulesModule() {
+            @Override
+            protected void loadRules() {
+                loadXMLRules(ElementDispatcher.class.getResource("ElementDispatcherRules.xml"));
+            }
+
+        } );
+
+    static {
+        digester = loader.newDigester();
+    }
+
+    public static Digester getElementDigester() {
+        return digester;
+    }
+}
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java
index 9e31c73..5ab01fc 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java
@@ -1,32 +1,36 @@
 package com.ximple.eofms.util;
 
-import com.vividsolutions.jts.geom.*;
+import java.util.ArrayList;
+import java.util.TreeMap;
+
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+import com.vividsolutions.jts.geom.MultiPoint;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.Polygon;
+import com.ximple.eofms.filter.ElementDispatcher;
+import org.apache.commons.digester3.Digester;
+import org.apache.commons.digester3.binder.DigesterLoader;
+import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.geotools.feature.AttributeTypeBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
-import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.geotools.referencing.CRS;
-import org.geotools.referencing.ReferencingFactoryFinder;
-import org.geotools.referencing.factory.epsg.ThreadedH2EpsgFactory;
 import org.opengis.feature.type.AttributeDescriptor;
 import org.opengis.feature.type.AttributeType;
 import org.opengis.feature.type.GeometryType;
 import org.opengis.referencing.FactoryException;
-import org.opengis.referencing.crs.CRSFactory;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.referencing.cs.CSFactory;
-import org.opengis.referencing.cs.CoordinateSystem;
 import org.opengis.referencing.operation.MathTransform;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.TreeMap;
-
 public final class FeatureTypeBuilderUtil {
+
+    protected static final String DEFAULTNAMESPACE = "http://www.ximple.com.tw/tpc/";
+
     private static final Logger LOGGER = LogManager.getLogger(FeatureTypeBuilderUtil.class);
     private static boolean notAllowNull = false;
-    protected static final String DEFAULTNAMESPACE = "http://www.ximple.com.tw/tpc/";
+    private static boolean allowNull = true;
 
     public static boolean isNotAllowNull() {
         return notAllowNull;
@@ -476,6 +480,9 @@
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
                 "symbol", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 20)));
+        attrBuilder = new AttributeTypeBuilder();
+        attrDescs.add(attrBuilder.buildDescriptor(
+                "origin", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull, lookupCRS(defaultSRID))));
 
         typeBuilder.addAll(attrDescs);
         return typeBuilder;
diff --git a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
index 6719421..635cd5c 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
+++ b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/ElementDispatcherRules.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding="big5"?>
-<!DOCTYPE digester-rules PUBLIC "-//Jakarta Apache //DTD digester-rules XML V1.0//EN" "digester-rules.dtd">
+<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
 <digester-rules>
   <pattern value="ElementDispatcherRules">
     <object-create-rule classname="com.ximple.eofms.filter.ElementDispatcher"/>
diff --git a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml
index e925ce6..ea1e91b 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml
+++ b/xdgnjobs/ximple-spatialjob/src/main/resources/com/ximple/eofms/filter/FeatureClassificationRules.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding="big5"?>
-<!DOCTYPE digester-rules PUBLIC "-//Jakarta Apache //DTD digester-rules XML V1.0//EN" "digester-rules.dtd">
+<!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
 <digester-rules>
   <pattern value="FeatureClassificationRules">
     <object-create-rule classname="com.ximple.eofms.collector.FeatureClassification"/>
diff --git a/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java b/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
index c25783a..6d351fb 100644
--- a/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
+++ b/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java
@@ -3,8 +3,8 @@
 import java.io.File;
 import java.io.IOException;
 
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
+import com.ximple.eofms.util.DigesterUtils;
+import org.apache.commons.digester3.Digester;
 import org.geotools.TestData;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -17,7 +17,7 @@
     @Test
     public void testLoadRules() throws IOException {
         File rules = TestData.file(this, TestRulesName);
-        Digester digester = DigesterLoader.createDigester(rules.toURI().toURL());
+        Digester digester = DigesterUtils.getElementDigester();
         // File config = TestData.file(this, TestConfigName);
         // ElementDispatcher ed = (ElementDispatcher) digester.parse(config);
         Assert.assertNotNull(digester);
@@ -26,7 +26,7 @@
     @Test
     public void testLoadConfig() throws IOException, SAXException {
         File rules = TestData.file(this, TestRulesName);
-        Digester digester = DigesterLoader.createDigester(rules.toURI().toURL());
+        Digester digester = DigesterUtils.getElementDigester();
         File config = TestData.file(this, TestConfigName);
         ElementDispatcher ed = (ElementDispatcher) digester.parse(config);
         Assert.assertNotNull(ed);

--
Gitblit v0.0.0-SNAPSHOT