<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style='font-size: 10pt; font-family: Verdana,Geneva,sans-serif'>
<p>Buenas, he decompilado la clase <em>PostgreSQLHelper</em> y he visto esto en el método. ¿Qué sentido tiene?<br /><br /></p>
<pre class="prettyprint lang-.java prettyprinted"><span class="pln"></span><span class="kwd">public</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> getSqlFieldDescription</span><span class="pun">(</span><span class="typ">FeatureAttributeDescriptor</span><span class="pln"> attr</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">throws</span><span class="pln"> </span><span class="typ">DataException</span><span class="pln"> </span><span class="pun">{</span><strong><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">attr</span><span class="pun">.</span><span class="pln">getType</span><span class="pun">()</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">66</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span></strong><span class="kwd">return</span><span class="pln"> </span><span class="kwd">super</span><span class="pun">.</span><span class="pln">getSqlFieldDescription</span><span class="pun">(</span><span class="pln">attr</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln"></span></pre>
<p>El 24-02-2017 10:42 AM, Iago Alonso Alonso escribió:</p>
<blockquote type="cite" style="padding: 0 0.4em; border-left: #1010ff 2px solid; margin: 0"><!-- html ignored --><!-- head ignored --><!-- meta ignored -->
<p>Hola, tengo dudas sobre como definir una columna en una tabla para PostgreSQL del tipo GEOMETRY. A la hora de crear la tabla, obtengo del <strong>FeatureSet</strong> los <strong>DynFields</strong> que contiene y para cada uno obtengo su nombre (que usaré como nombre de la columna) y su tipo (que usaré como tipo del dato para esa columna). En el caso de Integer, bigint, varchar o double precision no tengo problemas pero cuando llego al campo de la geometría es donde tengo los problemas.</p>
<p>Para el campo de geometría, miro el nombre del fichero que tengo ese momento para ser qué tipo de geometría se corresponde con la tabla y con la función <em>getGeometryType()</em> que he hecho, devuelto un <strong>Geometry.TYPES.<el tipo que corresponde></strong> (Point, Polygon, Line....)</p>
<p>int size = featureSet.getDefaultFeatureType().size();<br /> DynField[] values = featureSet.getDefaultFeatureType().getDynFields();<br /> for (int i = 0; i < size; i++) {<br /> String name = values[i].getName();<br /> Integer type = values[i].getType();<br /> if (!name.equals("GEOMETRY")) {<br /> featureType.add(name, type);<br /> } else {<br /> String idTabla = featureSet.getDefaultFeatureType().getId();<br /> int tipoGeometria = getGeometryType(idTabla);<br /> featureType.add(name, DataTypes.GEOMETRY).setGeometryType(Geometry.SUBTYPES.GEOM2D, tipoGeometria);<br /> }<br /> }</p>
<p>El problema viene en tiempo de ejecución, al hacer <strong>explorer.add(storeName, newFeatureStoreParameters, true);</strong>, haciendo debug he llegado hasta la clase <strong>JDBCServerExplorer.class</strong>. En la línea 499, hay un bucle <em>WHILE</em> que obtiene los campos y su tipo y crea el equivalente <em>SQL</em> para la consulta. He observado que cuando llega al campo que debe llevar la geometría, la línea:</p>
<p><strong>sqlAttr = helper.getSqlFieldDescription((FeatureAttributeDescriptor) attrs.next());</strong></p>
<p>Devuelve <em>NULL</em>, pero haciendo F5 no puedo acceder a <em>PostgreSQLHelper</em> y ver lo que el método <strong>getSqlFieldDescription</strong> intenta hacer para crear el <em>SQL</em>. Y en el log obtengo:<br /><br />ERROR [Thread-7] (ExportToJDBC.java:101) - Error al inicializar el store:<br />org.gvsig.fmap.dal.exception.InitializeException: Error intializing resource 'PostgreSQL'.<br /> at org.gvsig.fmap.dal.impl.DefaultDataManager.createProvider(DefaultDataManager.java:815)<br /> at org.gvsig.fmap.dal.impl.DefaultDataManager.intializeDataStore(DefaultDataManager.java:777)<br /> at org.gvsig.fmap.dal.impl.DefaultDataManager.localOpenStore(DefaultDataManager.java:364)<br /> at org.gvsig.fmap.dal.impl.DefaultDataManager.openStore(DefaultDataManager.java:448)<br />...<br />Caused by: org.gvsig.fmap.dal.exception.InitializeException: Error intializing resource '{unknow}'.<br /> at org.gvsig.fmap.dal.impl.DataStoreProviderToFeatureStoreProviderFactoryWrapper.createProvider(DataStoreProviderToFeatureStoreProviderFactoryWrapper.java:61)<br /> at org.gvsig.fmap.dal.impl.DefaultDataManager.createProvider(DefaultDataManager.java:797)<br /> ... 7 more<br /><strong>Caused by: java.lang.IllegalArgumentException: argument type mismatch</strong><br /> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br /> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)<br /> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)<br /> at java.lang.reflect.Constructor.newInstance(Constructor.java:422)<br /> at org.gvsig.fmap.dal.impl.DataStoreProviderToFeatureStoreProviderFactoryWrapper.createProvider(DataStoreProviderToFeatureStoreProviderFactoryWrapper.java:59)<br /> ... 8 more<br /><br />Por lo tanto, mi pregunta es qué estoy haciendo mal a la hora de definir el campo de la geometría, o si estoy definiendo el tipo de geometría mal.</p>
<p>Un saludo y gracias.</p>
<!-- html ignored --><br />
<div class="pre" style="margin: 0; padding: 0; font-family: monospace">_______________________________________________<br /> gvSIG_desarrolladores mailing list<br /><a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a><br /> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" rel="noreferrer">https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a></div>
</blockquote>
</body></html>