ich weiß ich nerve so ganz langsam... aber ich habe schon wieder ein Problem *lol*
Nachdem ich jetzt die Schemavalidierung in meinem anderen Thread zum Laufen bekommen habe wollte ich jetzt eine Methode implementieren, der ich ein QByteArray mit XML-Daten übergebe und in der Methode sollen die Daten dann gehen das Schema geprüft werden. Soweit alles super toll
Folgendes Problem tritt auf:
Ich bekomme die Daten über einen TCP-Socket als QByteArray. So wie die Daten sind schicke ich diese an die folgende Methode meiner XMLValidator-Klasse:
Code: Alles auswählen
void XmlValidator::validate(const QByteArray xml)
{
qWarning() << "Bekommen: " << xml;
if ( schema.isValid() )
{
qWarning() << "A";
QXmlSchemaValidator validator( schema );
qWarning() << "B";
if ( validator.validate( xml ) )
{
qWarning() << "C1";
qDebug() << "Instanz ist gueltig";
} else
{
qWarning() << "C2";
qDebug() << "Instanz ist ungueltig";
}
} else
{
qWarning() << "D";
qDebug() << "Schema ist ungueltig";
}
}Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<p>Hello World</p>
Code: Alles auswählen
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<p>Hello World</p>
Code: Alles auswählen
validator.validate( xml ) Code: Alles auswählen
Bekommen: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<p>Hello World</p>
"
A
B
ASSERT failure in QMutexLocker: "QMutex pointer is misaligned", file ..\..\include\QtCore/../../../../../../ndk_buildrepos/qt-desktop/src/corelib/thread/qmutex.h, line 100
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
--edit--
Der stürzt übrigens auch dann ab, wenn ich ein "Hallo" als XML hinsende.
Was mache ich da bitte wieder falsch?
--edit2--
Selbst wenn ich es so mache wie in der Qt Reference Doku stürzt das dumme Ding ab! :
Code: Alles auswählen
void XmlValidator::validate(QByteArray xml)
{
QByteArray data("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<test></test>");
QBuffer buffer(&data);
buffer.open(QIODevice::ReadOnly);
if ( schema.isValid() )
{
qWarning() << "A";
QXmlSchemaValidator validator( schema );
qWarning() << "B";
if ( validator.validate( &buffer ) )
...
Es liegt wohl irgendwie am als Member angelegtem Schema in der Klasse. Wenn ich in der Methode selber statt des globalen 'schema' eine lokales anlege stürzt mein Programm nicht ab. Dies hier geht also:
Code: Alles auswählen
void XmlValidator::validate(QByteArray xml)
{
QXmlSchema tmp_schema;
file.reset();
if (tmp_schema.load( &file, QUrl::fromLocalFile(file.fileName()) ))
{
file.reset();
// Temp. Laden erfolgreich. Jetzt richtig
tmp_schema.load(&file, QUrl::fromLocalFile(file.fileName()));
}
if ( tmp_schema.isValid() )
{
qWarning() << "A";
QXmlSchemaValidator validator( tmp_schema );
qWarning() << "B";
if ( validator.validate( xml ) )
...