Question

J'utilise une lib qui a un type d'énumération avec des constants comme ceux-ci;

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

Pendant que je débogue dans Eclipse, j'ai eu une erreur:

No enum const class Type.STRİNG

Comme j'utilise un système turc, il y a un problème sur le travail i> İ, mais comme il s'agit d'un const, même si je mets tous les attributs en tant que UTF-8, rien ne pourrait l'obtenir CHAÎNE DE CARACTÈRES est ce que l'éclipse devrait rechercher. Mais il cherche toujours CHAÎNE DE CARACTÈRES Et il ne peut pas trouver et je ne peux pas utiliser ça. Que dois-je faire pour ça?

Projet> Propriétés> Resouce> Le codage du fichier texte est maintenant UTF-8. Le problème se conserve.

ÉDITER: Plus d'informations peuvent donner quelques indices que je ne peux pas obtenir; Je travaille sur orientdb. Ceci est ma première tentative, donc je ne sais pas si le problème pourrait être sur les packages orientdb. Mais j'utilise beaucoup d'autres Libs, je n'ai jamais vu un tel problème. Il y a une énumération OType dans ce package, et j'essaie seulement de me connecter à la base de données.

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

Il n'y a plus de code que j'utilise encore. Base de données créée, mais je reçois ensuite le 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

Voici la classe Otype: http://code.google.com/p/orient/source/browse/trunk/core/src/main/java/com/orientechnologies/orient/core/metadata/schema/otype.java

Et autre classe; OCOMAMANDEXECUTORSQLLREATEPROPERTY:http://code.google.com/p/orient/source/browse/trunk/core/src/main/java/com/orientechnologie

La ligne 81 dit: type = OType.valueOf(word.toString());

Était-ce utile?

La solution

Ai-je raison de supposer que vous exécutez ce programme à l'aide d'un lieu turc? Ensuite, il semble que le bug est à la ligne 118 d'OcommanderExecutorsQlcreateProperty:

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

Vous devrez spécifier le lieu où les règles de boîtier supérieures doivent être utilisées, probablement Locale.ENGLISH comme le paramètre de toUpperCase.

Autres conseils

Ce problème est lié à votre connexion de base de données. Vraisemblablement, il y a une chaîne dans OrientDB quelque part, et vous la lisez, puis essayez de l'utiliser pour sélectionner un membre de l'énumération.

Je suppose dans le code que vous avez publié que la variable word vient des données dans la base de données. Si cela vient ailleurs, alors le problème est «ailleurs». Si orientdb, pour une raison étrange, renvoie «strons» comme métadonnées pour vous dire le type de quelque chose, alors c'est en effet un défaut dans orientdb.

Si cette chaîne contient réellement un ̇, aucun paramètre Eclipse n'aura aucun effet sur les résultats. Vous devrez écrire du code pour normaliser İ à moi

Si vous jetez le contenu du «mot» comme séquence de valeurs hexadécimales pour le charS de la chaîne, je pense que vous verrez vos İ regardant directement. Vous devez changer ce qu'il y a dans la base de données pour avoir un vieux.

Malheureusement, il est lié au cadre régional, par les paramètres régionaux de votre système d'exploitation qui est turc.

Deux options de travail:

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

J'ai créé des rapports de bogues pour XMLBeans, existe et Apache CXF pour le même problème. L'énumération Toupper est le point de l'exception.

Quelques liens connexes:

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

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

http://mail-archives.apache.org/mod_mbox/cxf-users/201203.mbox/%3CBLU0-smtp115a668459d9a0da11ea5faf6460@phx.gbl%3E

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

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

Une contribution consiste à taper Type.ST puis appuyez sur Ctrl-espace. Eclipse doit compléter automatiquement le nom de la variable sans que vous ayez à comprendre comment entrer dans un capital I sans point I sur un clavier turc. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top