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: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]