You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by bu...@apache.org on 2002/07/03 14:48:27 UTC

DO NOT REPLY [Bug 10436] New: - Parser hanging when large number of optional elements

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10436>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10436

Parser hanging when large number of optional elements

           Summary: Parser hanging when large number of optional elements
           Product: Xerces2-J
           Version: 2.0.1
          Platform: Sun
        OS/Version: Solaris
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: JAXP
        AssignedTo: xerces-j-dev@xml.apache.org
        ReportedBy: home@andrewjasper.plus.com


When validating an XML message against a DTD the parser hangs and the CPU usage 
reaches 100%.

I've tried with both the Crimson and Xerces, DOM and SAX parsers.

I have a large number of optional elements in my DTD.
The XML and DTD and Java are attached.

I've tested this on Windows 2000, and Solaris 2.8.

When I increase the number of optional elements in one group element above 52 
the time taken to parse the XML starts to increase exponentially.
To the point where I have 60 optional elements it takes in excess of 15 seconds 
to parse one message.
At 50 optional elements there is no problem.  Above 60 optional elements I
might as well be hand writting the message out.

I know a solution is to split the optional elements between a number of group 
elements, as I've tried it - I have 50 optional elements in one group element 
and the remaining 25 in another group element, LINE_GENERAL_1 and 
LINE_GENERAL_2.

The other solution would be to switch validation off - which I don't want to do.

Thank you

Andrew
-------------------------------------------------------------------------------
The code:

    /**
     *  Construct XML Document and (optionally) validate against DTD.
     *
     *  @exception XMLException is thrown if there has been an XML parsing
error
     *  @param XMLbytes byte array representation of XML message
     *  @return XML Document
     */
    private Document validateXML(byte[] XMLbytes)
        throws ERPXMLException, ERPCFGException
    {
        Trace.entry("MessageHandler","validateXML", threadName);
        Document XMLdoc = null;

        try
        {
            // Construct the XML document from the XML data
            DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
            boolean doValidate = Boolean.valueOf(
                config.getParameterValue("VALIDATE_XML") ).booleanValue();

            factory.setValidating(doValidate);
            DocumentBuilder docBuilder = factory.newDocumentBuilder();

            Trace.printLine("After creating the document builder");

            ByteArrayInputStream byteStream =
                new ByteArrayInputStream( XMLbytes );

            Trace.printLine("After creating the byte array input stream");

            // Set up the error handling method for XML validation errors
            docBuilder.setErrorHandler(
                new org.xml.sax.ErrorHandler()
                {
                    public void fatalError(SAXParseException e) throws
SAXParseException
                    {
                        Trace.exit("MessageHandler","validateXML",
threadName);
                        // Throw a SAXException for fatal errors, no other
action is needed
                        throw e;
                    }

                    public void error(SAXParseException e) throws
SAXParseException
                    {
                        Trace.exit("MessageHandler","validateXML",
threadName);
                        // Throw a SAXException for validation errors, no
other action is needed
                        throw e;
                    }

                    public void warning(SAXParseException err)
                    {
                        // Report warnings
                        Trace.printLine( "Warning" + ", line " +
err.getLineNumber()
                                                   + ", uri " +
err.getSystemId() );
                        Trace.printLine( err.getMessage() );
                    }
                }
            );

            // Validate the document against the DTD(s) held in baseURI
            Trace.printLine("Before getting DTD_BASE_LOCATION");
            String baseURI = config.getParameterValue("DTD_BASE_LOCATION");
            Trace.printLine("Base location " + baseURI);
            Trace.printLine("Before parsing " + threadName);
            XMLdoc = docBuilder.parse(byteStream, baseURI);
            Trace.printLine("After parsing, " + threadName);
            Trace.printLine( "XML is valid!", threadName );
        }
        catch (Exception e)
        {
            Trace.exception(e);
            Trace.exit("MessageHandler","validateXML",threadName);
            ERPXMLException exp =
                new ERPXMLException("Failed to validate the XML: " +
                e.getMessage(),"XML_FAILED_TO_PARSE", "XML Parse failure" );
            throw exp;
        }
        Trace.exit("MessageHandler","validateXML", threadName);
        return XMLdoc;
    }
}
----------------------------------------------------------------------------
The DTD:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT ACCOUNTING_DATE (#PCDATA)>
<!ELEMENT ACCOUNT_SEGMENT (#PCDATA)>
<!ELEMENT ACCTS_PAY_CODE_COMBINATION_ID (#PCDATA)>
<!ELEMENT AMOUNT (#PCDATA)>
<!ELEMENT AMOUNT_APPLICABLE_TO_DISCOUNT (#PCDATA)>
<!ELEMENT AMOUNT_INCLUDES_TAX_FLAG (#PCDATA)>
<!ELEMENT AP_INVOICES_INTERFACE (MANDATORY_HEADER, HEADER_ATTRIBUTES?,
HEADER_GLOBAL_ATTRIBUTES?, HEADER_GENERAL?)>
<!ELEMENT MANDATORY_HEADER (INVOICE_ID)>
<!ELEMENT HEADER_ATTRIBUTES (ATTRIBUTE_CATEGORY?, ATTRIBUTE1?, ATTRIBUTE2?,
ATTRIBUTE3?, ATTRIBUTE4?, ATTRIBUTE5?, ATTRIBUTE6?, ATTRIBUTE7?,
ATTRIBUTE8?, ATTRIBUTE9?, ATTRIBUTE10?, ATTRIBUTE11?, ATTRIBUTE12?,
ATTRIBUTE13?, ATTRIBUTE14?, ATTRIBUTE15?)>
<!ELEMENT HEADER_GLOBAL_ATTRIBUTES (GLOBAL_ATTRIBUTE_CATEGORY?,
GLOBAL_ATTRIBUTE1?, GLOBAL_ATTRIBUTE2?, GLOBAL_ATTRIBUTE3?,
GLOBAL_ATTRIBUTE4?, GLOBAL_ATTRIBUTE5?, GLOBAL_ATTRIBUTE6?,
GLOBAL_ATTRIBUTE7?, GLOBAL_ATTRIBUTE8?, GLOBAL_ATTRIBUTE9?,
GLOBAL_ATTRIBUTE10?, GLOBAL_ATTRIBUTE11?, GLOBAL_ATTRIBUTE12?,
GLOBAL_ATTRIBUTE13?, GLOBAL_ATTRIBUTE14?, GLOBAL_ATTRIBUTE15?,
GLOBAL_ATTRIBUTE16?, GLOBAL_ATTRIBUTE17?, GLOBAL_ATTRIBUTE18?,
GLOBAL_ATTRIBUTE19?, GLOBAL_ATTRIBUTE20?)>
<!ELEMENT HEADER_GENERAL (INVOICE_NUM?, INVOICE_TYPE_LOOKUP_CODE?,
INVOICE_DATE?, PO_NUMBER?, VENDOR_ID?, VENDOR_NUM?, VENDOR_NAME?,
VENDOR_SITE_ID?, VENDOR_SITE_CODE?, INVOICE_AMOUNT?, INVOICE_CURRENCY_CODE?,
EXCHANGE_RATE?, EXCHANGE_RATE_TYPE?, EXCHANGE_DATE?, TERMS_ID?, TERMS_NAME?,
DESCRIPTION?, AWT_GROUP_ID?, AWT_GROUP_NAME?, LAST_UPDATE_DATE?,
LAST_UPDATED_BY?, LAST_UPDATE_LOGIN?, CREATION_DATE?, CREATED_BY?, STATUS?,
SOURCE?, GROUP_ID?, REQUEST_ID?, PAYMENT_CROSS_RATE_TYPE?,
PAYMENT_CROSS_RATE_DATE?, PAYMENT_CROSS_RATE?, PAYMENT_CURRENCY_CODE?,
WORKFLOW_FLAG?, DOC_CATEGORY_CODE?, VOUCHER_NUM?,
PAYMENT_METHOD_LOOKUP_CODE?, PAY_GROUP_LOOKUP_CODE?, GOODS_RECEIVED_DATE?,
INVOICE_RECEIVED_DATE?, GL_DATE?, ACCTS_PAY_CODE_COMBINATION_ID?,
USSGL_TRANSACTION_CODE?, EXCLUSIVE_PAYMENT_FLAG?, ORG_ID?,
AMOUNT_APPLICABLE_TO_DISCOUNT?, PREPAY_NUM?, PREPAY_DIST_NUM?,
PREPAY_APPLY_AMOUNT?, PREPAY_GL_DATE?, INVOICE_INCLUDES_PREPAY_FLAG?,
NO_XRATE_BASE_AMOUNT?, VENDOR_EMAIL_ADDRESS?, TERMS_DATE?)>
<!ELEMENT AP_INVOICE_LINES_INTERFACE (MANDATORY_LINES, LINE_ATTRIBUTES?,
LINE_GLOBAL_ATTRIBUTES?, LINE_GENERAL_1?, LINE_GENERAL_2?)>
<!ELEMENT MANDATORY_LINES (INVOICE_ID)>
<!ELEMENT LINE_ATTRIBUTES (ATTRIBUTE_CATEGORY?, ATTRIBUTE1?, ATTRIBUTE2?,
ATTRIBUTE3?, ATTRIBUTE4?, ATTRIBUTE5?, ATTRIBUTE6?, ATTRIBUTE7?,
ATTRIBUTE8?, ATTRIBUTE9?, ATTRIBUTE10?, ATTRIBUTE11?, ATTRIBUTE12?,
ATTRIBUTE13?, ATTRIBUTE14?, ATTRIBUTE15?)>
<!ELEMENT LINE_GLOBAL_ATTRIBUTES (GLOBAL_ATTRIBUTE_CATEGORY?,
GLOBAL_ATTRIBUTE1?, GLOBAL_ATTRIBUTE2?, GLOBAL_ATTRIBUTE3?,
GLOBAL_ATTRIBUTE4?, GLOBAL_ATTRIBUTE5?, GLOBAL_ATTRIBUTE6?,
GLOBAL_ATTRIBUTE7?, GLOBAL_ATTRIBUTE8?, GLOBAL_ATTRIBUTE9?,
GLOBAL_ATTRIBUTE10?, GLOBAL_ATTRIBUTE11?, GLOBAL_ATTRIBUTE12?,
GLOBAL_ATTRIBUTE13?, GLOBAL_ATTRIBUTE14?, GLOBAL_ATTRIBUTE15?,
GLOBAL_ATTRIBUTE16?, GLOBAL_ATTRIBUTE17?, GLOBAL_ATTRIBUTE18?,
GLOBAL_ATTRIBUTE19?, GLOBAL_ATTRIBUTE20?)>
<!ELEMENT LINE_GENERAL_1 (
INVOICE_LINE_ID?,
LINE_NUMBER?,
LINE_TYPE_LOOKUP_CODE?,
LINE_GROUP_NUMBER?,
AMOUNT?,
ACCOUNTING_DATE?,
DESCRIPTION?,
AMOUNT_INCLUDES_TAX_FLAG?,
PRORATE_ACROSS_FLAG?,
TAX_CODE?,

FINAL_MATCH_FLAG?,
PO_HEADER_ID?,
PO_NUMBER?,
PO_LINE_ID?,
PO_LINE_NUMBER?,
PO_LINE_LOCATION_ID?,
PO_SHIPMENT_NUM?,
PO_DISTRIBUTION_ID?,
PO_DISTRIBUTION_NUM?,
PO_UNIT_OF_MEASURE?,

INVENTORY_ITEM_ID?,
ITEM_DESCRIPTION?,
QUANTITY_INVOICED?,
SHIP_TO_LOCATION_CODE?,
UNIT_PRICE?,
DISTRIBUTION_SET_ID?,
DISTRIBUTION_SET_NAME?,
DIST_CODE_CONCATENATED?,
DIST_CODE_COMBINATION_ID?,
AWT_GROUP_ID?,

AWT_GROUP_NAME?,
LAST_UPDATED_BY?,
LAST_UPDATE_DATE?,
LAST_UPDATE_LOGIN?,
CREATED_BY?,
CREATION_DATE?,
PO_RELEASE_ID?,
RELEASE_NUM?,
ACCOUNT_SEGMENT?,
BALANCING_SEGMENT?,

COST_CENTER_SEGMENT?,
PROJECT_ID?,
TASK_ID?,
EXPENDITURE_TYPE?,
EXPENDITURE_ITEM_DATE?,
EXPENDITURE_ORGANIZATION_ID?,
PROJECT_ACCOUNTING_CONTEXT?,
PA_ADDITION_FLAG?,
PA_QUANTITY?,



USSGL_TRANSACTION_CODE?,
STAT_AMOUNT?,
TYPE_1099?,

INCOME_TAX_REGION?,
ASSETS_TRACKING_FLAG?,



PRICE_CORRECTION_FLAG?,
ORG_ID?,
RECEIPT_NUMBER?,
RECEIPT_LINE_NUMBER?,
MATCH_OPTION?,

)>

<!-- 60 tags -->

<!ELEMENT LINE_GENERAL_2 (



PACKING_SLIP?,
RCV_TRANSACTION_ID?,
PA_CC_AR_INVOICE_ID?,
PA_CC_AR_INVOICE_LINE_NUM?,
REFERENCE_1?,
REFERENCE_2?,
PA_CC_PROCESSED_CODE?,
TAX_RECOVERY_RATE?,
TAX_RECOVERY_OVERRIDE_FLAG?,
TAX_RECOVERABLE_FLAG?,

TAX_CODE_OVERRIDE_FLAG?,
TAX_CODE_ID?,
CREDIT_CARD_TRX_ID?,
AWARD_ID?)>

<!ELEMENT ASSETS_TRACKING_FLAG (#PCDATA)>
<!ELEMENT ATTRIBUTE1 (#PCDATA)>
<!ELEMENT ATTRIBUTE10 (#PCDATA)>
<!ELEMENT ATTRIBUTE11 (#PCDATA)>
<!ELEMENT ATTRIBUTE12 (#PCDATA)>
<!ELEMENT ATTRIBUTE13 (#PCDATA)>
<!ELEMENT ATTRIBUTE14 (#PCDATA)>
<!ELEMENT ATTRIBUTE15 (#PCDATA)>
<!ELEMENT ATTRIBUTE2 (#PCDATA)>
<!ELEMENT ATTRIBUTE3 (#PCDATA)>
<!ELEMENT ATTRIBUTE4 (#PCDATA)>
<!ELEMENT ATTRIBUTE5 (#PCDATA)>
<!ELEMENT ATTRIBUTE6 (#PCDATA)>
<!ELEMENT ATTRIBUTE7 (#PCDATA)>
<!ELEMENT ATTRIBUTE8 (#PCDATA)>
<!ELEMENT ATTRIBUTE9 (#PCDATA)>
<!ELEMENT ATTRIBUTE_CATEGORY (#PCDATA)>
<!ELEMENT AWARD_ID (#PCDATA)>
<!ELEMENT AWT_GROUP_ID (#PCDATA)>
<!ELEMENT AWT_GROUP_NAME (#PCDATA)>
<!ELEMENT BALANCING_SEGMENT (#PCDATA)>
<!ELEMENT CMH (ORIGAD, DESTAD, TRANCOD, REVNO, ENV, ORIGQM?, REPQM?)>
<!ELEMENT MSGBODY (AP_INVOICES_INTERFACE, AP_INVOICE_LINES_INTERFACE+)>
<!ELEMENT COST_CENTER_SEGMENT (#PCDATA)>
<!ELEMENT CREATED_BY (#PCDATA)>
<!ELEMENT CREATION_DATE (#PCDATA)>
<!ELEMENT CREDIT_CARD_TRX_ID (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ELEMENT DESTAD (#PCDATA)>
<!ELEMENT DISTRIBUTION_SET_ID (#PCDATA)>
<!ELEMENT DISTRIBUTION_SET_NAME (#PCDATA)>
<!ELEMENT DIST_CODE_COMBINATION_ID (#PCDATA)>
<!ELEMENT DIST_CODE_CONCATENATED (#PCDATA)>
<!ELEMENT DOC_CATEGORY_CODE (#PCDATA)>
<!ELEMENT ENV (#PCDATA)>
<!ELEMENT EXCHANGE_DATE (#PCDATA)>
<!ELEMENT EXCHANGE_RATE (#PCDATA)>
<!ELEMENT EXCHANGE_RATE_TYPE (#PCDATA)>
<!ELEMENT EXCLUSIVE_PAYMENT_FLAG (#PCDATA)>
<!ELEMENT EXPENDITURE_ITEM_DATE (#PCDATA)>
<!ELEMENT EXPENDITURE_ORGANIZATION_ID (#PCDATA)>
<!ELEMENT EXPENDITURE_TYPE (#PCDATA)>
<!ELEMENT FINAL_MATCH_FLAG (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE1 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE10 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE11 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE12 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE13 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE14 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE15 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE16 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE17 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE18 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE19 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE2 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE20 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE3 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE4 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE5 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE6 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE7 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE8 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE9 (#PCDATA)>
<!ELEMENT GLOBAL_ATTRIBUTE_CATEGORY (#PCDATA)>
<!ELEMENT GL_DATE (#PCDATA)>
<!ELEMENT GOODS_RECEIVED_DATE (#PCDATA)>
<!ELEMENT GROUP_ID (#PCDATA)>
<!ELEMENT INCOME_TAX_REGION (#PCDATA)>
<!ELEMENT INVENTORY_ITEM_ID (#PCDATA)>
<!ELEMENT INVOICE_AMOUNT (#PCDATA)>
<!ELEMENT INVOICE_CURRENCY_CODE (#PCDATA)>
<!ELEMENT INVOICE_DATE (#PCDATA)>
<!ELEMENT INVOICE_ID (#PCDATA)>
<!ELEMENT INVOICE_INCLUDES_PREPAY_FLAG (#PCDATA)>
<!ELEMENT INVOICE_LINE_ID (#PCDATA)>
<!ELEMENT INVOICE_NUM (#PCDATA)>
<!ELEMENT INVOICE_RECEIVED_DATE (#PCDATA)>
<!ELEMENT INVOICE_TYPE_LOOKUP_CODE (#PCDATA)>
<!ELEMENT ITEM_DESCRIPTION (#PCDATA)>
<!ELEMENT LAST_UPDATED_BY (#PCDATA)>
<!ELEMENT LAST_UPDATE_DATE (#PCDATA)>
<!ELEMENT LAST_UPDATE_LOGIN (#PCDATA)>
<!ELEMENT LINE_GROUP_NUMBER (#PCDATA)>
<!ELEMENT LINE_NUMBER (#PCDATA)>
<!ELEMENT LINE_TYPE_LOOKUP_CODE (#PCDATA)>
<!ELEMENT MATCH_OPTION (#PCDATA)>
<!ELEMENT NO_XRATE_BASE_AMOUNT (#PCDATA)>
<!ELEMENT ORG_ID (#PCDATA)>
<!ELEMENT ORIGAD (#PCDATA)>
<!ELEMENT ORIGQM (#PCDATA)>
<!ELEMENT PACKING_SLIP (#PCDATA)>
<!ELEMENT PAYMENT_CROSS_RATE (#PCDATA)>
<!ELEMENT PAYMENT_CROSS_RATE_DATE (#PCDATA)>
<!ELEMENT PAYMENT_CROSS_RATE_TYPE (#PCDATA)>
<!ELEMENT PAYMENT_CURRENCY_CODE (#PCDATA)>
<!ELEMENT PAYMENT_METHOD_LOOKUP_CODE (#PCDATA)>
<!ELEMENT PAY_GROUP_LOOKUP_CODE (#PCDATA)>
<!ELEMENT PA_ADDITION_FLAG (#PCDATA)>
<!ELEMENT PA_CC_AR_INVOICE_ID (#PCDATA)>
<!ELEMENT PA_CC_AR_INVOICE_LINE_NUM (#PCDATA)>
<!ELEMENT PA_CC_PROCESSED_CODE (#PCDATA)>
<!ELEMENT PA_QUANTITY (#PCDATA)>
<!ELEMENT PO_DISTRIBUTION_ID (#PCDATA)>
<!ELEMENT PO_DISTRIBUTION_NUM (#PCDATA)>
<!ELEMENT PO_HEADER_ID (#PCDATA)>
<!ELEMENT PO_LINE_ID (#PCDATA)>
<!ELEMENT PO_LINE_LOCATION_ID (#PCDATA)>
<!ELEMENT PO_LINE_NUMBER (#PCDATA)>
<!ELEMENT PO_NUMBER (#PCDATA)>
<!ELEMENT PO_RELEASE_ID (#PCDATA)>
<!ELEMENT PO_SHIPMENT_NUM (#PCDATA)>
<!ELEMENT PO_UNIT_OF_MEASURE (#PCDATA)>
<!ELEMENT PREPAY_APPLY_AMOUNT (#PCDATA)>
<!ELEMENT PREPAY_DIST_NUM (#PCDATA)>
<!ELEMENT PREPAY_GL_DATE (#PCDATA)>
<!ELEMENT PREPAY_NUM (#PCDATA)>
<!ELEMENT PRICE_CORRECTION_FLAG (#PCDATA)>
<!ELEMENT PROJECT_ACCOUNTING_CONTEXT (#PCDATA)>
<!ELEMENT PROJECT_ID (#PCDATA)>
<!ELEMENT PRORATE_ACROSS_FLAG (#PCDATA)>
<!ELEMENT QUANTITY_INVOICED (#PCDATA)>
<!ELEMENT RCV_TRANSACTION_ID (#PCDATA)>
<!ELEMENT RECEIPT_LINE_NUMBER (#PCDATA)>
<!ELEMENT RECEIPT_NUMBER (#PCDATA)>
<!ELEMENT REFERENCE_1 (#PCDATA)>
<!ELEMENT REFERENCE_2 (#PCDATA)>
<!ELEMENT RELEASE_NUM (#PCDATA)>
<!ELEMENT REPQM (#PCDATA)>
<!ELEMENT REQUEST_ID (#PCDATA)>
<!ELEMENT REVNO (#PCDATA)>
<!ELEMENT SHIP_TO_LOCATION_CODE (#PCDATA)>
<!ELEMENT SOURCE (#PCDATA)>
<!ELEMENT STATUS (#PCDATA)>
<!ELEMENT STAT_AMOUNT (#PCDATA)>
<!ELEMENT TASK_ID (#PCDATA)>
<!ELEMENT TAX_CODE (#PCDATA)>
<!ELEMENT TAX_CODE_ID (#PCDATA)>
<!ELEMENT TAX_CODE_OVERRIDE_FLAG (#PCDATA)>
<!ELEMENT TAX_RECOVERABLE_FLAG (#PCDATA)>
<!ELEMENT TAX_RECOVERY_OVERRIDE_FLAG (#PCDATA)>
<!ELEMENT TAX_RECOVERY_RATE (#PCDATA)>
<!ELEMENT TERMS_DATE (#PCDATA)>
<!ELEMENT TERMS_ID (#PCDATA)>
<!ELEMENT TERMS_NAME (#PCDATA)>
<!ELEMENT TRANCOD (#PCDATA)>
<!ELEMENT TYPE_1099 (#PCDATA)>
<!ELEMENT UNIT_PRICE (#PCDATA)>
<!ELEMENT USSGL_TRANSACTION_CODE (#PCDATA)>
<!ELEMENT VENDOR_EMAIL_ADDRESS (#PCDATA)>
<!ELEMENT VENDOR_ID (#PCDATA)>
<!ELEMENT VENDOR_NAME (#PCDATA)>
<!ELEMENT VENDOR_NUM (#PCDATA)>
<!ELEMENT VENDOR_SITE_CODE (#PCDATA)>
<!ELEMENT VENDOR_SITE_ID (#PCDATA)>
<!ELEMENT VOUCHER_NUM (#PCDATA)>
<!ELEMENT WORKFLOW_FLAG (#PCDATA)>
<!ELEMENT XMLMESSAGE (CMH, MSGBODY)>

----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------
The XML:
<!DOCTYPE XMLMESSAGE SYSTEM
"ap_invoices_interface.dtd"><XMLMESSAGE><CMH><ORIGAD>EASY0001</ORIGAD><DESTAD>OR
A.AP</DESTAD><TRANCOD>ADDPAYREQT</TRANCOD><REVNO>001</REVNO><ENV>T</ENV><ORIGQM>
THUB01QM</ORIGQM></CMH><MSGBODY><AP_INVOICES_INTERFACE><MANDATORY_HEADER><INVOIC
E_ID>1</INVOICE_ID></MANDATORY_HEADER><HEADER_GENERAL><INVOICE_NUM>41320</INVOIC
E_NUM><INVOICE_TYPE_LOOKUP_CODE>STANDARD</INVOICE_TYPE_LOOKUP_CODE><INVOICE_DATE
>2002/04/16 
00:00:00</INVOICE_DATE><INVOICE_AMOUNT>5412.04</INVOICE_AMOUNT><INVOICE_CURRENCY
_CODE>GBP</INVOICE_CURRENCY_CODE><SOURCE>EASY0001</SOURCE><PAYMENT_CURRENCY_CODE
>GBP</PAYMENT_CURRENCY_CODE></HEADER_GENERAL></AP_INVOICES_INTERFACE><AP_INVOICE
_LINES_INTERFACE><MANDATORY_LINES><INVOICE_ID>1</INVOICE_ID></MANDATORY_LINES><L
INE_GENERAL_1><INVOICE_LINE_ID>1</INVOICE_LINE_ID><LINE_NUMBER>1</LINE_NUMBER><L
INE_TYPE_LOOKUP_CODE>ITEM</LINE_TYPE_LOOKUP_CODE><AMOUNT>5412.04</AMOUNT><ACCOUN
TING_DATE>2002/04/16 
00:00:00</ACCOUNTING_DATE><DIST_CODE_COMBINATION_ID>1136</DIST_CODE_COMBINATION_
ID></LINE_GENERAL_1></AP_INVOICE_LINES_INTERFACE></MSGBODY></XMLMESSAGE>

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-dev-help@xml.apache.org