OrientDB имеет проблемы с Unicode, турецким и перечислениями - PullRequest
6 голосов
/ 12 сентября 2011

Я использую библиотеку с типом enum с такими константами, как эти;

Type.SHORT
Type.LONG
Type.FLOAT
Type.STRING

Во время отладки в Eclipse я получил ошибку:

No enum const class Type.STRİNG

Поскольку я использую турецкую систему, есть проблема при работе i> İ, но, поскольку это enum const, даже если я поставил все атрибуты как UTF-8, ничто не может получить это STRING это то, что Eclipse должен искать. Но он все еще ищет STRİNG , и он не может найти, и я не могу это использовать. Что я должен сделать для этого?

Project> Properties> Resouce> Кодировка текстового файла теперь UTF-8. Проблема держится.

РЕДАКТИРОВАТЬ: Дополнительная информация может дать некоторые подсказки, которые я не могу получить; Я работаю над OrientDB. Это моя первая попытка, поэтому я не знаю, может ли проблема быть в пакетах OrientDB. Но я использую много других библиотек, я никогда не видел такой проблемы. В этом пакете есть перечисление OType, и я только пытаюсь подключиться к базе данных.

    String url = "local:database";
    ODatabaseObjectTx db = new ODatabaseObjectTx(url).
    Person person = new Person("John");
    db.save(person);
    db.close();

Я больше не использую код. База данных создана, но затем я получаю java.lang.IllegalArgumentException:

Caused by: java.lang.IllegalArgumentException: No enum const class com.orientechnologies.orient.core.metadata.schema.OType.STRİNG
    at java.lang.Enum.valueOf(Unknown Source)
    at com.orientechnologies.orient.core.metadata.schema.OType.valueOf(OType.java:41)
    at com.orientechnologies.orient.core.sql.OCommandExecutorSQLCreateProperty.parse(OCommandExecutorSQLCreateProperty.java:81)
    at com.orientechnologies.orient.core.sql.OCommandExecutorSQLCreateProperty.parse(OCommandExecutorSQLCreateProperty.java:35)
    at com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:43)
    at com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:28)
    at com.orientechnologies.orient.core.storage.OStorageEmbedded.command(OStorageEmbedded.java:63)
    at com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:63)
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.addProperty(OClassImpl.java:342)
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.createProperty(OClassImpl.java:258)
    at com.orientechnologies.orient.core.metadata.security.OSecurityShared.create(OSecurityShared.java:177)
    at com.orientechnologies.orient.core.metadata.security.OSecurityProxy.create(OSecurityProxy.java:37)
    at com.orientechnologies.orient.core.metadata.OMetadata.create(OMetadata.java:70)
    at com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.create(ODatabaseRecordAbstract.java:142)
    ... 4 more

Вот класс OType: http://code.google.com/p/orient/source/browse/trunk/core/src/main/java/com/orientechnologies/orient/core/metadata/schema/OType.java

и другой класс; OCommandExecutorSQLCreateProperty: http://code.google.com/p/orient/source/browse/trunk/core/src/main/java/com/orientechnologies/orient/core/sql/OCommandExecutorSQLCreateProperty.java

В строке 81 написано: type = OType.valueOf(word.toString());

Ответы [ 4 ]

6 голосов
/ 12 сентября 2011

Правильно ли считать, что вы используете эту программу в турецкой локали? Тогда кажется, что ошибка находится в строке 118 OCommandExecutorSQLCreateProperty:

linkedType = OType.valueOf(linked.toUpperCase());

В качестве параметра для toUpperCase.

вам необходимо указать Locale, правила верхнего регистра которого должны использоваться, вероятно, Locale.ENGLISH.
1 голос
/ 01 марта 2013

К сожалению, это связано с региональными настройками, языком вашей ОС на турецком языке.

Два варианта обхода:

1. Change your regional settings to English-US

2. Give encoding to she jvm as command line param for setting locale to English

    -Duser.language=en -Duser.region=EN

Я создал отчеты об ошибках для xmlbeans, Существуют и Apache CXF для той же проблемы.Перечисление toUpper является точкой исключения.

Некоторые ссылки:

https://issues.apache.org/jira/browse/XMLSCHEMA-22

http://mail -archives.apache.org / mod_mbox / xmlbeans-user / 201001.mbox /% 3CSNT123-DS11993DD331D6CA7799C46CF6650 @ phx.gbl

https://vaadin.com/forum/-/message_boards/view_message/793105

http://comments.gmane.org/gmane.comp.apache.cxf.user/18316

1 голос
/ 12 сентября 2011

Эта проблема связана с подключением к вашей базе данных.Предположительно, где-то есть строка в OrientDB, и вы читаете ее, а затем пытаетесь использовать ее для выбора члена перечисления.

Я предполагаю, что в опубликованном вами коде переменная word приходит из данных в базе данных.Если это происходит откуда-то еще, то проблема в «другом месте».Если OrientDB по какой-то странной причине возвращает 'STRİNG' в качестве метаданных, чтобы сообщить вам тип чего-либо, то это действительно является дефектом в OrientDB.

Если эта строка на самом деле содержит İ, тогда настройка Eclipse не будетиметь какое-либо влияние на результаты.Вам нужно будет написать код для нормализации İ в I.

Если вы выгрузите содержимое слова в виде последовательности шестнадцатеричных значений для char s строки,Я думаю, ты увидишь, как я смотрю прямо на тебя.Вы должны изменить то, что находится в БД, чтобы иметь старый добрый я.

0 голосов
/ 12 сентября 2011

Обходной путь - набрать Type.ST и затем нажать Ctrl-пробел.Eclipse должен автоматически заполнить имя переменной без необходимости выяснять, как вводить прописную букву I без точки на турецкой клавиатуре.:)

...