
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880627 13f79535-47bb-0310-9956-ffa450edef68
198 lines
5.9 KiB
C++
198 lines
5.9 KiB
C++
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
/* $Rev$ $Date$ */
|
|
|
|
|
|
#include "interop.h"
|
|
|
|
using namespace std;
|
|
|
|
/*
|
|
* Ensure that SDO can read an XML file and
|
|
* write it back out again without changing the XML. The
|
|
* test XML files can be found in tuscany/interop/src/main/resources
|
|
*/
|
|
void Interop::test1ReadAndWriteXML(char *commonDir, char *filename)
|
|
{
|
|
int i,j;
|
|
|
|
cout << " \nC++ interop test1 - read and write XML: " << filename << endl;
|
|
try
|
|
{
|
|
DataFactoryPtr mdg = DataFactory::getDataFactory();
|
|
|
|
/**
|
|
* Get an XSD helper to load XSD information into the
|
|
* data factory
|
|
*/
|
|
XSDHelperPtr myXSDHelper = HelperProvider::getXSDHelper(mdg);
|
|
char fullxsdfilename[200];
|
|
strcpy (fullxsdfilename, commonDir );
|
|
strcat (fullxsdfilename, filename );
|
|
strcat (fullxsdfilename,".xsd");
|
|
cout << "Read the XSD file " << fullxsdfilename << endl;
|
|
myXSDHelper->defineFile(fullxsdfilename);
|
|
|
|
/**
|
|
* Check if there were any errors. The parse may still
|
|
* succeed, but errors indicate some elements were not
|
|
* understood
|
|
*/
|
|
if ((i = myXSDHelper->getErrorCount()) > 0)
|
|
{
|
|
cout << "XSD Loading reported some errors:" << endl;
|
|
for (j=0;j<i;j++)
|
|
{
|
|
const char *m = myXSDHelper->getErrorMessage(j);
|
|
if (m != 0) cout << m;
|
|
cout << endl;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Use the same data factory to load XML corresponding to
|
|
* data objects adhering to the previously loaded schema
|
|
*/
|
|
XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
|
|
char fullxmlfilename[200];
|
|
strcpy (fullxmlfilename, commonDir );
|
|
strcat (fullxmlfilename, filename );
|
|
strcat(fullxmlfilename,"-in.xml");
|
|
cout << "Read the XML file " << fullxmlfilename << endl;
|
|
XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile(fullxmlfilename, "http://www.apache.org/tuscany/interop");
|
|
|
|
/**
|
|
* Check if there were any errors. The parse may still
|
|
* succeed, but errors indicate some elements did not match
|
|
* the schema, or were malformed.
|
|
*
|
|
*/
|
|
if ((i = myXMLHelper->getErrorCount()) > 0)
|
|
{
|
|
cout << "XML Loading reported some errors:" << endl;
|
|
for (j=0;j<i;j++)
|
|
{
|
|
const char *m = myXMLHelper->getErrorMessage(j);
|
|
if (m != 0) cout << m;
|
|
cout << endl;
|
|
}
|
|
}
|
|
|
|
DataObjectPtr newdob = myXMLDocument->getRootDataObject();
|
|
cout << "Get current state of DataObject\n";
|
|
DataObjectPtr dc = newdob->getContainer();
|
|
|
|
if ( !dc )
|
|
{
|
|
cout << "There is no container" << endl;
|
|
}
|
|
else
|
|
{
|
|
cout <<" Container of type " << dc->getType().getName();
|
|
}
|
|
|
|
PropertyList pl = newdob->getInstanceProperties();
|
|
/*
|
|
// Print out the top level elements of the document
|
|
for ( int i=0; i < pl.size(); i++ )
|
|
{
|
|
const Property& p = pl[i];
|
|
if ( newdob->isSet(p))
|
|
{
|
|
if ( p.getType().isDataType() )
|
|
{
|
|
cout << "isDataType = TRUE \n";
|
|
cout << p.getName() << "=" << newdob->getCString(i) << endl;
|
|
}
|
|
else
|
|
{
|
|
cout << "isDataType = FALSE \n";
|
|
if ( p.isMany )
|
|
{
|
|
cout << "isMany = TRUE \n";
|
|
DataObjectList& dol= newdob->getList (i);
|
|
|
|
for ( int i=0; i < dol.size(); i++ )
|
|
{
|
|
cout << p.getName() << "[" << i << "] " << "=" << dol[i] << endl;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
cout << "isMany = FALSE \n";
|
|
cout << p.getName() << "=" << newdob->getDataObject(i) << endl;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
// write the XML element back out to a file
|
|
char outxmlfilename[200];
|
|
strcpy (outxmlfilename, filename );
|
|
strcat (outxmlfilename, "-cpp-out.xml" );
|
|
cout << "Write the XML file " << outxmlfilename << endl;
|
|
myXMLHelper->save(myXMLDocument, outxmlfilename);
|
|
|
|
}
|
|
catch (SDORuntimeException e)
|
|
{
|
|
cout << "Exception in interop test" << endl;
|
|
cout << e.getMessageText();
|
|
cout << e;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Ensure that SDO can read an XSD file and
|
|
* write it back out again without changing the XSD. The
|
|
* test XML files can be found in tuscany/interop/src/main/resources
|
|
*/
|
|
void Interop::test4ReadAndWriteXSD(char *commonDir, char *filename)
|
|
{
|
|
/**
|
|
* Get an XSD helper to load XSD information into the
|
|
* data factory
|
|
*/
|
|
|
|
DataFactoryPtr mdg = DataFactory::getDataFactory();
|
|
XSDHelperPtr myXSDHelper = HelperProvider::getXSDHelper(mdg);
|
|
|
|
char fullxsdfilename[200];
|
|
strcpy (fullxsdfilename, commonDir );
|
|
strcat (fullxsdfilename, filename );
|
|
strcat (fullxsdfilename,".xsd");
|
|
cout << "Read the XSD file " << fullxsdfilename << endl;
|
|
const char * URIOfRootType = myXSDHelper->defineFile(fullxsdfilename);
|
|
|
|
cout << "URI of root type" << URIOfRootType << endl;
|
|
|
|
/**
|
|
* Now write the XSD back again
|
|
*/
|
|
DataFactoryPtr df = myXSDHelper->getDataFactory();
|
|
TypeList typeList = df->getTypes();
|
|
|
|
char outxsdfilename[200];
|
|
strcpy (outxsdfilename, filename );
|
|
strcat(outxsdfilename,"-cpp-out.xsd");
|
|
cout << "Write an XSD back out " << outxsdfilename << endl;
|
|
myXSDHelper->generateFile(typeList, outxsdfilename);
|
|
|
|
}
|