Bonjour,
Je suis entrain de débogger le test "QxClientServer" dans QxOrm 1.2.6 beta 3 avec Qt 5.1, Qt Creator 2.7.2, MinGW 2.8 32bit, Boost 1.54 avec C++11 activé par défaut.
Tout compile très bien et fonctionne très bien incluant le test de QxBlog. Quand on arrive au test QxClientServer la compilation se termine avec succès mais lors d'une requête "get_current_date_time" il y a une erreur:
J'ai retracé cette erreur à la procédure de sérialization qx_save de QxTransaction, en particulier lorsque le serveur retourne le output:[QxOrm] qx::QxArchive<T>::toByteArray() -> Serialization error : 'unregistered class - derived class not registered or exported'
ASSERT: "bSerializeOk" in file include/QxSerialize/../../inl/QxSerialize/QxArchive.inl, line 214
Il semblerait que output_transaction_size soit de 0, et que output_parameter soit vide. Donc, j'ai vérfié si le server_infos_output était bel et bien calculé et c'est le cas. Par contre, il n'est pas introduit dans QxService correctement, parce que la fonction suivante semble invalide:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ar << boost::serialization::make_nvp("input_parameter", pInputParameter); ar << boost::serialization::make_nvp("output_parameter", pOutputParameter);
De ce que je vois, jusqu'à setOutputParameter(output), tout est beau. J'ai regardé dans QxServices<INPUT, OUTPUT> et on retrouve seulement ces deux fonctions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void server_infos::get_current_date_time() { server_infos_output_ptr output = server_infos_output_ptr(new server_infos_output()); output->current_date_time = QDateTime::currentDateTime(); setOutputParameter(output); setMessageReturn(true); }
Alors, il n'y a aucune fonction setOutputParameter() sauf dans IxService
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INPUT_ptr getInputParameter() const { return boost::static_pointer_cast<INPUT>(m_pInputParameter); } OUTPUT_ptr getOutputParameter() const { return boost::static_pointer_cast<OUTPUT>(m_pOutputParameter); }
Les fonctions prennent bel et bien un IxParameter_ptr en paramètre, alors c'est peut-être pour cette raison qu'on arrive pas a sérializer server_infos_output_ptr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void setInputParameter(IxParameter_ptr p) { m_pInputParameter = p; } void setOutputParameter(IxParameter_ptr p) { m_pOutputParameter = p; }
Est-ce que c'est voulu que ce QxService<INPUT,OUTPUT> ne contienne pas setInputParameter et setOutputParameter, et que QxTransaction ne se réfère qu'à IxParameter_ptr sans static_pointer_cast ? Je sais que QxTransaction n'est pas capable d'accéder au output parameter mais je ne comprend pas comment ce code a bien pu déjà fonctionner si j'ai trouvé ici une erreur aussi globale. Je semble près de la solution mais je suis un peut perdu ici.
Merci
Partager