You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by su...@apache.org on 2004/06/25 08:37:40 UTC
cvs commit: ws-axis/c/src/xml/xerces XMLParserXerces.cpp XercesHandler.cpp XercesHandler.h
susantha 2004/06/24 23:37:40
Modified: c configure.ac
c/src/xml Makefile.am
c/src/xml/expat XMLParserExpat.cpp
c/src/xml/xerces XMLParserXerces.cpp XercesHandler.cpp
XercesHandler.h
Log:
Adding changes to the Xerces wrapper to support xsd:any
Revision Changes Path
1.25 +2 -2 ws-axis/c/configure.ac
Index: configure.ac
===================================================================
RCS file: /home/cvs/ws-axis/c/configure.ac,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- configure.ac 8 Jun 2004 12:02:02 -0000 1.24
+++ configure.ac 25 Jun 2004 06:37:40 -0000 1.25
@@ -14,11 +14,11 @@
#if you need to build both axis_expat and axis_xerces libraries
-AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile src/xml/xerces/Makefile)
+#AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile src/xml/xerces/Makefile)
#if you need to build only axis_expat
-#AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile)
+AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile)
#if you need to build only axis_xerces
1.10 +2 -2 ws-axis/c/src/xml/Makefile.am
Index: Makefile.am
===================================================================
RCS file: /home/cvs/ws-axis/c/src/xml/Makefile.am,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Makefile.am 19 May 2004 04:48:59 -0000 1.9
+++ Makefile.am 25 Jun 2004 06:37:40 -0000 1.10
@@ -1,6 +1,6 @@
noinst_LTLIBRARIES = libxml.la
-SUBDIRS = expat xerces
-#SUBDIRS = expat
+#SUBDIRS = expat xerces
+SUBDIRS = expat
#SUBDIRS = xerces
AM_CPPFLAGS = $(CPPFLAGS)
1.7 +62 -62 ws-axis/c/src/xml/expat/XMLParserExpat.cpp
Index: XMLParserExpat.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/xml/expat/XMLParserExpat.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XMLParserExpat.cpp 24 Jun 2004 10:39:31 -0000 1.6
+++ XMLParserExpat.cpp 25 Jun 2004 06:37:40 -0000 1.7
@@ -36,7 +36,7 @@
{
m_pLastEvent = NULL;
m_Parser = XML_ParserCreateNS(NULL, NAMESPACESEPARATOR);
- m_pCurrentBuffer = 0;
+ m_pCurrentBuffer = 0;
}
XMLParserExpat::~XMLParserExpat()
@@ -60,7 +60,7 @@
pSE->m_Namespace = qn.uri ? qn.uri : "";
qn.mergeQNameString(NAMESPACESEPARATOR);
SimpleAttribute *pAt = NULL;
- for (int i = 0; attrs[i]; i += 2)
+ for (int i = 0; attrs[i]; i += 2)
{
qn.splitQNameString(attrs[i], NAMESPACESEPARATOR);
pAt = new SimpleAttribute();
@@ -93,7 +93,7 @@
pTemp[length] = '\0';
/* putting nul charactor so that chars can be used safely */
Event* pLastEvent;
- if (!m_Events.empty())
+ if (!m_Events.empty())
{
pLastEvent = m_Events.back();
if (CHARACTER_ELEMENT == pLastEvent->getType())
@@ -101,8 +101,8 @@
{
pLastEvent->m_NameOrValue += pTemp;
pTemp[length] = replacedchar;
- /* put back the character that was there before putting nul
- * charactor
+ /* put back the character that was there before putting nul
+ * charactor
*/
return;
}
@@ -114,7 +114,7 @@
/* put back the character that was there before putting nul charactor */
}
-void XMLParserExpat::startPrefixMapping(const XML_Ch *prefix,
+void XMLParserExpat::startPrefixMapping(const XML_Ch *prefix,
const XML_Ch *uri)
{
if (prefix && uri)
@@ -181,7 +181,7 @@
m_Events.push(m_pLastEvent);
nStatus = parseNext();
if (TRANSPORT_FAILED == nStatus) return NULL;
- if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty())
+ if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty())
//throw AxisParseException(SERVER_PARSE_TRANSPORT_FAILED);
return NULL;
}
@@ -192,19 +192,19 @@
{
case START_ELEMENT:
{
- for (list<SimpleAttribute*>::iterator it =
+ for (list<SimpleAttribute*>::iterator it =
((StartElement*)m_pLastEvent)->m_Attributes.begin()
; it != ((StartElement*)m_pLastEvent)->
m_Attributes.end(); it++)
{
- m_Element.m_pchAttributes[i+0] =
+ m_Element.m_pchAttributes[i+0] =
(*it)->m_Name.c_str();
if ((*it)->m_Namespace.empty())
- m_Element.m_pchAttributes[i+1] = 0;
- else
- m_Element.m_pchAttributes[i+1] =
+ m_Element.m_pchAttributes[i+1] = 0;
+ else
+ m_Element.m_pchAttributes[i+1] =
(*it)->m_Namespace.c_str();
- m_Element.m_pchAttributes[i+2] =
+ m_Element.m_pchAttributes[i+2] =
(*it)->m_Value.c_str();
i+=3;
}
@@ -214,26 +214,26 @@
}
/* no break */
case END_ELEMENT:
- if (((StartElement*)m_pLastEvent)->
+ if (((StartElement*)m_pLastEvent)->
m_Namespace.empty())
- m_Element.m_pchNamespace = 0;
- else
- m_Element.m_pchNamespace =
- ((StartElement*)m_pLastEvent)->m_Namespace.c_str();
+ m_Element.m_pchNamespace = 0;
+ else
+ m_Element.m_pchNamespace =
+ ((StartElement*)m_pLastEvent)->m_Namespace.c_str();
/* no break */
case CHARACTER_ELEMENT:
m_Element.m_pchNameOrValue = m_pLastEvent->
m_NameOrValue.c_str();
m_Element.m_type = type;
- if (!isCharData && (CHARACTER_ELEMENT == type))
- { /* ignorable white space */
- delete m_pLastEvent;
- m_pLastEvent = NULL;
- break;
- }
+ if (!isCharData && (CHARACTER_ELEMENT == type))
+ { /* ignorable white space */
+ delete m_pLastEvent;
+ m_pLastEvent = NULL;
+ break;
+ }
return &m_Element;
case START_PREFIX:
- m_NsStack[m_pLastEvent->m_NameOrValue] =
+ m_NsStack[m_pLastEvent->m_NameOrValue] =
((StartPrefix*)m_pLastEvent)->m_Namespace;
/* I think the same prifix cannot repeat ??? */
delete m_pLastEvent;
@@ -271,21 +271,21 @@
AXIS_TRANSPORT_STATUS iTransportStatus;
try
{
- m_pCurrentBuffer = (char*) XML_GetBuffer(m_Parser, EXPAT_BUFFER_SIZE);
- if (m_pCurrentBuffer)
- {
- iTransportStatus = m_pInputStream->getBytes(m_pCurrentBuffer, &nChars);
- if (nChars > 0)
- {
- if (XML_STATUS_ERROR == XML_ParseBuffer(m_Parser, nChars, false))
- m_nStatus = AXIS_FAIL;
- }
- if (TRANSPORT_FAILED == iTransportStatus) XML_ParseBuffer(m_Parser, 0, true);
+ m_pCurrentBuffer = (char*) XML_GetBuffer(m_Parser, EXPAT_BUFFER_SIZE);
+ if (m_pCurrentBuffer)
+ {
+ iTransportStatus = m_pInputStream->getBytes(m_pCurrentBuffer, &nChars);
+ if (nChars > 0)
+ {
+ if (XML_STATUS_ERROR == XML_ParseBuffer(m_Parser, nChars, false))
+ m_nStatus = AXIS_FAIL;
+ }
+ if (TRANSPORT_FAILED == iTransportStatus) XML_ParseBuffer(m_Parser, 0, true);
if(AXIS_FAIL == m_nStatus)
throw AxisParseException( SERVER_PARSE_PARSER_FAILED);
if(TRANSPORT_FAILED == iTransportStatus)
throw AxisParseException(SERVER_PARSE_TRANSPORT_FAILED);
- }
+ }
else throw AxisParseException(SERVER_PARSE_BUFFER_EMPTY);
/* end of parsing */
}
@@ -310,7 +310,7 @@
}
/**
- * Sets the new input stream and resets XMLParserExpat object state to
+ * Sets the new input stream and resets XMLParserExpat object state to
* initial state
*/
int XMLParserExpat::setInputStream(AxisIOStream* pInputStream)
@@ -318,7 +318,7 @@
m_pInputStream = pInputStream;
XML_ParserReset(m_Parser, NULL);
XML_SetUserData(m_Parser, this);
- XML_SetNamespaceDeclHandler(m_Parser, s_startPrefixMapping,
+ XML_SetNamespaceDeclHandler(m_Parser, s_startPrefixMapping,
s_endPrefixMapping);
XML_SetElementHandler(m_Parser, s_startElement, s_endElement);
XML_SetCharacterDataHandler(m_Parser, s_characters);
@@ -367,7 +367,7 @@
m_Events.push(m_pLastEvent);
nStatus = parseNext();
if (TRANSPORT_FAILED == nStatus) return NULL;
- if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty())
+ if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty())
return NULL;
}
else
@@ -377,19 +377,19 @@
{
case START_ELEMENT:
{
- for (list<SimpleAttribute*>::iterator it =
+ for (list<SimpleAttribute*>::iterator it =
((StartElement*)m_pLastEvent)->m_Attributes.begin()
; it != ((StartElement*)m_pLastEvent)->
m_Attributes.end(); it++)
{
- m_Element.m_pchAttributes[i+0] =
+ m_Element.m_pchAttributes[i+0] =
(*it)->m_Name.c_str();
if ((*it)->m_Namespace.empty())
- m_Element.m_pchAttributes[i+1] = 0;
- else
- m_Element.m_pchAttributes[i+1] =
+ m_Element.m_pchAttributes[i+1] = 0;
+ else
+ m_Element.m_pchAttributes[i+1] =
(*it)->m_Namespace.c_str();
- m_Element.m_pchAttributes[i+2] =
+ m_Element.m_pchAttributes[i+2] =
(*it)->m_Value.c_str();
i+=3;
}
@@ -399,12 +399,12 @@
}
/* no break */
case END_ELEMENT:
- if (((StartElement*)m_pLastEvent)->
+ if (((StartElement*)m_pLastEvent)->
m_Namespace.empty())
- m_Element.m_pchNamespace = 0;
- else
- m_Element.m_pchNamespace =
- ((StartElement*)m_pLastEvent)->m_Namespace.c_str();
+ m_Element.m_pchNamespace = 0;
+ else
+ m_Element.m_pchNamespace =
+ ((StartElement*)m_pLastEvent)->m_Namespace.c_str();
/* no break */
case CHARACTER_ELEMENT:
m_Element.m_pchNameOrValue = m_pLastEvent->
@@ -412,18 +412,18 @@
m_Element.m_type = type;
return &m_Element;
case START_PREFIX:
- m_NsStack[m_pLastEvent->m_NameOrValue] =
+ m_NsStack[m_pLastEvent->m_NameOrValue] =
((StartPrefix*)m_pLastEvent)->m_Namespace;
m_Element.m_pchNamespace = ((StartElement*)m_pLastEvent)->
m_Namespace.c_str();
m_Element.m_pchNameOrValue = ((StartElement*)m_pLastEvent)
- ->m_NameOrValue.c_str();
+ ->m_NameOrValue.c_str();
m_Element.m_type = type;
return &m_Element;
case END_PREFIX:
m_NsStack.erase(m_pLastEvent->m_NameOrValue);
m_Element.m_pchNameOrValue = ((StartElement*)m_pLastEvent)
- ->m_NameOrValue.c_str();
+ ->m_NameOrValue.c_str();
m_Element.m_type = type;
return &m_Element;
}
@@ -448,15 +448,15 @@
const XML_Ch* XMLParserExpat::getPrefix4NS(const XML_Ch* pcNS)
{
- for (map<AxisXMLString, AxisXMLString>::iterator it;
- it!=m_NsStack.end(); it++)
- {
- if ((*it).second == pcNS)
- {
- return (*it).first.c_str();
- }
- }
- return 0;
+ for (map<AxisXMLString, AxisXMLString>::iterator it;
+ it!=m_NsStack.end(); it++)
+ {
+ if ((*it).second == pcNS)
+ {
+ return (*it).first.c_str();
+ }
+ }
+ return 0;
}
1.7 +73 -30 ws-axis/c/src/xml/xerces/XMLParserXerces.cpp
Index: XMLParserXerces.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XMLParserXerces.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XMLParserXerces.cpp 24 Jun 2004 10:39:31 -0000 1.6
+++ XMLParserXerces.cpp 25 Jun 2004 06:37:40 -0000 1.7
@@ -71,41 +71,47 @@
int XMLParserXerces::getStatus()
{
- return m_Xhandler.getStatus();
+ return m_Xhandler.getStatus();
}
const AnyElement* XMLParserXerces::next(bool isCharData)
{
- bool bCanParseMore = false;
+ bool bCanParseMore = false;
try
{
- if(!m_bFirstParsed)
- {
- m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
- m_bFirstParsed = true;
- }
+ if(!m_bFirstParsed)
+ {
+ m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
+ m_bFirstParsed = true;
+ }
- m_Xhandler.freeElement();
- while (true)
- {
- AnyElement* elem = m_Xhandler.getAnyElement();
- if (!elem)
- {
- bCanParseMore = m_pParser->parseNext(m_ScanToken);
- elem = m_Xhandler.getAnyElement();
- }
- if (elem)
- {
- if (!isCharData && (CHARACTER_ELEMENT == elem->m_type))
- { /* ignorable white space */
- m_Xhandler.freeElement();
- continue;
- }
- return elem;
- }
- else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
- else if (!bCanParseMore) return NULL;
- }
+ m_Xhandler.freeElement();
+ while (true)
+ {
+ AnyElement* elem = m_Xhandler.getAnyElement();
+ if (!elem)
+ {
+ bCanParseMore = m_pParser->parseNext(m_ScanToken);
+ elem = m_Xhandler.getAnyElement();
+ }
+ if (elem)
+ {
+ if ((START_PREFIX == elem->m_type) ||
+ (END_PREFIX == elem->m_type))
+ {
+ m_Xhandler.freeElement();
+ continue;
+ }
+ if (!isCharData && (CHARACTER_ELEMENT == elem->m_type))
+ { /* ignorable white space */
+ m_Xhandler.freeElement();
+ continue;
+ }
+ return elem;
+ }
+ else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
+ else if (!bCanParseMore) return NULL;
+ }
}
catch(AxisParseException& e)
{
@@ -123,11 +129,48 @@
const AnyElement* XMLParserXerces::anyNext()
{
- return 0;
+ bool bCanParseMore = false;
+ try
+ {
+ if(!m_bFirstParsed)
+ {
+ m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
+ m_bFirstParsed = true;
+ }
+
+ m_Xhandler.freeElement();
+ while (true)
+ {
+ AnyElement* elem = m_Xhandler.getAnyElement();
+ if (!elem)
+ {
+ bCanParseMore = m_pParser->parseNext(m_ScanToken);
+ elem = m_Xhandler.getAnyElement();
+ }
+ if (elem)
+ {
+ return elem;
+ }
+ else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
+ else if (!bCanParseMore) return NULL;
+ }
+ }
+ catch(AxisParseException& e)
+ {
+ throw;
+ }
+ catch(AxisException& e)
+ {
+ throw;
+ }
+ catch(...)
+ {
+ throw;
+ }
}
const XML_Ch* XMLParserXerces::getPrefix4NS(const XML_Ch* pcNS)
{
- return 0;
+ return m_Xhandler.prefix4NS(pcNS);
}
1.3 +38 -23 ws-axis/c/src/xml/xerces/XercesHandler.cpp
Index: XercesHandler.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XercesHandler.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XercesHandler.cpp 24 May 2004 05:54:55 -0000 1.2
+++ XercesHandler.cpp 25 Jun 2004 06:37:40 -0000 1.3
@@ -30,7 +30,7 @@
{
m_nStatus = AXIS_SUCCESS;
Nelement = (AnyElement*)malloc(sizeof (AnyElement));
- m_bEndElementFollows = false;
+ m_bEndElementFollows = false;
}
XercesHandler::~XercesHandler()
@@ -48,7 +48,7 @@
unsigned int len = attrs.getLength();
unsigned int index;
- unsigned int i = 0;
+ unsigned int i = 0;
for (index = 0; index < len*3; index+=3)
{
Nelement->m_pchAttributes[index] =
@@ -57,7 +57,7 @@
XMLString::transcode(attrs.getURI(i));
Nelement->m_pchAttributes[index+2] =
XMLString::transcode(attrs.getValue(i));
- i++;
+ i++;
}
Nelement->m_pchAttributes[len*3]=NULL;
}
@@ -71,6 +71,19 @@
return NULL;
}
+const XML_Ch* XercesHandler::prefix4NS(const XML_Ch* pcNS)
+{
+ for (map<AxisXMLString, AxisXMLString>::iterator it;
+ it!=m_NsStack.end(); it++)
+ {
+ if ((*it).second == pcNS)
+ {
+ return (*it).first.c_str();
+ }
+ }
+ return 0;
+}
+
void XercesHandler::characters(const XMLCh* const chars,
const unsigned int length)
{
@@ -100,13 +113,13 @@
const XMLCh *const localname,
const XMLCh *const qname)
{
- if (m_pCurrElement && (START_ELEMENT == m_pCurrElement->m_type))
- /* it seems that both startElement and endElemen events fired within a
- single parseNext call */
- {
- m_bEndElementFollows = true;
- return;
- }
+ if (m_pCurrElement && (START_ELEMENT == m_pCurrElement->m_type))
+ /* it seems that both startElement and endElemen events fired within a
+ single parseNext call */
+ {
+ m_bEndElementFollows = true;
+ return;
+ }
m_pCurrElement = Nelement;
Nelement->m_type = END_ELEMENT;
Nelement->m_pchNameOrValue = XMLString::transcode(localname);
@@ -114,9 +127,10 @@
Nelement->m_pchAttributes[0] = NULL;
}
-void XercesHandler::startPrefixMapping(const XMLCh* const prefix,
+void XercesHandler::startPrefixMapping(const XMLCh* const prefix,
const XMLCh* const uri)
{
+ m_pCurrElement = Nelement;
Nelement->m_type = START_PREFIX;
Nelement->m_pchNameOrValue = XMLString::transcode(prefix);
Nelement->m_pchNamespace = XMLString::transcode(uri);
@@ -125,6 +139,7 @@
void XercesHandler::endPrefixMapping(const XMLCh* const prefix)
{
+ m_pCurrElement = Nelement;
Nelement->m_type = END_PREFIX;
Nelement->m_pchNameOrValue = XMLString::transcode(prefix);
m_NsStack.erase(XMLString::transcode(prefix));
@@ -134,17 +149,17 @@
{
if (m_pCurrElement)
{
- if (m_bEndElementFollows)
- /* free only attributes list if available */
- {
- m_bEndElementFollows = false;
- Nelement->m_type = END_ELEMENT;
- Nelement->m_pchAttributes[0] = NULL;
- }
- else
- /* free all inner strings */
- {
- m_pCurrElement = 0;
- }
+ if (m_bEndElementFollows)
+ /* free only attributes list if available */
+ {
+ m_bEndElementFollows = false;
+ Nelement->m_type = END_ELEMENT;
+ Nelement->m_pchAttributes[0] = NULL;
+ }
+ else
+ /* free all inner strings */
+ {
+ m_pCurrElement = 0;
+ }
}
}
1.4 +2 -9 ws-axis/c/src/xml/xerces/XercesHandler.h
Index: XercesHandler.h
===================================================================
RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XercesHandler.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XercesHandler.h 25 May 2004 03:47:34 -0000 1.3
+++ XercesHandler.h 25 Jun 2004 06:37:40 -0000 1.4
@@ -35,17 +35,10 @@
public :
void freeElement();
int getStatus(){return m_nStatus;};
- /* -----------------------------------------------------------------------
- * Constructors
- * -----------------------------------------------------------------------
- */
XercesHandler();
~XercesHandler();
-
-
-
- const XML_Ch* XercesHandler::ns4Prefix(const XML_Ch* prefix);
-
+ const XML_Ch* ns4Prefix(const XML_Ch* prefix);
+ const XML_Ch* prefix4NS(const XML_Ch* pcNS);
AnyElement* getAnyElement()
{
return m_pCurrElement;