Hello,
Does anyone know why such GML cause ORA-29532 in MDSYS.SDO_UTIL. I pass the GML message to a stored procedure like below.
GML message:
| <geometrie> <Surface xmlns="http://www.opengis.net/gml" srsName="urn:opengis:def:crs:EPSG::28992" srsDimension="2"> <patches> <PolygonPatch> <exterior> <LinearRing srsName="urn:opengis:def:crs:EPSG::28992" srsDimension="2"> <posList srsName="urn:opengis:def:crs:EPSG::28992" srsDimension="2" count="13">208141.174 473916.884 208118.711 473961.78 208091.124 473934.712 208092.336 473933.477 208088.859 473930.066 208088.754 473930.173 208081.074 473922.617 208114.588 473888.589 208134.195 473907.849 208132.982 473909.085 208134.539 473910.613 208134.69 473910.46 208141.174 473916.884</posList> </LinearRing> </exterior> <interior> <LinearRing srsName="urn:opengis:def:crs:EPSG::28992" srsDimension="2"> <posList srsName="urn:opengis:def:crs:EPSG::28992" srsDimension="2" count="5"> 208129.450 473917.096 208115.450 473903.307 208095.781 473923.277 208116.326 473943.511 208129.450 473917.096 </posList> </LinearRing> </interior> </PolygonPatch> </patches> </Surface> </geometrie> |
Error:
Fout tijdens verwerken bericht met referentienummer DD0000059185 : ORA-29532: Java-aanroep is afgesloten door niet-onderschepte Java-uitzondering: java.lang.RuntimeException: java.lang.NullPointerException. ORA-06512: in "MDSYS.SDO_UTIL", regel 197 ORA-06512: in "IGPCMGS_OWNER.GML_TO_GEOM", regel 26 ORA-06512: in "IGPCMGS_OWNER.GMSVBO_UPDATE_GEOMETRY", regel 5 ORA-04088: Fout bij uitvoering van trigger 'IGPCMGS_OWNER.GMSVBO_UPDATE_GEOMETRY'. Java Stack trace:Caused by: java.sql.SQLException: ORA-29532: Java-aanroep is afgesloten door niet-onderschepte Java-uitzondering: java.lang.RuntimeException: java.lang.NullPointerException. ORA-06512: in "MDSYS.SDO_UTIL", regel 197 ORA-06512: in "IGPCMGS_OWNER.GML_TO_GEOM", regel 26 ORA-06512: in "IGPCMGS_OWNER.GMSVBO_UPDATE_GEOMETRY", regel 5 ORA-04088: Fout bij uitvoering van trigger 'IGPCMGS_OWNER.GMSVBO_UPDATE_GEOMETRY'.
Stored procedure:
create or replace FUNCTION GML_TO_GEOM (p_clob in CLOB, p_srid NUMBER)
RETURN SDO_GEOMETRY
IS
l_geom SDO_GEOMETRY;
l_clob CLOB;
BEGIN
if (p_clob is null) then
return null;
end if;
l_clob := REGEXP_REPLACE(p_clob, 'srsName="(urn:((opengis|ogc):def:crs:|)|)EPSG(::|:geographicCRS:|(:(\d?\d?\.?\d?\d?):)|:)(7415|28992)"', 'srsName="SDO:90112"');
if (REGEXP_LIKE(l_clob, '<(gml:|)pos>[0-9]*\.?[0-9]* [0-9]*\.?[0-9]* [0-9]*\.?[0-9]*</(gml:|)pos>')) THEN
l_clob := REGEXP_REPLACE(p_clob, '(<(gml:|)pos>[0-9]*\.?[0-9]* [0-9]*\.?[0-9]*)( [0-9]*\.?[0-9]*)(</(gml:|)pos>)', '\1\4');
end if;
if (instr(l_clob, ' xsi:type=') > 0) then
if (instr(l_clob, 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance') = 0) then
l_clob := REGEXP_REPLACE(l_clob, '(.*)(xsi:type=.*)', '\1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \2');
end if;
end if;
if (instr(l_clob, 'xmlns:gml="http://www.opengis.net/gml') = 0) then
l_clob := REGEXP_REPLACE(l_clob, '(.*)(srsName.*)', '\1xmlns:gml="http://www.opengis.net/gml" \2');
end if;
if ( instr(l_clob, 'srsDimension') = 0 or instr(l_clob, 'srsDimension') > 0 or instr(l_clob, 'gml:posList') > 0 or instr(l_clob, '<gml:pos>') > 0) then
l_geom := SDO_UTIL.FROM_GML311GEOMETRY(l_clob);
else
l_geom := SDO_UTIL.FROM_GMLGEOMETRY(l_clob);
end if;
if l_geom.sdo_gtype = 1003 then
l_geom.sdo_gtype := 2003;
end if;
if l_geom.sdo_gtype = 1007 then
l_geom.sdo_gtype := 2007;
end if;
l_geom.sdo_srid := p_srid;
RETURN l_geom;
END GML_TO_GEOM;