6
votes

Oriendb ayant des problèmes avec Unicode, turc et enums

J'utilise une libéie qui a un type d'énumible avec des constitus comme ceux-ci; xxx pré>

pendant que je suis débogué dans Eclipse, j'ai eu une erreur: p>

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


9 commentaires

Est-ce que Eclipse autocomplete correctement lorsque vous appuyez sur ctrl + espace juste après la saisie type.str ?


En fait, je ne l'utilise pas en tapant directement. Il doit y avoir quelque chose comme une réflexion ou quelque chose qui l'utilise. Mais comme réponse de votre question, en tapant, il n'y a pas de problème. Ctrl + espace me donne type.string (correct, sans problème)


Peut-être qu'il y a un problème avec le code qui appelle réfléchi l'ENUM - où cette valeur vient-elle? Entrée utilisateur Formulaire de clavier turc uniquement ou un autre système qui envoie © au lieu de i ?


Merci pour votre effort. J'ai ajouté du code que j'ai utilisé, j'espère que cela donne quelques indices sur ce que je veux faire. Je travaille sur Eclipse et jusqu'à présent, je n'ai jamais vu un tel problème. Je sais qu'il pourrait y avoir une question de ce codage turc, mais celui-ci n'est que différent et que je ne peux même pas obtenir la ressource / premier point de cela. Ceci est juste bizarre, je pensais que cela doit être une sorte de «préférence», mais toutes les préférences que je connaissais montrent l'UTF-8, et rien ne vous aide.


Pourriez-vous ajouter la stacktrace pour l'exception, afin que nous puissions voir où il est appelé?


J'ai ajouté StackTrace et certaines sources des classes.


Le code qui définit «mot» serait la chose essentielle.


Peut-être, mais il n'y a pas de "mot" que j'ai mis en réalité. Qu'est-ce que ça peut être? Je veux dire que j'ai besoin de savoir si le problème est sur Eclipse ou sur Oriendb ou moi?


Dernière chose pour ce soir, je viens de vérifier tout le coffre Oriendb et je l'ai fouillé pour Str`ng - trouvé rien. Il doit être dans votre code ou vos fichiers de configuration quelque part.


4 Réponses :


0
votes

Un travail autour est de taper type.st , puis appuyez sur Ctrl-Space. Eclipse doit compléter automatiquement le nom de la variable sans que vous devez déterminer comment entrer une capitale sans dotes I sur un clavier turc. :)


1 commentaires

Il n'y a pas de problème à ce sujet. Il suffit d'appeler ça, et Eclipse obtient à tort.



1
votes

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

Je suppose que dans le code que vous avez affiché que la variable Word provient de données dans la base de données. Si cela vient d'ailleurs, le problème est le "ailleurs". Si ORIENTDB, pour une raison d'être étrange, renvoie «STRİNG» comme métadonnées pour vous indiquer le type de quelque chose, alors c'est vraiment un défaut de 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 © à i.

Si vous éliminez le contenu du «mot» comme une séquence de valeurs hexagonales pour le Char S de la chaîne, je pense que vous verrez votre İ VOUS VOIR VOUS. Vous devez changer ce qui est dans la DB pour avoir une vieille vieille i.


3 commentaires

Merci. Eh bien, il arrive même qu'il n'y a pas de données sur la base de données. Cette exception est lancée pendant la création de la base de données, je ne mets même rien. Ensuite, je devrais penser plus sur un problème de classes orientadb?


Il semble suggérer que le problème est dans les métadonnées Oriendb. Est chaîne l'un des types de données pris en charge? Utilisez-vous une version turque de Oriendb ou de son conducteur? Il est difficile d'imaginer quelque chose que cela glissant de base à travers la QA, mais à moins que vous ne gère les métadonnées (éventuellement un fichier de mappage?) C'est là que je regarderais.


Je n'utilise aucune version turque. Seuls mon système d'exploitation (Windows7) est Turkish (et peut-être que JVM reçoit des paramètres régionaux par défaut comme turc), mais je n'utilise pas la version turque d'un plugin Eclipse ni de tout emballage / bibliothèque, orientdb et son pilote non plus. Je pense qu'il n'y a aucun problème à propos de String DataType comme support. Et je ne gère pas les métadonnées / mappage, je ne suis que sur le début :)



6
votes

suis-je correct de supposer que vous exécutez ce programme à l'aide d'un local turc? Ensuite, il semble que le bug est en ligne 118 de ocommandexecuTorsqlcreatePreePerty: xxx

Vous devriez spécifier les paramètres régionaux dont les règles de boîtier supérieures doivent être utilisées, probablement locale.français Le paramètre à TUPPERCASE .


3 commentaires

Merci beaucoup. Je pense que la réponse la plus raisonnable est la vôtre pour l'instant. Mais comment ferais-je cela? Je n'utilise que cette bibliothèque et pourquoi cela ne se produit que de cette bibliothèque?


J'ai découvert le problème, pas à la ligne que vous avez pointée, mais très similaire. Il y a une méthode "TUPPERCASE ()" dans OCOMMANDEXECUTERSQLABRACT LINE 40. Cela me donne STROİNNG en tant que local turc censé donner. Je change mes paramètres régionaux comme locale.setlocale (locale.frish), ça fonctionne bien. Mais il y a un problème; Si je dois travailler avec des données turques, et si je n'ai pas de locale turc, ce sera un autre problème. Je suggère Oriendb pour résoudre ce problème en changeant leur code comme Touppercase (locale.frish); Nous verrons ce qui se passe :) merci beaucoup


J'ai utilisé cette solution et j'ai commis comme orientdb svn r3818. J'ai quitté l'opérateur SQL .Touppercase () SQL, car il est correct qui utilise les paramètres locaux pour travailler avec le texte turc. Lvc @



1
votes

Malheureusement, il est lié au contexte régional, lieu de votre système d'exploitation qui est turc.

deux travaux autour des options: xxx

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

Certaines liaisons associées:

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-utilisateurs/201203.mbox/%3cblu0-smtp115a66845faf6460@phx.gbl%3e

https://vaadin.com/forum / - / Message_boards / View_Message / 793105

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


0 commentaires