cpiCreateParserFactory
This function creates a single instance of the named parser factory in the integration node.
Purpose
It must be called only in the initialization function bipGetParserFactory, which is called when the LIL file is loaded by the integration node. If cpiCreateParserFactory is called at a later time, the results are unpredictable.
Syntax
CciFactory* cpiCreateParserFactory(
int* returnCode,
CciChar* name);
Parameters
- returnCode
- Receives the return code from the function (output). Possible return codes are:
- CCI_SUCCESS
- CCI_EXCEPTION
- CCI_FAILURE
- CCI_INV_FACTORY_NAME
- CCI_INV_OBJECT_NAME
- name
- Specifies the name of the factory being created (input).
Return values
If successful, the address of the parser factory object is returned. Otherwise, a value of zero (CCI_NULL_ADDR) is returned, and returnCode indicates the reason for the error.
Sample
This example is taken from the sample parser file BipSampPluginParser.c:
void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
{
/* Declare variables */
CciFactory* factoryObject;
int rc;
static CPI_VFT vftable = {CPI_VFT_DEFAULT};
/* Before we proceed we need to initialise all the static constants */
/* that may be used by the plug-in. */
initParserConstants();
/* Setup function table with pointers to parser implementation functions */
vftable.iFpCreateContext = cpiCreateContext;
vftable.iFpParseBufferEncoded = cpiParseBufferEncoded;
vftable.iFpParseFirstChild = cpiParseFirstChild;
vftable.iFpParseLastChild = cpiParseLastChild;
vftable.iFpParsePreviousSibling = cpiParsePreviousSibling;
vftable.iFpParseNextSibling = cpiParseNextSibling;
vftable.iFpWriteBufferEncoded = cpiWriteBufferEncoded;
vftable.iFpDeleteContext = cpiDeleteContext;
vftable.iFpSetElementValue = cpiSetElementValue;
vftable.iFpElementValue = cpiElementValue;
vftable.iFpNextParserClassName = cpiNextParserClassName;
vftable.iFpSetNextParserClassName = cpiSetNextParserClassName;
vftable.iFpNextParserEncoding = cpiNextParserEncoding;
vftable.iFpNextParserCodedCharSetId = cpiNextParserCodedCharSetId;
/* Create the parser factory for this plugin */
factoryObject = cpiCreateParserFactory(&rc, constParserFactory);
if (factoryObject) {
/* Define the classes of message supported by the factory */
cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable);
}
else {
/* Error: Unable to create parser factory */
}
/* Return address of this factory object to the integration node */
return(factoryObject);
}