[ 
https://issues.apache.org/jira/browse/SOLR-5597?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13900283#comment-13900283
 ] 

Gunnlaugur Thor Briem edited comment on SOLR-5597 at 2/13/14 12:49 PM:
-----------------------------------------------------------------------

Same error occurs with a field of type integer. I suggest changing title to 
“DataImportHandler fails if integer column used as key or value in cache”. I'm 
working around this by casting all columns involved to TEXT:

{code:xml}
<entity name="parent" dataSource="d" query="SELECT id, xyz, child_id::TEXT FROM 
parent;">
  <entity name="child" dataSource="d" query="SELECT id::TEXT, abc FROM child;"
          processor="CachedSqlEntityProcessor"
          where="id=par.child_id"/>
</entity>
{code}

(As the use of the legacy CachedSqlEntityProcessor suggests, I encountered this 
while trying an upgrade from Solr 3.5, where integer columns were working.)

Full stack trace that I got:

{code}
8233662 [Thread-23] ERROR org.apache.solr.handler.dataimport.DataImporter  ? 
Full Import failed:java.lang.RuntimeException: java.lang.RuntimeException: 
org.apache.solr.handler.dataimport.DataImportHandlerException: 
java.lang.ClassCastException: java.lang.String cannot be cast to 
java.lang.Integer
        at 
org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:270)
        at 
org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:411)
        at 
org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:476)
        at 
org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:457)
Caused by: java.lang.RuntimeException: 
org.apache.solr.handler.dataimport.DataImportHandlerException: 
java.lang.ClassCastException: java.lang.String cannot be cast to 
java.lang.Integer
        at 
org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:410)
        at 
org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:323)
        at 
org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:231)
        ... 3 more
Caused by: org.apache.solr.handler.dataimport.DataImportHandlerException: 
java.lang.ClassCastException: java.lang.String cannot be cast to 
java.lang.Integer
        at 
org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:63)
        at 
org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:246)
        at 
org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:469)
        at 
org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:495)
        at 
org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:408)
        ... 5 more
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to 
java.lang.Integer
        at java.lang.Integer.compareTo(Integer.java:37)
        at java.util.TreeMap.getEntry(TreeMap.java:328)
        at java.util.TreeMap.get(TreeMap.java:255)
        at 
org.apache.solr.handler.dataimport.SortedMapBackedCache.iterator(SortedMapBackedCache.java:147)
        at 
org.apache.solr.handler.dataimport.DIHCacheSupport.getIdCacheData(DIHCacheSupport.java:179)
        at 
org.apache.solr.handler.dataimport.DIHCacheSupport.getCacheData(DIHCacheSupport.java:145)
        at 
org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:129)
        at 
org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:75)
        at 
org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)
        ... 8 more
{code}


was (Author: gthb):
Same error occurs with a field of type integer. I suggest changing title to 
“DataImportHandler fails if integer column used as key or value in cache”. I'm 
working around this by casting all columns involved to TEXT:

{code:xml}
<entity name="parent" dataSource="d" query="SELECT id, xyz, child_id::TEXT FROM 
parent;">
  <entity name="child" dataSource="d" query="SELECT id::TEXT, abc FROM child;"
          processor="CachedSqlEntityProcessor"
          where="id=par.child_id"/>
</entity>
{code}

(As the use of the legacy CachedSqlEntityProcessor suggests, I encountered this 
while trying an upgrade from Solr 3.5, where integer columns were working.)

> ClassCastException occurs when importing CLOB-fields using SqlEntityProcessor 
> and SortedMapBackedCache
> ------------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-5597
>                 URL: https://issues.apache.org/jira/browse/SOLR-5597
>             Project: Solr
>          Issue Type: Bug
>          Components: contrib - DataImportHandler
>    Affects Versions: 4.6
>            Reporter: Henrik Wingerei
>
> Using the SqlEntityProcessor with the SortedMapBackedCache as cache 
> implementation, gives the following ClassCastException when trying to import 
> a field of type oracle.sql.CLOB.
> 2014-01-02 09:32:19,143 [ERROR] [Thread-54] Exception in entity : 
> <field-name>:java.lang.ClassCastException: oracle.sql.CLOB cannot be cast to 
> java.lang.Comparable
>         at java.util.TreeMap.getEntry(TreeMap.java:325)
>         at java.util.TreeMap.get(TreeMap.java:255)
>         at 
> org.apache.solr.handler.dataimport.SortedMapBackedCache.add(SortedMapBackedCache.java:61)
>         at 
> org.apache.solr.handler.dataimport.DIHCacheSupport.populateCache(DIHCacheSupport.java:124)
>         at 
> org.apache.solr.handler.dataimport.DIHCacheSupport.getSimpleCacheData(DIHCacheSupport.java:199)
>         at 
> org.apache.solr.handler.dataimport.DIHCacheSupport.getCacheData(DIHCacheSupport.java:147)
>         at 
> org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:129)
>         at 
> org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:75)
>         at 
> org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:469)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:495)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:408)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:323)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:231)
>         at 
> org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:411)
>         at 
> org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:476)
>         at 
> org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:457)
> -- org.apache.solr.handler.dataimport.EntityProcessorWrapper
> It seems that this occurs because the SortedMapBackedCache uses a 
> java.util.TreeMap as the underlying cache, and TreeMap requires that all 
> elements implements the java.lang.Comparable interface. However 
> oracle.sql.CLOB does not implement Comparable and the import fails when the 
> TreeMap implementation tries to cast the element to a Comparable (this occurs 
> on line 325 in TreeMap.java - java version 1.6.0_33).



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to