[mapguide-trac] #1399: Upgrade to Xerces 3.1.0
MapGuide Open Source
trac_mapguide at osgeo.org
Wed Sep 22 17:41:35 EDT 2010
#1399: Upgrade to Xerces 3.1.0
-----------------------+----------------------------------------------------
Reporter: rohitr | Owner: brucedechant
Type: task | Status: new
Priority: low | Milestone: 2.3
Component: General | Version: 2.2.0
Severity: trivial | Keywords: xerces, upgrade, oem
External_id: |
-----------------------+----------------------------------------------------
Changes (by brucedechant):
* owner: => brucedechant
Old description:
> Xerces Upgrade
>
> This ticket is referenced with the Xerces upgrade outlined in
> [http://trac.osgeo.org/mapguide/wiki/MapGuideRfc101]
>
> changelogs for Xerces
> [http://xerces.apache.org/xerces-c/migrate-archive-3.html]
>
> Changes that concern us:-[[BR]]
>
> 1.> <xercesc/parsers/SAX2XMLReaderImpl.hpp> is no longer included by
> default.[[BR]]
>
> 2.> DOMWriter has been replaced as part of the the final DOM Level 3
> specification conformance work.[[BR]]
>
> 3.> <xercesc/dom/DOMLSSerializer.hpp>, <xercesc/dom/DOMConfiguration.hpp>
> and <xercesc/dom/DOMLSOutput.hpp> were added as part of the DOM Level 3
> specification conformance.
>
> Changes I have made:-[[BR]]
>
> 1.> included the relevant header files, as necessary.
>
> 2.> Since we don't have access to DOMWriter and the serialization works
> in a different way now I rewrote most of MgXmlUtil:ToBytes().
> {{{
> DOMLSSerializer* theSerializer = NULL;
> DOMLSOutput* theOutputDesc = NULL;
> DOMConfiguration* theDC = NULL;
> XMLFormatTarget* memTarget = NULL;
>
> }}}
>
> The new serializing class is now DOMLSSerializer. It outputs to streams
> defined by DOMLSOutput which now controls output parameters like
> encoding. Other configuration details are specified by the
> DOMConfiguration class. The Output stream is defined by an
> XMLFormatTarget which we will cast as in MemBufFormatTarget.
> {{{
> // get a serializer, an instance of DOMWriter
> XMLCh tempStr[100];
> XMLString::transcode("LS", tempStr, 99);
>
> DOMImplementation *impl =
> DOMImplementationRegistry::getDOMImplementation(tempStr);
> CHECKNULL(impl, L"MgXmlUtil.ToBytes");
>
> theSerializer = ((DOMImplementationLS*)impl)->createLSSerializer();
> theOutputDesc = ((DOMImplementationLS*)impl)->createLSOutput();
> CHECKNULL(theSerializer, L"MgXmlUtil.ToBytes");
> CHECKNULL(theOutputDesc, L"MgXmlUtil.ToBytes");
> theDC = theSerializer->getDomConfig();
> }}}
> DOMLSSerializer and DOMLSOutput are assigned using the DOMImplementation
> object impl, while DOMConfiguration initializes using the DOMLSSerializer
> object.
> {{{
> // set user specified output encoding
> XMLCh encodeStr[100];
> XMLString::transcode("UTF-8", encodeStr, 99);
> theOutputDesc->setEncoding(encodeStr);
> }}}
> Encoding is specified in DOMLSOutput now.
> {{{
> memTarget = new MemBufFormatTarget();
> theOutputDesc->setByteStream(memTarget);
>
> theSerializer->write(m_doc, theOutputDesc);
> }}}
>
> memTarget is initialized with a MemBufFormatTarget object and this is
> attached to the output stream of DOMLSOutput. Note that writenode has
> been replaced with just write.
> {{{
> INT32 bytesLen = (INT32)((MemBufFormatTarget*)memTarget)->getLen();
> BYTE_ARRAY_IN rawBytes =
> (BYTE_ARRAY_IN)((MemBufFormatTarget*)memTarget)->getRawBuffer();
> }}}
> We have to cast it as MemBufFormatTarget.
>
> 3.> In FilterUtil.h the namespace was declared by 'namespace
> xercesc_2_7'. I changed it to xerces_3_0 for it to work with the new
> xerces. Note that this is bad programming practice. I would change it as
> soon as I get a working compile. It should be declared as 'namespace
> XERCES_CPP_NAMESPACE_QUALIFIER'
New description:
Xerces Upgrade
This ticket is referenced with the Xerces upgrade outlined in
[http://trac.osgeo.org/mapguide/wiki/MapGuideRfc101]
changelogs for Xerces
[http://xerces.apache.org/xerces-c/migrate-archive-3.html]
Changes that concern us:-[[BR]]
1.> <xercesc/parsers/SAX2XMLReaderImpl.hpp> is no longer included by
default.[[BR]]
2.> DOMWriter has been replaced as part of the the final DOM Level 3
specification conformance work.[[BR]]
3.> <xercesc/dom/DOMLSSerializer.hpp>, <xercesc/dom/DOMConfiguration.hpp>
and <xercesc/dom/DOMLSOutput.hpp> were added as part of the DOM Level 3
specification conformance.
Changes I have made:-[[BR]]
1.> included the relevant header files, as necessary.
2.> Since we don't have access to DOMWriter and the serialization works in
a different way now I rewrote most of MgXmlUtil:ToBytes().
{{{
DOMLSSerializer* theSerializer = NULL;
DOMLSOutput* theOutputDesc = NULL;
DOMConfiguration* theDC = NULL;
XMLFormatTarget* memTarget = NULL;
}}}
The new serializing class is now DOMLSSerializer. It outputs to streams
defined by DOMLSOutput which now controls output parameters like encoding.
Other configuration details are specified by the DOMConfiguration class.
The Output stream is defined by an XMLFormatTarget which we will cast as
in !MemBufFormatTarget.
{{{
// get a serializer, an instance of DOMWriter
XMLCh tempStr[100];
XMLString::transcode("LS", tempStr, 99);
DOMImplementation *impl =
DOMImplementationRegistry::getDOMImplementation(tempStr);
CHECKNULL(impl, L"MgXmlUtil.ToBytes");
theSerializer = ((DOMImplementationLS*)impl)->createLSSerializer();
theOutputDesc = ((DOMImplementationLS*)impl)->createLSOutput();
CHECKNULL(theSerializer, L"MgXmlUtil.ToBytes");
CHECKNULL(theOutputDesc, L"MgXmlUtil.ToBytes");
theDC = theSerializer->getDomConfig();
}}}
DOMLSSerializer and DOMLSOutput are assigned using the DOMImplementation
object impl, while DOMConfiguration initializes using the DOMLSSerializer
object.
{{{
// set user specified output encoding
XMLCh encodeStr[100];
XMLString::transcode("UTF-8", encodeStr, 99);
theOutputDesc->setEncoding(encodeStr);
}}}
Encoding is specified in DOMLSOutput now.
{{{
memTarget = new MemBufFormatTarget();
theOutputDesc->setByteStream(memTarget);
theSerializer->write(m_doc, theOutputDesc);
}}}
memTarget is initialized with a !MemBufFormatTarget object and this is
attached to the output stream of DOMLSOutput. Note that writenode has been
replaced with just write.
{{{
INT32 bytesLen = (INT32)((MemBufFormatTarget*)memTarget)->getLen();
BYTE_ARRAY_IN rawBytes =
(BYTE_ARRAY_IN)((MemBufFormatTarget*)memTarget)->getRawBuffer();
}}}
We have to cast it as !MemBufFormatTarget.
3.> In !FilterUtil.h the namespace was declared by 'namespace
xercesc_2_7'. I changed it to xerces_3_0 for it to work with the new
xerces. Note that this is bad programming practice. I would change it as
soon as I get a working compile. It should be declared as 'namespace
XERCES_CPP_NAMESPACE_QUALIFIER'
--
--
Ticket URL: <http://trac.osgeo.org/mapguide/ticket/1399#comment:1>
MapGuide Open Source <http://mapguide.osgeo.org/>
MapGuide Open Source Internals
More information about the mapguide-trac
mailing list