2014-09-22 3 views
1

Я получаю исключение arrayIndexOutOfBounds, когда пытаюсь сохранить новую запись в своем приложении Grails.Grails 2.4.2 Домен не сохранит более 8 полей

Я сузил проблему до того, чтобы сохранить только 8 полей.

Вот мой домен класс:

package nhvr 

class NhvrJourny { 

static constraints = { 
    nhvrNo nullable:true 
    journeyId nullable:true 
    width nullable:true 
    vLength nullable:true 
    height nullable:true 
    rearOverhang nullable:true 
     } 


    Long nhvrNo 
    String journeyId 
    String title 
    BigDecimal width 
    BigDecimal vLength 
    BigDecimal height 
    BigDecimal rearOverhang 

    String toString(){ 
     return "$nhvrNo $title" 
    } 
} 

Im сохранение данных через службу. Метод выглядит следующим образом:

def saveJourny(Map nhvrJourneyPars) { 

    if (nhvrJourneyPars?.dateArchived) 
     da = df.parse(nhvrJourneyPars.dateArchived) 

    Map journeyPars = [ 
      journeyId  : nhvrJourneyPars.journeyId, 
      title   : nhvrJourneyPars.title, 
      nhvrNo  : nhvrJourneyPars.nhvrNo, 
      width   : nhvrJourneyPars.width, 
      vLength  : nhvrJourneyPars.vLength, 
      height  : nhvrJourneyPars.height, 
      rearOverhang : nhvrJourneyPars.rearOverhang 
    ] 
    NhvrJourny nhvrJournyInstance = new NhvrJourny(journeyPars) 

    println "journeyPars:" 
    journeyPars.each{ 
     println "${it.key}: ${it.value}" 
    } 

    if (nhvrJournyInstance == null) { 
     println "nhvrJournyInstance is null" 
     notFound() 
     return 
    } 

    if (!nhvrJournyInstance.validate()) { 
     if (nhvrJournyInstance.hasErrors()) { 
      println "Errors: ${nhvrJournyInstance.errors.allErrors}" 
      respond nhvrJournyInstance.errors, view: 'create' 
      return 
     } 
    } 
    else{ 
     println "No errors in nhvrJourneysInstance." 
    } 

    println "nhvrJournyInstance.properties" 
    nhvrJournyInstance.properties.each{ 
     println " ${it.key}: ${it.value}" 
    } 
    nhvrJournyInstance.save(flush:true) 
    return nhvrJournyInstance 
} 

я могу увидеть данные, которые пропускаются в и выглядит нормально:

nhvrJournyInstance: {"journeyId":"j1","title":"test","nhvrNo":"2","width":3,"height":3,"vLength":21,"rearOverhang":1} 

Это в настоящее время возвращается исключение ArrayIndexOutOfBounds, когда я звоню nhvrJournyInstance.save (флеш: true)

Если я удалю одно из полей класса Domain, данные будут сохранены. Примечание: пока отображается только семь полей, идентификатор и версия добавляются автоматически.

Я тестирование с использованием разбег приложение из IntelliJ 13.1.4 на окнах 7 Мой Grails версия 2.4.2 и Java версии 1.7.0_60 База данных Oracle 11g с использованием ojdbc6.jar

Может кто-нибудь пролил свет на это? это сводит меня с ума.

EDIT - Вот StackTrace:

14. Stacktrace follows: 
Message: 14 
    Line | Method 
->> 950 | computeBasicInfo   in oracle.jdbc.driver.OracleSql 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 623 | getSqlKind    in  '' 
| 1212 | <init> . . . . . . . . . in oracle.jdbc.driver.OraclePreparedStatement 
|  28 | <init>     in oracle.jdbc.driver.T4CPreparedStatement 
|  68 | allocatePreparedStatement in oracle.jdbc.driver.T4CDriverExtension 
| 3140 | prepareStatement   in oracle.jdbc.driver.PhysicalConnection 
| 3042 | prepareStatement . . . . in  '' 
| 6022 | prepareStatement   in  '' 
| 699 | $tt__saveJourney . . . . in nhvr.NhvrService 
|  58 | $tt__saveJourney   in nhvr.NhvrJourneyController 
| 198 | doFilter . . . . . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
|  63 | doFilter     in grails.plugin.cache.web.filter.AbstractFilter 
| 1145 | runWorker . . . . . . . . in java.util.concurrent.ThreadPoolExecutor 
| 615 | run      in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 745 | run . . . . . . . . . . . in java.lang.Thread 
enter code here 
+0

Это звучит не так. Можете ли вы опубликовать трассировку стека, связанную с ArrayIndexOutOfBoundsException? Все это не обязательно, но достаточно кадров, чтобы вернуться к строке кода в вашем сервисе. –

+0

stacktrace идет именно к строке: nhvrJournyInstance.save (flush: true) в моем сервисе. Это то, что так расстраивает –

+0

Вы имеете в виду, что последний кадр в стеке является вызовом '.save (flush: true)'? –

ответ

2

Это проблема с версией ojdbc6.jar файл, который я использовал для подключения к БД.

Я загрузил другую версию этого файла, размер которой 500kb больше, и теперь он работает.

спасибо Джефф за ваш вклад.

Смежные вопросы