ConversionNotSupportedException с одноименными классами - PullRequest
0 голосов
/ 09 мая 2011

ОБНОВЛЕНО: сделаны некоторые неверные предположения о классах и т. Д. Теперь, когда у меня есть демонстрационный проект, происходит следующее:

У меня есть два класса, оба с именем 'Company'.

  • Один находится в grails-app / domain / my.classes.domain.Company
  • , другой находится в src / groovy / my.clazz.Company

Последнийимеет аннотацию @Validateable, а Config.groovy содержит grails.validateable.packages = ['my.clazz']

У меня также есть класс Account, в grails-app / domain / my.classes.domain.Account:

package my.classes.domain</p> <p>import java.io.Serializable;</p> <p>class Account implements Serializable { Company company }

Затем я использую следующий код (в bootstrap.groovy):

import my.classes.domain.Company
import my.classes.domain.Account
...
Company company = new Company
Account acccount = new Account(company: company)

При запуске этого приложения следующая ошибкапоказано:

Caused by: org.springframework.beans.ConversionNotSupportedException: Cannot convert value of type [my.clazz.Company] to required type [my.classes.domain.Company] for property 'company': no matching editors or conversion strategy found
    ... 33 more
Caused by: java.lang.IllegalStateException:
Cannot convert value of type [my.clazz.Company] to required type [my.classes.domain.Company] for property 'company': no matching editors or conversion strategy found

Это очень странное исключение, так как все вроде бы хорошо.Некоторое тестирование подтвердило следующие «подсказки»: эта ошибка НЕ ​​возникает, когда я изменяю config.groovy для явного именования классов (т.е. использую grails.validateable.classes = ['my.classes.domain.Company']), эта ошибкаНЕ происходит, когда я изменяю свойство компании учетной записи, чтобы оно имело другое имя (и соответственно изменяю загрузочную версию), то есть:

class Account extends Serializable {
    Company cmp
}

Однако это обходные пути.Я действительно заинтересован в том, ПОЧЕМУ это происходит.Кто-нибудь получил подсказку?

Чтобы быть в безопасности, я сделал следующее, чтобы создать эту проблему:

  1. создать класс домена: my.classes.domain.Company
  2. создать класс домена: my.classes.domain.Account
  3. изменить класс домена, как указано выше
  4. создать класс groovy: my.clazz.Company
  5. giveэтот классный класс аннотации Validatable.
  6. добавьте пакет my.clazz к проверяемым пакетам
  7. в начальной загрузке, создайте новую учетную запись с новой учетной записью (компания: компания)

Ответы [ 2 ]

0 голосов
/ 10 мая 2011

В соответствии с ошибкой, которую вы описали, я думаю, что Grails определил неправильно: компания, которую вы переводите в Учетную запись, была определена как my.clazz.Company, а не my.classes.domain.Company.

Выможно поставить простую проверку, чтобы точно знать, какой тип company в начальной загрузке:

import java.lang.Class;
...
println company.getClass().getName()
0 голосов
/ 09 мая 2011

Помимо различных опечаток в вашем коде, которые затрудняют определение проблемы, может показаться, что проблема заключается в том, что вы пытаетесь установить свойство Account.company типа my.class.Company с my.class .domain. Тип компании. Ваш бутстрап должен быть изменен на:

import my.class.Company
import my.class.Account

Company company = new Company
Account acccount = new Account(company: company)

Обратите внимание, правильная выписка по импорту для Компании.

...