You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by gw...@apache.org on 2007/01/03 11:26:04 UTC
svn commit: r492097 - in /incubator/tuscany/cpp/sdo/runtime/core:
src/commonj/sdo/ParserErrorSetter.h src/commonj/sdo/SDOSchemaSAX2Parser.cpp
src/commonj/sdo/SDOSchemaSAX2Parser.h src/commonj/sdo/XSDHelperImpl.cpp
test/order2.txt
Author: gwinn
Date: Wed Jan 3 02:26:04 2007
New Revision: 492097
URL: http://svn.apache.org/viewvc?view=rev&rev=492097
Log:
TUSCANY-990
Modified:
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp
incubator/tuscany/cpp/sdo/runtime/core/test/order2.txt
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h?view=diff&rev=492097&r1=492096&r2=492097
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h Wed Jan 3 02:26:04 2007
@@ -27,10 +27,28 @@
#include "commonj/sdo/disable_warn.h"
#include <vector>
+#include <map>
+#include "libxml/xmlstring.h"
namespace commonj{
namespace sdo{
+template<class _Kty>
+struct HashCompare
+{
+ bool operator()(const _Kty& _Keyval1, const _Kty& _Keyval2) const
+ {
+ return strcmp((char*)_Keyval1, (char*)_Keyval2) < 0;
+ }
+};
+
+class SDOSchemaSAX2Parser;
+typedef std::map<xmlChar*, SDOSchemaSAX2Parser*, HashCompare<xmlChar*> > LocationParserMap;
+struct ParsedLocations: public LocationParserMap
+{
+ virtual ~ParsedLocations();
+};
+
/**
* The ParserErrorSetter builds a list of all the errors which
* occurred during a parse, so they can be displayed for the
@@ -43,6 +61,10 @@
virtual ~ParserErrorSetter();
virtual void setError(const char* message) = 0;
virtual void clearErrors() = 0;
+
+ SDOSchemaSAX2Parser* parseIfNot(const void* location, bool loadImportNamespace = false, const void* base=0);
+protected:
+ ParsedLocations parsedLocations;
};
};
};
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp?view=diff&rev=492097&r1=492096&r2=492097
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp Wed Jan 3 02:26:04 2007
@@ -532,70 +532,37 @@
}
- // ============================================================================
- // used by startInclude to try to locate the file
- // ============================================================================
-
- int SDOSchemaSAX2Parser::startSecondaryParse(
- SDOSchemaSAX2Parser& schemaParser,
- SDOXMLString& schemaLocation)
+ void SDOSchemaSAX2Parser::free(xmlChar* absoluteUri)
{
- int i,j,k;
- SDOXMLString sl = getCurrentFile();
-
- i = sl.lastIndexOf('/');
- j = sl.lastIndexOf('\\');
- if ((j > i) || (i < 0))i=j;
- if (i>=0)
- {
- sl = sl.substring(0,i+1) + schemaLocation;
- try {
- if (-1 != schemaParser.parse((const char *)sl))
- return 1;
- }
- catch (SDORuntimeException e)
- {
- }
- k = schemaLocation.lastIndexOf('/');
- j = schemaLocation.lastIndexOf('\\');
- if ((j > k) || (k < 0))k=j;
- if (k>=0)
- {
- sl = sl.substring(0,i+1) + schemaLocation.substring(0,k+1);
- try {
- if (-1 != schemaParser.parse((const char *)sl))
- return 1;
- }
- catch (SDORuntimeException e)
- {
- }
- }
- }
- try {
- if (-1 != schemaParser.parse((const char *)schemaLocation))
- return 1;
- }
- catch (SDORuntimeException e)
- {
- }
- k = schemaLocation.lastIndexOf('/');
- j = schemaLocation.lastIndexOf('\\');
- if ((j > k) || (k < 0))k=j;
- if (k>=0)
+ delete &schemaInfo;
+ delete this;
+ xmlFree(absoluteUri);
+ }
+ ParsedLocations::~ParsedLocations()
+ {
+ for( iterator iter = begin(); iter != end(); iter++ )
+ iter->second->free(iter->first);
+ }
+ SDOSchemaSAX2Parser* ParserErrorSetter::parseIfNot(const void* location, bool loadImportNamespace, const void* base)
+ {
+ xmlChar*const absoluteUri = xmlBuildURI((xmlChar*)location, (xmlChar*)base);
+ LocationParserMap::iterator iter = parsedLocations.find(absoluteUri);
+ if (parsedLocations.end() == iter)
{
- sl = schemaLocation.substring(0,k+1);
- try {
- if (-1 != schemaParser.parse((const char *)sl))
- return 1;
- }
- catch (SDORuntimeException e)
- {
- }
+ SDOSchemaSAX2Parser*const schemaParser = new SDOSchemaSAX2Parser(*new SchemaInfo(), this, loadImportNamespace);
+ try {
+ if (0 == schemaParser->parse((char*)absoluteUri))
+ return parsedLocations[ absoluteUri ] = schemaParser;
+ }
+ catch (SDORuntimeException e)
+ {}
+ schemaParser->free(absoluteUri);
+ return 0;
}
- return 0;
+ xmlFree(absoluteUri);
+ return iter->second;
}
-
// ============================================================================
// startInclude
// ============================================================================
@@ -610,24 +577,16 @@
if (!bInSchema) return;
- SchemaInfo schemaInf;
- SDOSchemaSAX2Parser schemaParser(schemaInf, (ParserErrorSetter*)setter);
-
TypeDefinitionsImpl* typedefs;
- SDOXMLString schemaLocation = attributes.getValue("schemaLocation");
SDOXMLString importNamespace = attributes.getValue("namespace");
+ SDOXMLString schemaLocation = attributes.getValue("schemaLocation");
if (!schemaLocation.isNull())
{
- if (startSecondaryParse(schemaParser,schemaLocation) == 0)
- {
- //
- // we were not able to start the parse
+ SDOSchemaSAX2Parser*const schemaParser = setter->parseIfNot((const char*)schemaLocation, false, getCurrentFile());
+ if (!schemaParser)
return;
- }
-
- typedefs = &schemaParser.getTypeDefinitions();
-
+ typedefs = &schemaParser->getTypeDefinitions();
}
else
{
@@ -636,17 +595,10 @@
&& localname.equalsIgnoreCase("import")
&& !importNamespace.isNull())
{
- try
- {
- SDOSchemaSAX2Parser sp(schemaInf, 0);
-
- sp.parse(importNamespace);
- typedefs = &sp.getTypeDefinitions();
- }
- catch (SDORuntimeException&)
- {
+ SDOSchemaSAX2Parser*const sp = setter->parseIfNot((const char*)importNamespace);
+ if (!sp)
return;
- }
+ typedefs = &sp->getTypeDefinitions();
}
else
{
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h?view=diff&rev=492097&r1=492096&r2=492097
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h Wed Jan 3 02:26:04 2007
@@ -84,6 +84,7 @@
friend std::istream& operator>>(std::istream& input, SDOSchemaSAX2Parser& parser);
friend std::istringstream& operator>>(std::istringstream& input, SDOSchemaSAX2Parser& parser);
+ void free(xmlChar* absoluteUri);
private:
@@ -118,10 +119,6 @@
const SDOXMLString& URI
);
- virtual int startSecondaryParse(
- SDOSchemaSAX2Parser& schemaParser,
- SDOXMLString& schemaLocation);
-
virtual void startInclude(
const SDOXMLString& localname,
const SDOXMLString& prefix,
@@ -213,7 +210,6 @@
SchemaInfo& schemaInfo;
-
PropertyDefinitionImpl currentProperty;
std::stack<PropertyDefinitionImpl> propertyStack;
Modified: incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp?view=diff&rev=492097&r1=492096&r2=492097
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp Wed Jan 3 02:26:04 2007
@@ -79,27 +79,18 @@
const char* XSDHelperImpl::defineFile(const char* schema, bool loadImportNamespace)
{
-
- SDOSchemaSAX2Parser schemaParser(schemaInfo, this, loadImportNamespace);
clearErrors();
- if (schemaParser.parse(schema) == 0)
+ SDOSchemaSAX2Parser*const schemaParser = parseIfNot(schema, loadImportNamespace);
+ if (schemaParser)
{
- defineTypes(schemaParser.getTypeDefinitions());
- return schemaInfo.getTargetNamespaceURI();
+ defineTypes(schemaParser->getTypeDefinitions());
+ return schemaParser->getTargetNamespaceURI();
}
return 0;
}
const char* XSDHelperImpl::defineFile(const SDOString& schema, bool loadImportNamespace)
{
-
- SDOSchemaSAX2Parser schemaParser(schemaInfo, this, loadImportNamespace);
- clearErrors();
- if (schemaParser.parse(schema.c_str()) == 0)
- {
- defineTypes(schemaParser.getTypeDefinitions());
- return schemaInfo.getTargetNamespaceURI();
- }
- return 0;
+ return defineFile(schema.c_str(), loadImportNamespace);
}
const char* XSDHelperImpl::define(std::istream& schema, bool loadImportNamespace)
Modified: incubator/tuscany/cpp/sdo/runtime/core/test/order2.txt
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sdo/runtime/core/test/order2.txt?view=diff&rev=492097&r1=492096&r2=492097
==============================================================================
--- incubator/tuscany/cpp/sdo/runtime/core/test/order2.txt (original)
+++ incubator/tuscany/cpp/sdo/runtime/core/test/order2.txt Wed Jan 3 02:26:04 2007
@@ -11,7 +11,6 @@
Property:value
Property:zip
Type:#fullpersoninfo
-Property:value
Property:address
Property:city
Property:country
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org