2011-09-11 8 views
6

私はこれらのようなconstを持つenum型のlibを使用しています。OrientDBがUnicode、Turkish、enumsに問題があります

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

私はEclipseでデバッグしていますが、私はエラーだ:私はトルコのシステムを使用していたよう

No enum const class Type.STRİNG 

を、私の作業上の問題がある>İが、これは、列挙型のconstであるとして私はすべての属性をUTF-8にしても、何もそれを得ることはできませんSTRINGはEclipseが探すべきものです。しかしそれはまだSTRİNGを探して見つけることができず、私はそれを使うことができません。私はそのために何をしなければならないのですか?

プロジェクト>プロパティ>リソース>テキストファイルのエンコードは現在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());

+0

'Type.STR'とタイプした直後に' CTRL + Space'を押すとEclipseが自動的に完了するのですか? –

+0

実際には直接入力することはありません。反射やそれを使うものがなければなりません。しかし、あなたの質問の答えとして、入力することで、問題はありません。 Ctrl + Spaceを押すとType.STRINGが得られます(問題なく、正しい) –

+0

おそらく、enumを反射的に呼び出すコードに問題があります。その値はどこから来ていますか?ユーザー入力は、トルコ語のみのキーボード、または 'I'の代わりに'İ'を送信する別のシステムを使用しますか? –

答えて

6

トルコ語のロケールを使用してこのプログラムを実行しているとしますか?

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

あなたはtoUpperCaseにパラメータとしてその上部ケーシングルールを使用すべきロケール、おそらくLocale.ENGLISHを指定する必要があります:バグがOCommandExecutorSQLCreatePropertyのライン118にあるようです。

+0

ありがとうございました。私は最も合理的な答えは今あなたのものだと思います。しかし、私はこれをどのようにして行いますか?私はこのライブラリのみを使用していますが、なぜこのライブラリにしかないのですか? –

+0

私はあなたが指摘したラインではなく、非常に似ている問題を発見しました。 OCommandExecuterSQLAbstractの40行目には "toUpperCase()"メソッドがあります。それは私にトルコ語のロケールとして与えられるSTRİNGを与えます。私は自分のロケールをLocale.setLocale(Locale.ENGLISH)として変更します。うまくいきます。しかし問題がある;私はトルコ語のデータで作業する必要がある場合、私はトルコ語のロケールを持っていない場合、それは別の問題になります。私はOrientDBに、UpperCase(Locale.ENGLISH)としてコードを変更することでこれを修正することを提案します。私たちは何が起こるか見るでしょう:)ありがとうございました –

+0

私はこのソリューションを使用し、OrientDB SVN r3818としてコミットしました。 トルカ語のテキストを扱うためにロケール設定を使用するのが正しいので、.toUpperCase()SQL演算子を残しました。 Lvc @ – Lvca

0

ワン周りの仕事がType.STを入力し、Ctrlキーを押しながらスペースキーを押すことです。 Eclipseは、トルコのキーボードでドットなしの大文字Iを入力する方法を理解することなく、変数名を自動補完する必要があります。 :)

+0

問題はありません。ちょうど何とかそれを呼び出すと、Eclipseは間違って取得します。 –

1

この問題は、データベース接続に関連しています。恐らくOrientDBにはどこかに文字列があり、それを読んでいて、それを使って列挙型のメンバーを選択しようとしています。

私はあなたが投稿したコードで、wordがデータベースのデータから来たものと仮定しています。それが他のどこかから来たのであれば、問題は「どこか他の人」です。 OrientDBが何らかの奇妙な理由で「STRİNG」をメタデータとして返して、あなたに何かのタイプを伝えたら、それは確かにOrientDBの欠陥です。

実際にその文字列にİが含まれていると、Eclipse設定は結果に影響しません。あなたはにコードを記述する必要があります私はあなたが、文字列のcharのための六角値のシーケンスとして「単語」の内容をダンプした場合、私はあなたがあなたのIを参照のことと思うI.

を正規化あなたを右から見る。 DBの内容を普通の古いものに変更する必要があります。

+0

ありがとうございます。まあ、実際にはデータベースにデータがなくても起こります。この例外は、データベースの作成中にスローされますが、何も配置しません。次にOrientDBクラスの問題についてもっと考えるべきでしょうか? –

+1

問題はOrientDBのメタデータにあると考えられます。 'String'はサポートされているデータ型の1つですか? OrientDBまたはそのドライバのトルコ語版を使用していますか?この基本的なものがQAを抜けるのは想像するのは難しいですが、私が見ているメタデータ(おそらくマッピングファイルですか?)を管理している場合を除きます。 – TMN

+0

トルコ語版を使用していません。私のOS(Windows7)はトルコ語(そして多分JVMはデフォルトのロケールをトルコ語として取得する)ですが、トルコ語版のEclipseプラグインやパッケージ/ライブラリ、OrientDBとそのドライバはどちらも使用しません。私は、サポートとしてStringデータ型について問題はないと思う。そして、私はメタデータ/マッピングを管理していません、私は始めにしかありません:) –

1

残念ながら、地域設定、トルコ語OSのロケールに関連しています。オプションの周り

二つの作業:

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ています。 Enumeration toUpperは例外のポイントです。

いくつかの関連リンク:

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

http://mail-archives.apache.org/mod_mbox/xmlbeans-user/201001.mbox/%[email protected]%3E

http://mail-archives.apache.org/mod_mbox/cxf-users/201203.mbox/%[email protected]%3E

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

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