diff --git a/oracle-plugin/pom.xml b/oracle-plugin/pom.xml
index 922c7f188..7343bf860 100644
--- a/oracle-plugin/pom.xml
+++ b/oracle-plugin/pom.xml
@@ -120,6 +120,16 @@
21.1.0.0
test
+
+ com.oracle.database.xml
+ xdb
+ 21.1.0.0
+
+
+ com.oracle.database.xml
+ xmlparserv2
+ 21.1.0.0
+
org.mockito
mockito-core
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java
index 44131a01b..219f754a6 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceDBRecord.java
@@ -265,6 +265,7 @@ private void handleOracleSpecificType(ResultSet resultSet, StructuredRecord.Buil
switch (sqlType) {
case OracleSourceSchemaReader.INTERVAL_YM:
case OracleSourceSchemaReader.INTERVAL_DS:
+ case OracleSourceSchemaReader.XML:
case OracleSourceSchemaReader.LONG:
case Types.NCLOB:
recordBuilder.set(field.getName(), resultSet.getString(columnIndex));
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java
index 208b70410..b0fe5f0af 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSourceSchemaReader.java
@@ -44,6 +44,7 @@ public class OracleSourceSchemaReader extends CommonSchemaReader {
public static final int BINARY_DOUBLE = 101;
public static final int BFILE = -13;
public static final int LONG = -1;
+ public static final int XML = 2009;
public static final int LONG_RAW = -4;
/**
@@ -61,6 +62,7 @@ public class OracleSourceSchemaReader extends CommonSchemaReader {
BINARY_DOUBLE,
BFILE,
LONG,
+ XML,
LONG_RAW,
Types.NUMERIC,
Types.DECIMAL
@@ -102,6 +104,7 @@ public Schema getSchema(ResultSetMetaData metadata, int index) throws SQLExcepti
return Schema.of(Schema.Type.BYTES);
case INTERVAL_DS:
case INTERVAL_YM:
+ case XML:
case LONG:
return Schema.of(Schema.Type.STRING);
case Types.NUMERIC:
diff --git a/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java b/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java
index 1ff77c533..350c3e56b 100644
--- a/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java
+++ b/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleSchemaReaderTest.java
@@ -91,4 +91,22 @@ public void getSchema_timestampLTZFieldFalse_returnDatetime() throws SQLExceptio
Assert.assertEquals(expectedSchemaFields.get(1).getName(), actualSchemaFields.get(1).getName());
Assert.assertEquals(expectedSchemaFields.get(1).getSchema(), actualSchemaFields.get(1).getSchema());
}
+
+ @Test
+ public void getSchema_xmlField_returnString() throws SQLException {
+ OracleSourceSchemaReader schemaReader = new OracleSourceSchemaReader(null, false, false, false);
+ ResultSet resultSet = Mockito.mock(ResultSet.class);
+ ResultSetMetaData metadata = Mockito.mock(ResultSetMetaData.class);
+ Mockito.when(resultSet.getMetaData()).thenReturn(metadata);
+ Mockito.when(metadata.getColumnCount()).thenReturn(1);
+ Mockito.when(metadata.getColumnType(1)).thenReturn(OracleSourceSchemaReader.XML);
+ Mockito.when(metadata.getColumnName(1)).thenReturn("xmlData");
+
+ List actualSchemaFields = schemaReader.getSchemaFields(resultSet);
+
+ List expectedSchemaFields = Lists.newArrayList();
+ expectedSchemaFields.add(Schema.Field.of("xmlData", Schema.of(Schema.Type.STRING)));
+ Assert.assertEquals(expectedSchemaFields.get(0).getName(), actualSchemaFields.get(0).getName());
+ Assert.assertEquals(expectedSchemaFields.get(0).getSchema(), actualSchemaFields.get(0).getSchema());
+ }
}