Checking wellformedness of XML document
Hello,
Can anybody tell me how to check the well-formedness of an XML document in JAVA.
Thanks
Hi,
Being "well formed" just means matching start and end tags.
As far as I know.... all XML parsers check for that.
If you mean, valid, ie. checking an XML document against a DTD or XML Schema, then here's some source code I had lying around on my machine. Must've downloaded it from somewhere.
It compiles and runs.
regards,
Owen
// JAXP packages
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.util.*;
import java.io.*;
public class TestSax extends DefaultHandler
/** Constants used for JAXP 1.2 */
static final String JAXP_SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String W3C_XML_SCHEMA =
"http://www.w3.org/2001/XMLSchema";
static final String JAXP_SCHEMA_SOURCE =
"http://java.sun.com/xml/jaxp/properties/schemaSource";
/** A Hashtable with tag names as keys and Integers as values */
private Hashtable tags;
// Parser calls this once at the beginning of a document
public void startDocument() throws SAXException
tags = new Hashtable();
// Parser calls this for each element in a document
public void startElement (String namespaceURI,
String localName,
String qName,
Attributes atts)
throws SAXException
String key = localName;
Object value = tags.get(key);
if (value == null)
// Add a new entry
tags.put(key, new Integer(1));
else
// Get the current count and increment it
int count = ((Integer)value).intValue();
count++;
tags.put(key, new Integer(count));
// Parser calls this once after parsing a document
public void endDocument() throws SAXException
Enumeration e = tags.keys();
while (e.hasMoreElements())
String tag = (String)e.nextElement();
int count = ((Integer)tags.get(tag)).intValue();
System.out.println("Local Name \"" + tag + "\" occurs " + count + " times");
* Convert from a filename to a file URL.
private static String convertToFileURL(String filename)
// On JDK 1.2 and later, simplify this to:
// "path = file.toURL().toString()".
String path = new File(filename).getAbsolutePath();
if (File.separatorChar != '/')
path = path.replace(File.separatorChar, '/');
if (!path.startsWith("/"))
path = "/" + path;
return "file:" + path;
private static void usage()
System.err.println("Usage: TestXML [-options] <file.xml>");
System.err.println(" -dtd = DTD validation");
System.err.println(" -xsd | -xsdss <file.xsd> = W3C XML Schema validation using xsi: hints");
System.err.println(" in instance document or schema source <file.xsd>");
System.err.println(" -xsdss <file> = W3C XML Schema validation using schema source <file>");
System.err.println(" -usage or -help = this message");
System.exit(1);
public static void main (String[] args) throws Exception
String filename = null;
boolean dtdValidate = false;
boolean xsdValidate = false;
String schemaSource = null;
// Parse arguments
for (int i = 0; i < args.length; i++)
if (args.equals("-dtd"))
dtdValidate = true;
else if (args[i].equals("-xsd"))
xsdValidate = true;
else if (args[i].equals("-xsdss"))
if (i == args.length - 1)
usage();
xsdValidate = true;
schemaSource = args[++i];
else if (args[i].equals("-usage"))
usage();
else if (args[i].equals("-help"))
usage();
else
filename = args[i];
// Must be last arg
if (i != args.length - 1)
usage();
if (filename == null)
usage();
// There are several ways to parse a document using SAX and JAXP.
// We show one approach here. The first step is to bootstrap a
// parser. There are two ways: one is to use only the SAX API, the
// other is to use the JAXP utility classes in the
// javax.xml.parsers package. We use the second approach here
// because at the time of this writing it probably is the most
// portable solution for a JAXP compatible parser. After
// bootstrapping a parser/XMLReader, there are several ways to
// begin a parse. In this example, we use the SAX API.
// Create a JAXP SAXParserFactory and configure it
SAXParserFactory spf = SAXParserFactory.newInstance();
// Set namespaceAware to true to get a parser that corresponds to
// the default SAX2 namespace feature setting. This is necessary
// because the default value from JAXP 1.0 was defined to be false.
spf.setNamespaceAware(true);
// Validation part 1: set whether validation is on
spf.setValidating(dtdValidate || xsdValidate);
// Create a JAXP SAXParser
SAXParser saxParser = spf.newSAXParser();
// Validation part 2a: set the schema language if necessary
if (xsdValidate)
try
saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
catch (SAXNotRecognizedException x)
// This can happen if the parser does not support JAXP 1.2
System.err.println( "Error: JAXP SAXParser property not recognized: "
+ JAXP_SCHEMA_LANGUAGE);
System.err.println("Check to see if parser conforms to JAXP 1.2 spec.");
System.exit(1);
// Validation part 2b: Set the schema source, if any. See the JAXP
// 1.2 maintenance update specification for more complex usages of
// this feature.
if (schemaSource != null)
saxParser.setProperty(JAXP_SCHEMA_SOURCE, new File(schemaSource));
// Get the encapsulated SAX XMLReader
XMLReader xmlReader = saxParser.getXMLReader();
// Set the ContentHandler of the XMLReader
xmlReader.setContentHandler(new TestSax());
// Set an ErrorHandler before parsing
xmlReader.setErrorHandler(new MyErrorHandler(System.err));
// Tell the XMLReader to parse the XML document
xmlReader.parse(convertToFileURL(filename));
// Error handler to report errors and warnings
private static class MyErrorHandler implements ErrorHandler
/** Error handler output goes here */
private PrintStream out;
MyErrorHandler(PrintStream out)
this.out = out;
* Returns a string describing parse exception details
private String getParseExceptionInfo(SAXParseException spe)
String systemId = spe.getSystemId();
if (systemId == null)
systemId = "null";
String info = "URI=" + systemId +
" Line=" + spe.getLineNumber() +
": " + spe.getMessage();
return info;
// The following methods are standard SAX ErrorHandler methods.
// See SAX documentation for more info.
public void warning(SAXParseException spe) throws SAXException
out.println("Warning: " + getParseExceptionInfo(spe));
public void error(SAXParseException spe) throws SAXException
String message = "Error: " + getParseExceptionInfo(spe);
throw new SAXException(message);
public void fatalError(SAXParseException spe) throws SAXException
String message = "Fatal Error: " + getParseExceptionInfo(spe);
throw new SAXException(message);
Similar Messages
-
Validation of XML document % DTD
I need method which allows to check if an XML document is valid regards its DTD. is it possible?
I use JDOM.
thanks,I need method which allows to check if an XML
document is valid regards its DTD. is it possible?
I use JDOM.But it would be the parser that validates the XML against its DTD. JDOM is not a parser, it uses some other product (which you can specify, I believe) to do the parsing. So the answer would be yes, since parsers do exist that can validate against a DTD. -
How to check empty return from Get XML Document Data?
If Get XML Document Data doesn't return a result, how do you test it? String.isEmpty() doesn't do the trick, it still throws the exception "java.lang.NullPointerException". I can't seem to be able to match that up to a cisco exception with a "On Exception Goto" step (which I put right before the XML Document Data step). Any clues anyone?
Hi,
Try this:
variable=Get XML Document Data ()
if(variable == null) then
true
false
Gabriel. -
Generating an XML Document from an internal table in ABAP
Good day to all of you;
With ABAP, in the R/3 system, I'm trying to figure out a way to accomplish the following:
1) SELECT a set of Purchase Order data into an internal table.
2) Generate an XML document, containing the above data, using a specific schema.
I've been playing around with function module SAP_CONVERT_TO_XML_FORMAT which has the following interface:
CALL FUNCTION 'SAP_CONVERT_TO_XML_FORMAT'
EXPORTING
I_FIELD_SEPERATOR = ''
I_LINE_HEADER = ''
I_FILENAME = v_fname
I_APPL_KEEP = ''
I_XML_DOC_NAME = v_docname
IMPORTING
PE_BIN_FILESIZE = v_byte
TABLES
I_TAB_SAP_DATA = i_SapData
CHANGING
I_TAB_CONVERTED_DATA = i_XMLData
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
I'm uncertain as to whether or not the Export parameter, I_XML_DOC_NAME refers to some schema or definition and therefore have been excluding it. In doing so, the generated XML document seems to use the field name/type information from my itab for the tags.
If this function module requires an XML Document Name, how do I create one and where do I store it in R/3? If this is not the recommended solution, is anyone familiar with a way to load an XML schema, retrieve some data then have SAP generate an XML document using the schema?
Many thanks for any help available.
THai Phillips
Try with the following Code
This program exports an internal table to an XML file.
Report ZPRUEBA_MML_13 *
Export an internal table to XML document *
NO BORRAR ESTE CODIGO *
REPORT ZPRUEBA_MML_13.
PANTALLA SELECCION *
PARAMETERS: GK_RUTA TYPE RLGRAP-FILENAME.
PANTALLA SELECCION *
TYPE TURNOS *
TYPES: BEGIN OF TURNOS,
LU LIKE T552A-TPR01,
MA LIKE T552A-TPR01,
MI LIKE T552A-TPR01,
JU LIKE T552A-TPR01,
VI LIKE T552A-TPR01,
SA LIKE T552A-TPR01,
DO LIKE T552A-TPR01,
END OF TURNOS.
TYPE TURNOS *
TYPE SOCIO *
TYPES: BEGIN OF SOCIO,
NUMERO LIKE PERNR-PERNR,
REPOSICION LIKE PA0050-ZAUVE,
NOMBRE LIKE PA0002-VORNA,
TURNOS TYPE TURNOS,
END OF SOCIO.
TYPE SOCIO *
ESTRUCTURA ACCESOS *
DATA: BEGIN OF ACCESOS OCCURS 0,
SOCIO TYPE SOCIO,
END OF ACCESOS.
ESTRUCTURA ACCESOS *
START OF SELECTION *
START-OF-SELECTION.
PERFORM LLENA_ACCESOS.
PERFORM DESCARGA_XML.
END-OF-SELECTION.
END OF SELECTION *
FORM LLENA_ACCESOS *
FORM LLENA_ACCESOS.
REFRESH ACCESOS.
CLEAR ACCESOS.
MOVE: '45050' TO ACCESOS-SOCIO-NUMERO,
'MOISES MORENO' TO ACCESOS-SOCIO-NOMBRE,
'0' TO ACCESOS-SOCIO-REPOSICION,
'T1' TO ACCESOS-SOCIO-TURNOS-LU,
'T2' TO ACCESOS-SOCIO-TURNOS-MA,
'T3' TO ACCESOS-SOCIO-TURNOS-MI,
'T4' TO ACCESOS-SOCIO-TURNOS-JU,
'T5' TO ACCESOS-SOCIO-TURNOS-VI,
'T6' TO ACCESOS-SOCIO-TURNOS-SA,
'T7' TO ACCESOS-SOCIO-TURNOS-DO.
APPEND ACCESOS.
CLEAR ACCESOS.
MOVE: '45051' TO ACCESOS-SOCIO-NUMERO,
'RUTH PEÑA' TO ACCESOS-SOCIO-NOMBRE,
'0' TO ACCESOS-SOCIO-REPOSICION,
'T1' TO ACCESOS-SOCIO-TURNOS-LU,
'T2' TO ACCESOS-SOCIO-TURNOS-MA,
'T3' TO ACCESOS-SOCIO-TURNOS-MI,
'T4' TO ACCESOS-SOCIO-TURNOS-JU,
'T5' TO ACCESOS-SOCIO-TURNOS-VI,
'T6' TO ACCESOS-SOCIO-TURNOS-SA,
'T7' TO ACCESOS-SOCIO-TURNOS-DO.
APPEND ACCESOS.
ENDFORM.
FORM LLENA_ACCESOS *
FORM DESCARGA_XML *
FORM DESCARGA_XML.
DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,
M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,
G_IXML TYPE REF TO IF_IXML,
W_STRING TYPE XSTRING,
W_SIZE TYPE I,
W_RESULT TYPE I,
W_LINE TYPE STRING,
IT_XML TYPE DCXMLLINES,
S_XML LIKE LINE OF IT_XML,
W_RC LIKE SY-SUBRC.
DATA: XML TYPE DCXMLLINES.
DATA: RC TYPE SY-SUBRC,
BEGIN OF XML_TAB OCCURS 0,
D LIKE LINE OF XML,
END OF XML_TAB.
CLASS CL_IXML DEFINITION LOAD.
G_IXML = CL_IXML=>CREATE( ).
CHECK NOT G_IXML IS INITIAL.
M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).
CHECK NOT M_DOCUMENT IS INITIAL.
WRITE: / 'Converting DATA TO DOM 1:'.
CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
NAME = 'ACCESOS'
DATAOBJECT = ACCESOS[]
IMPORTING
DATA_AS_DOM = L_DOM
CHANGING
DOCUMENT = M_DOCUMENT
EXCEPTIONS
ILLEGAL_NAME = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
CHECK NOT L_DOM IS INITIAL.
W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).
IF W_RC IS INITIAL.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
W_RC.
ENDIF.
CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
DOCUMENT = M_DOCUMENT
IMPORTING
XML_AS_STRING = W_STRING
SIZE = W_SIZE
TABLES
XML_AS_TABLE = IT_XML
EXCEPTIONS
NO_DOCUMENT = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
LOOP AT IT_XML INTO XML_TAB-D.
APPEND XML_TAB.
ENDLOOP.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = W_SIZE
FILENAME = GK_RUTA
FILETYPE = 'BIN'
TABLES
DATA_TAB = XML_TAB
EXCEPTIONS
OTHERS = 10.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
FORM DESCARGA_XML *
Thanks & regards
Sreenivasulu P -
Hi All,
We have a scenario of FTP-->PI---> Webservice. While triggering the data in the FTP, it is failing in the PI with the below error
SOAP: response message contains an error XIAdapter/PARSING/ADAPTER.SOAP_EXCEPTION - soap fault: Server was unable to read request. ---> There is an error in XML document (1, 447). ---> Input string was not in a correct format.
Can you please help?Hi Raja- It seems to be a data quality issue.
Check for the value @ 1447 position in the xml message that you are trying to send to web service..
may be a date filed/decimal value which is not in expected format. -
Validating an XML document to a schema using ColdFusion
This is something I have never tried before. We created an XML Schema to define XML documents we expect to receive from various entities. When we receive the document, we would like to validate it before processing it. I think ColdFusion is up to this from reading the documentation, but we have not got anything working yet.
When we try and xmlParse() our test XML file against the XML schema we get the following error. When we use a web based XML validation tool and feed it the same XML file and schema it validates just fine.
An error occured while parsing an XML document.
[Error] :2:6: cvc-elt.1: Cannot find the declaration of element 'pur'.
The error occurred in D:\playground\warren\ppur_file_import.cfm: line 57
55 :
56 :
57 : <cfset xmldoc = XmlParse(ExpandPath(filepath), true, ExpandPath(validator)) />
58 : <cfdump var="#xmldoc#">
59 : <cfabort>
Searching for the error has not provided me any useful hints. Can anybody here?XML SCHEMA
<?xml version="1.0" encoding="iso-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Simple Types -->
<xs:simpleType name="RECORD_ID">
<xs:restriction base="xs:string">
<xs:pattern value="[AaBbCc]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="REPORT_MONTH">
<xs:restriction base="xs:integer">
<xs:pattern value="(0[1-9]|1[0-2])"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="REPORT_YEAR">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="MFG_FIRMNO">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{7}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LABEL_SEQ_NO">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{5}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="REVISION_NO">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="REG_FIRMNO">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{7}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="GROWER_ID">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{11}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CEDTS_IND">
<xs:restriction base="xs:string">
<xs:pattern value="[Ee]|[ ]"/>
<!-- needs to match E or a blank. -->
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="APPLIC_DT">
<xs:restriction base="xs:integer">
<xs:pattern value="(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])([0-9]{2})"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SITE_CODE">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="QUALIFY_CD">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PLANTING_SEQ">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ACRE_TREATED">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UNIT_TREATED">
<xs:restriction base="xs:string">
<xs:pattern value="[ATSCKUPatsckup]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AMT_PRD_USED">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{10}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UNIT_OF_MEAS">
<xs:restriction base="xs:string">
<xs:pattern value="LB|OZ|GA|QT|PT|KG|GR|LI|ML"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DOCUMENT_NO">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LINE_ITEM">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PROCESS_DT">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="BATCH_NO">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-5][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="COUNTY_CD">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-5][0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SECTION">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TOWNSHIP">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TSHIP_DIR">
<xs:restriction base="xs:string">
<xs:pattern value="[NSns]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="RANGE">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="RANGE_DIR">
<xs:restriction base="xs:string">
<xs:pattern value="[EWew]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="BASE_LN_MER">
<xs:restriction base="xs:string">
<xs:pattern value="[HMShms]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AER_GND_IND">
<xs:restriction base="xs:string">
<xs:pattern value="[AFGOafgo]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SITE_LOC_ID">
<xs:restriction base="xs:string">
<xs:pattern value="[-0-9 ]+"/>
<!-- Examples in files I checked
only had numeric characters and
a dash. The county contract doesn't
specify numeric-only, so letters may
be acceptable. I find no evidence of
any letters being used. -->
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ACRE_PLANTED">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UNIT_PLANTED">
<xs:restriction base="xs:string">
<xs:pattern value="[ATSCKUPatsckup]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="APPLIC_TM">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="APPLIC_CNT">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FUME_CD">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LICENSE_NO">
<xs:restriction base="xs:integer">
<xs:pattern value="[-0-9A-Za-z]{13}"/>
</xs:restriction>
</xs:simpleType>
<!-- end Simple Types -->
<!-- !!!!!!!!! Begin Abstract Types !!!!!!!!! -->
<xs:complexType name="application_data_abs" abstract="true">
<xs:sequence>
<xs:element name="GROWER_ID" type="GROWER_ID" />
<xs:element name="CEDTS_IND" type="CEDTS_IND" />
<xs:element name="APPLIC_DT" type="APPLIC_DT" />
<xs:element name="SITE_CODE" type="SITE_CODE" />
<xs:element name="QUALIFY_CD" type="QUALIFY_CD" />
<xs:element name="PLANTING_SEQ" type="PLANTING_SEQ" />
<xs:element name="ACRE_TREATED" type="ACRE_TREATED" />
<xs:element name="UNIT_TREATED" type="UNIT_TREATED" />
<xs:element name="AMT_PRD_USED" type="AMT_PRD_USED" />
<xs:element name="UNIT_OF_MEAS" type="UNIT_OF_MEAS" />
<xs:element name="DOCUMENT_NO" type="DOCUMENT_NO" />
<xs:element name="LINE_ITEM" type="LINE_ITEM" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="application_abs" abstract="true">
<xs:sequence>
<xs:element name="key_data" type="key_data" />
<xs:element name="product_data" type="product_data" />
</xs:sequence>
</xs:complexType>
<!-- !!!!!!!!! End Abstract Types !!!!!!!!! -->
<!-- !!!!!!!!! Start Complex Types !!!!!!!!! -->
<xs:complexType name="product_data">
<xs:sequence>
<xs:element name="MFG_FIRMNO" type="MFG_FIRMNO" />
<xs:element name="LABEL_SEQ_NO" type="LABEL_SEQ_NO"/>
<xs:element name="REVISION_NO" type="REVISION_NO" />
<xs:element name="REG_FIRMNO" type="REG_FIRMNO" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="key_data">
<xs:sequence>
<xs:element name="RECORD_ID" type="RECORD_ID" />
<xs:element name="COUNTY_KEY">
<!--
The optional COUNTY_ID field would be used by
the Counties to include their internal
record identifier. This would allow DPR
to reference a county's internal record ID
in the event of data inconsistencies.
-->
</xs:element>
<xs:element name="REPORT_MONTH" type="REPORT_MONTH" />
<xs:element name="REPORT_YEAR" type="REPORT_YEAR" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="fileInfo">
<xs:sequence>
<xs:element name="PROCESS_DT" type="PROCESS_DT" />
<xs:element name="BATCH_NO" type="BATCH_NO" />
<xs:element name="COUNTY_CD" type="COUNTY_CD" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="mtrs_data">
<xs:sequence>
<xs:element name="SECTION" type="SECTION" />
<xs:element name="TOWNSHIP" type="TOWNSHIP" />
<xs:element name="TSHIP_DIR" type="TSHIP_DIR" />
<xs:element name="RANGE" type="RANGE" />
<xs:element name="RANGE_DIR" type="RANGE_DIR" />
<xs:element name="BASE_LN_MER" type="BASE_LN_MER" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ag_application_data">
<xs:complexContent>
<xs:extension base="application_data_abs">
<xs:sequence>
<xs:element name="AER_GND_IND" type="AER_GND_IND" />
<xs:element name="SITE_LOC_ID" type="SITE_LOC_ID" />
<xs:element name="ACRE_PLANTED" type="ACRE_PLANTED" />
<xs:element name="UNIT_PLANTED" type="UNIT_PLANTED" />
<xs:element name="APPLIC_TM" type="APPLIC_TM" />
<xs:element name="FUME_CD" type="FUME_CD" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="nonag_application_data">
<xs:complexContent>
<xs:extension base="application_data_abs">
<xs:sequence>
<xs:element name="APPLIC_CNT" type="APPLIC_CNT" />
<xs:element name="LICENSE_NO" type="LICENSE_NO" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--- "Ag" -->
<!--
Type A:
Data that would appear on individual lines
in the old A type
(F file type, agricultural job report)
Type B:
Data that would appear on individual lines
in the old B type
(F file type, agricultural monthly production summary)
-->
<xs:complexType name="ag_application">
<xs:complexContent>
<xs:extension base="application_abs">
<xs:sequence>
<xs:element name="mtrs_data" type="mtrs_data" />
<xs:element name="application_data" type="ag_application_data" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--- "Non_Ag" -->
<!--
Data that would appear on individual lines
in the old C type
(C file type, non-agricultural monthly summary)
-->
<xs:complexType name="nonag_application">
<xs:complexContent>
<xs:extension base="application_abs">
<xs:sequence>
<xs:element name="application_data" type="nonag_application_data" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- The individual lines of data that are transmitted. -->
<xs:complexType name="data_lines">
<xs:sequence>
<xs:element name="Non_Ag" type="nonag_application" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Ag" type="ag_application" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- !!!!!!!!! End Complex Types !!!!!!!!! -->
<xs:element name="pur">
<xs:complexType>
<xs:sequence>
<xs:element name="County" minOccurs="0" maxOccurs="1">
<!--
Tag for counties to put county-specific
data in (eg, their batch number, timestamp,
contact info, etc)
-->
</xs:element>
<!-- File: information specific to the file -->
<xs:element name="File" type="fileInfo" minOccurs="1" maxOccurs="1"/>
<!-- Data: lines of data transmitted -->
<xs:element name="Data" type="data_lines" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> -
Xml document validation using Schema
I want to validate XML Document using XML Schema...
does any body have an idea how to do it.
Every time i m running my java file by using different XML FILE AND XSD FILE in command line i m getting same error.
error is:
Exception in thread "main" org.xml.sax.SAXException: Error: URI=null Line=2: s4s-elt-schema-ns: The namespace of element 'catalog' must be from the schema name space.
at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1115)
at SAXLocalNameCount.main(SAXLocalNameCount.java:117)
Below is my java code with xml file and schema file.
plz get back to me as soon as possible it is urgent.
thanx
java File
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.util.*;
import java.io.*;
public class SAXLocalNameCount extends DefaultHandler {
/** Constants used for JAXP 1.2 */
static final String JAXP_SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String W3C_XML_SCHEMA =
"http://www.w3.org/2001/XMLSchema";
static final String JAXP_SCHEMA_SOURCE =
"http://java.sun.com/xml/jaxp/properties/schemaSource";
/** A Hashtable with tag names as keys and Integers as values */
private Hashtable tags;
// Parser calls this once at the beginning of a document
public void startDocument() throws SAXException {
tags = new Hashtable();
// Parser calls this for each element in a document
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts)
throws SAXException
String key = localName;
Object value = tags.get(key);
if (value == null) {
// Add a new entry
tags.put(key, new Integer(1));
} else {
// Get the current count and increment it
int count = ((Integer)value).intValue();
count++;
tags.put(key, new Integer(count));
System.out.println("TOTAL NUMBER OF TAG IN FILE = "+count);
// Parser calls this once after parsing a document
public void endDocument() throws SAXException {
Enumeration e = tags.keys();
while (e.hasMoreElements()) {
String tag = (String)e.nextElement();
int count = ((Integer)tags.get(tag)).intValue();
System.out.println("Local Name \"" + tag + "\" occurs " + count
+ " times");
static public void main(String[] args) throws Exception {
String filename = null;
String schemaSource = null;
// Parse arguments
schemaSource = args[0];
filename = args[1];
// Create a JAXP SAXParserFactory and configure it
SAXParserFactory spf = SAXParserFactory.newInstance();
// Set namespaceAware to true to get a parser that corresponds to
// the default SAX2 namespace feature setting. This is necessary
// because the default value from JAXP 1.0 was defined to be false.
//spf.setNamespaceAware(true);
// Validation part 1: set whether validation is on
spf.setValidating(true);
// Create a JAXP SAXParser
SAXParser saxParser = spf.newSAXParser();
System.out.println(" saxparser "+saxParser);
// Validation part 2a: set the schema language if necessary
if (true) {
try {
saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
System.out.println(" saxparser ");
} catch (SAXNotRecognizedException x) {
// This can happen if the parser does not support JAXP 1.2
System.err.println(
"Error: JAXP SAXParser property not recognized: "
+ JAXP_SCHEMA_LANGUAGE);
System.err.println(
"Check to see if parser conforms to JAXP 1.2 spec.");
System.exit(1);
// Validation part 2b: Set the schema source, if any. See the JAXP
// 1.2 maintenance update specification for more complex usages of
// this feature.
if (schemaSource != null) {
saxParser.setProperty(JAXP_SCHEMA_SOURCE, new File(schemaSource));
System.out.println(" saxparser 123");
// Get the encapsulated SAX XMLReader
XMLReader xmlReader = saxParser.getXMLReader();
System.out.println(" XML READER "+xmlReader);
// Set the ContentHandler of the XMLReader
xmlReader.setContentHandler(new SAXLocalNameCount());
System.out.println(" XML READER 345 ");
// Set an ErrorHandler before parsing
xmlReader.setErrorHandler(new MyErrorHandler(System.err));
System.out.println(" XML READER 67878 ");
// Tell the XMLReader to parse the XML document
xmlReader.parse(filename);
System.out.println(" XML READER ");
// Error handler to report errors and warnings
private static class MyErrorHandler implements ErrorHandler {
/** Error handler output goes here */
private PrintStream out;
MyErrorHandler(PrintStream out) {
this.out = out;
* Returns a string describing parse exception details
private String getParseExceptionInfo(SAXParseException spe) {
String systemId = spe.getSystemId();
if (systemId == null) {
systemId = "null";
String info = "URI=" + systemId +
" Line=" + spe.getLineNumber() +
": " + spe.getMessage();
return info;
// The following methods are standard SAX ErrorHandler methods.
// See SAX documentation for more info.
public void warning(SAXParseException spe) throws SAXException {
out.println("Warning: " + getParseExceptionInfo(spe));
public void error(SAXParseException spe) throws SAXException {
String message = "Error: " + getParseExceptionInfo(spe);
throw new SAXException(message);
public void fatalError(SAXParseException spe) throws SAXException {
String message = "Fatal Error: " + getParseExceptionInfo(spe);
throw new SAXException(message);
xml file(books.xml)
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
<book id="bk104">
<author>Corets, Eva</author>
<title>Oberon's Legacy</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-03-10</publish_date>
<description>In post-apocalypse England, the mysterious
agent known only as Oberon helps to create a new life
for the inhabitants of London. Sequel to Maeve
Ascendant.</description>
</book>
<book id="bk105">
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-09-10</publish_date>
<description>The two daughters of Maeve, half-sisters,
battle one another for control of England. Sequel to
Oberon's Legacy.</description>
</book>
<book id="bk106">
<author>Randall, Cynthia</author>
<title>Lover Birds</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-09-02</publish_date>
<description>When Carla meets Paul at an ornithology
conference, tempers fly as feathers get ruffled.</description>
</book>
<book id="bk107">
<author>Thurman, Paula</author>
<title>Splish Splash</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-11-02</publish_date>
<description>A deep sea diver finds true love twenty
thousand leagues beneath the sea.</description>
</book>
<book id="bk108">
<author>Knorr, Stefan</author>
<title>Creepy Crawlies</title>
<genre>Horror</genre>
<price>4.95</price>
<publish_date>2000-12-06</publish_date>
<description>An anthology of horror stories about roaches,
centipedes, scorpions and other insects.</description>
</book>
<book id="bk109">
<author>Kress, Peter</author>
<title>Paradox Lost</title>
<genre>Science Fiction</genre>
<price>6.95</price>
<publish_date>2000-11-02</publish_date>
<description>After an inadvertant trip through a Heisenberg
Uncertainty Device, James Salway discovers the problems
of being quantum.</description>
</book>
<book id="bk110">
<author>O'Brien, Tim</author>
<title>Microsoft .NET: The Programming Bible</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-09</publish_date>
<description>Microsoft's .NET initiative is explored in
detail in this deep programmer's reference.</description>
</book>
<book id="bk111">
<author>O'Brien, Tim</author>
<title>MSXML3: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-01</publish_date>
<description>The Microsoft MSXML3 parser is covered in
detail, with attention to XML DOM interfaces, XSLT processing,
SAX and more.</description>
</book>
<book id="bk112">
<author>Galos, Mike</author>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>49.95</price>
<publish_date>2001-04-16</publish_date>
<description>Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+ are
integrated into a comprehensive development
environment.</description>
</book>
</catalog>
(books.xsd)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="catalog">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="book" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="genre" type="xsd:string"/>
<xsd:element name="price" type="xsd:float"/>
<xsd:element name="publish_date" type="xsd:date"/>
<xsd:element name="description" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>Add xmlns:xsi attribute to the root element <catalog>.
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='books.xsd'> -
How to set the root path of XML document when calling Inserting procedure
Hi,
I was create a procedure to insert XML Document in to DBMS Tables, but i am not able to set the Start root element in calling procedure.
My calling procedure is
exec insXmldoc('pmc_sample.xml', 'pmc')
When i am calling this procedure i got this error
11:23:54 Error: ORA-29532: Java call terminated by uncaught Java exception: oracle.xml.sql.OracleXMLSQLException: Start of root element expected.
ORA-06512: at "SYS.DBMS_XMLSAVE", line 65
ORA-06512: at "SCOTT.INSPROC", line 8
ORA-06512: at line 2
I am checking my XML file using XML Validator. My XML file was parsed with out errors.
Please give the solution,and tell me where i did wrong in my calling procedure.
suppose i have this XML file in local E drive ,how to set the path for that XML file in my calling procedure.Hi, I am doing the code likthis,please give the solution.
SQL> create or replace procedure insProc(xmlDoc IN CLOB, tableName IN VARCHAR2) is
2 insCtx DBMS_XMLSave.ctxType;
3 l_ctx dbms_xmlsave.ctxtype;
4 rows number;
5 begin
6 insCtx := DBMS_XMLSave.newContext(tableName); -- get the context handle
7 rows := DBMS_XMLSave.insertXML(insCtx,xmlDoc); -- this inserts the document
8 DBMS_XMLSave.closeContext(insCtx); -- this closes the handle
9 end;
10 /
Procedure created.
SQL> begin
2 insProc('/usr/tmp/ROWSET.xml', 'emp');
3 end;
4 /
begin
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception: oracle.xml.sql.OracleXMLSQLException:
Start of root element expected.
ORA-06512: at "SYS.DBMS_XMLSAVE", line 65
ORA-06512: at "SCOTT.INSPROC", line 7
ORA-06512: at line 2
Kishore B -
JDBC receiver adapter: No 'action' attribute found in XML document
Hi this is my target structure getting generated at the Receiver JDBC adapter
I have checked the XML doc, still unable to figure out why in the RWB its showing the following error:
"Message processing failed. Cause: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: No 'action' attribute found in XML document (attribute "action" missing or wrong XML structure)"
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_IF001 xmlns:ns0="http://vodafone.com/xi/IF001">
<Statement>
<OPCO_VPC_PO action="UPDATE">
<access>
<SO>0060000090</SO>
<SO_ITEM>000010</SO_ITEM>
</access>
<key>
<OPCO_PO>0002002291</OPCO_PO>
<OPCO_PO_ITEM>00010</OPCO_PO_ITEM>
</key>
</OPCO_VPC_PO>
</Statement>
</ns0:MT_IF001>
Kindly Help !!
Thanks !!Hi,
Clearly stating that no action attribute .So, please take a look at the structure please do like this at your Data Type specification
<i><b><b><root>
<StatementName1>
<dbTableName action=UPDATE | UPDATE_INSERT>
<table>realDbTableName</table>
<access>
<col1>val1</col1>
<col2>val2new</col2>
</access>
<key1>
<col2>val2old</col2>
<col4>val4</col4>
</key1>
<key2>
<col2>val2old2</col2>
</key2>
</dbTableName>
</StatementName1>
</root></b></b></i>
refer the following link
http://help.sap.com/saphelp_nw04/helpdata/en/2e/96fd3f2d14e869e10000000a155106/content.htm
**Assign points if you found helpful
Regards.,
V.Rangarajan -
XSQL: How to embed the XML document(s) instead of posting?
Dear all.
I'm trying to use XSQL for a self-contained database schema setup. This setup should be able to handle DML (INSERT/UPDATE/DELETE), PL/SQL calls etc and I thought XSQL looks perfect for the job. As such, I wouldn't be using XSQL as a publishing framework but as kind of an ETL tool. The only output I would be interested in would be the xsql-status in order to check that the number of rows processed matches my expectations. I would prefer XSQL to run entirely within the database and not depend on any servlet container.
However, it seems that XSQL's only way of obtaining the canonical XML (ROWSET/ROW) that is used by xsql:insert-request/xsql:update-request/xsql:delete-request is through HTTP POST/GET. It doesn't seem that it's possible to embed the XML directly in the page, nor does it seem possible to handle more than one XML.
I'm trying to achieve something like this:
<?xml version="1.0"?>
<page connection="scott" xmlns:xsql="urn:oracle-xsq">
<xsql:insert-request table="DEPT">
<ROWSET>
<ROW>
<DEPTNO>-10</DEPTNO>
<DNAME>NEW DEPT 1</DNAME>
<LOC>COPENHAGEN</LOC>
</ROW>
<ROW>
<DEPTNO>-20</DEPTNO>
<DNAME>NEW DEPT 2</DNAME>
<LOC>LONDON</LOC>
</ROW>
</ROWSET>
</xsql:insert-request>
<xsql:insert-request table="EMP">
<ROWSET>
<ROW>
<EMPNO>-10</EMPNO>
<ENAME>NEW EMP 1</ENAME>
</ROW>
<ROW>
<EMPNO>-20</EMPNO>
<ENAME>NEW EMP 2</ENAME>
</ROW>
</ROWSET>
</xsql:insert-request>
</page>
or perhaps
<?xml version="1.0"?>
<page connection="scott" xmlns:xsql="urn:oracle-xsq">
<request>
<parameters>
<dept>
<ROWSET>
<ROW>
<DEPTNO>-10</DEPTNO>
<DNAME>NEW DEPT 1</DNAME>
<LOC>COPENHAGEN</LOC>
</ROW>
<ROW>
<DEPTNO>-20</DEPTNO>
<DNAME>NEW DEPT 2</DNAME>
<LOC>LONDON</LOC>
</ROW>
</ROWSET>
</dept>
</parameters>
</request>
<xsql:insert-request table="DEPT" param="dept"/>
<xsql:insert-request table="EMP" param="emp"/>
</page>
I need both INSERT/UPDATE/DELETE so xsql:insert-param isn't enough, would also need an xsql:update-param and xsql:delete-param.
A way of referring to the canonical XML through an URI or XPath expression (referring to a registered XML document in the database) would also be cool.
Perhaps implementing custom action handlers would work but not sure whether they'll be able to refer to any child XML elements within them? Furthermore, the syntax for these would also be slightly inconvenient:
<xsql:action handler=com.ellebaek-consulting.xsql.InsertActionHandler" table="DEPT">
My alternative would be to re-implement an extended version of XSQL (XSQLX :-)?) but I'm trying to avoid that.
Any pointers and ideas are very much appreciated.
Thanks in advance.
Best regards
Finn Ellebaek NielsenHi.
Thanks for your reply but the article only talks about how to query data with XSQL and I need to INSERT/UPDATE/DELETE data embedded in XSQL pages into the database so I'm afraid that the article doesn't apply.
Cheers
Finn -
Unsupported action attribute value 'EXCECUTE' found in XML document
Hi
I am working on IDOC->XI->DB2 scenairo
I am getitng error following error whe i try to insert and execute the stored procedure.
Message processing failed. Cause: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Unsupported action attribute value 'EXCECUTE' found in XML document
Following is the payload....
<?xml version="1.0" encoding="UTF-8" ?>
- <I805_Abstr_CustOutlet_MT>
- <StatementInsert>
- <STATUS action="INSERT">
<table>BI5FILMM.BSOMSAPP</table>
- <access>
<OUTLET_NO>12</OUTLET_NO>
<OUTLET_RF>20</OUTLET_RF>
<OMFUNC>CRT</OMFUNC>
<STATUS>N</STATUS>
<IFCEDATE>1080626</IFCEDATE>
<IFCETIME>094220</IFCETIME>
</access>
</STATUS>
</StatementInsert>
- <StatementProce>
- <STATUS action="EXCECUTE">
<table>CC5PTF.BSOMPSAP</table>
<Para1 IsInput="true" type="CHAR">BI5FILMM</Para1>
<Para2 IsInput="true" type="CHAR">BMIJOBD</Para2>
</STATUS>
</StatementProce>
</I805_Abstr_CustOutlet_MT>Check ur XML format with the one mentioned in this
http://help.sap.com/saphelp_nw2004s/helpdata/en/4d/8c103e05df2e4b95cbcc68fed61705/content.htm -
Creating new analysis gives "Error loading XML Document from ..."
Trying to create analysis and getting "Error loading XML Document from saw.dll/answers/answersproperties.xml?fmapId=S1clug.
The response given was:" after choosing subject area. Analysis editor is opened but Subject Areas is empty and can't do anything.
The problem is on Mozilla 12 (16.0.2, 17.0.1) and IE 8. Chrome works fine.
My system is Win 7, BI 11.1.1.6.0 is on Oracle Linux (and by the way Mozilla from Linux system works fine)
What could be the reason of this?
Edited by: 898973 on 4/12/2012 15:11Reinstalling Mozilla with "Remove personal data" option checked resolved the problem.
-
XML document creation using reflection
Hi all,
I'm tyring to write a class which creates an XML document from objects passed in. For example, you call the add(Object) method and it takes your object, uses reflection, then outputs XML like this...
<fieldName>fieldValue<fieldName>
The only problem is that after looking through this forum I am a little concerned about the performance of my proposed solution (using reflection).
The class will be used in a batch process which processes millions of objects (to generate a whopping XML file that'll be sent on for further processing by a third party).
Is there a better way to do this than by using reflection?
This class is going to be used by multiple batch processes hence there will be lots of different object types passed (they'll also be new ones in the future that we don't even know about yet) hence my reflection choice.
Thanks,
ChrisThe only problem is that after looking through this
forum I am a little concerned about the performance of
my proposed solution (using reflection).The only way that you'll know for sure is if you try it out. Write the code, test it, then run it in a profiler to find out where the performance problems (if any) are.
Is there a better way to do this than by using
reflection?Probably not, if you want to pass any arbitrary object to it.
One possible alternative is to have "XML aware" objects: define an interface WritesXML, that defines a method toXML(). You then check to see whether the given object implements this interface, and if it does you simply call the method, otherwise you use reflection.
Another alternative, assuming that your objects follow the Bean pattern, is to create "XML-ifiers" on the fly, similar to the way an app-server handles JSPs. First time you see an object you create a class that will write it to XML, then compile this class and invoke it for all subsequent objects. This will require that you have a JDK installed on the runtime machine, that the objects follow the Bean pattern, and that the number of instances of a given class are very high.
This class is going to be used by multiple batch
processes hence there will be lots of different object
types passed (they'll also be new ones in the future
that we don't even know about yet) hence my reflection
choice.Sounds like a good reason to use reflection. -
How to validate generated XML-Document in Memory by XML-Schema?
Hi all!
I have the following problem:
I am generating a Document using the DOM delivered with Xerces 2.6.2.
Before I'll send the generated xml-document through network to another system I have to check with my xml-schema if the document is correct.
In the DOM-FAQ I found an "example" trying to explain how it should work. But with this example the problems begin.
I am creating my document with this method:
public void createDocument() {
myDOM = DOMImplementationImpl.getDOMImplementation();
doc = myDOM.createDocument("", "documentData", null);
root = doc.getDocumentElement();
root.setAttribute(
"xmlns:xsi",
"http://www.w3.org/2001/XMLSchema-instance");
// root.setAttribute("xsi:noNamespaceSchemaLocation", "myScheme.xsd");
domConfig = ((DocumentImpl) doc).getDomConfig();
domConfig.setParameter(
"schema-location",
"file:///d:/workspace/XMLProject/WebContent/WEB-INF/myScheme.xsd");
domConfig.setParameter("error-handler", new EHandler());
domConfig.setParameter("validate", Boolean.TRUE);
}In the line getting the domConfig, it is getting differeing to the example: The example is like this:
import org.w3c.dom.Document;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.ls.LSParser;
Document document = builder.parseURI("data/personal-schema.xml");
DOMConfiguration config = document.getConfig();
config.setParameter("error-handler",new MyErrorHandler());
config.setParameter("validate", Boolean.TRUE);
document.normalizeDocument();They get the DOM-Configuration from the document-Object, but my document-Object has no "getConfig()" and only after type-casting I get a getDomConfig()-Method to get the configuration.
Then I fill my document and call
((DocumentImpl) doc).normalizeDocument();When I run my Application I get the following error:
org.w3c.dom.DOMException: FEATURE_NOT_SUPPORTED: The parameter schema-location is recognized but the requested value cannot be set.
at org.apache.xerces.dom.DOMConfigurationImpl.setParameter(Unknown Source)
at xmlProject.createDocument(Convert.java:63)
at xmlProject.Convert.main(Convert.java:154)I tried several ways to get the validation without success.
The next question is how I should refer to my xml-schema (which path) and where to place it relative to my jar I will generate, because I will have no webserver I could place it on.
Has anyone any experience with validating a document created and not placed on disc?
I have also another question to SAX: I read, that it is reading a document without saving it in the memory. I think this means that if I am validating it by SAX it will be read once and for parsing it will be read a second time. If I would transfer the document over an tcp-connection, I only have the document once in my inputstream and after validation it would be consumed I think. But what can I parse then? Or did I missed a detail with the function of the SAX?
Thank you for your help!
Yours
Christianstatic final String schemaSource = argv[0];
static final String JAXP_SCHEMA_SOURCE =
"http://java.sun.com/xml/jaxp/properties/schemaSource";
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
factory.setAttribute(JAXP_SCHEMA_SOURCE,
new File(schemaSource)); -
Multiple XML documents in one SWF
Hi, i'm trying to create a mix and match clothing application
using flash for a school project but am having trouble with xml
documents. Using an online tutorial, i found it was quite easy to
load up one xml document, example of code below.
I thought it would be as simple as copying all the code and
changing the variable names to load a second xml document but i
find when i run the code, that only the last xml document in the
code loads, could anyone give me any tips? Thanks
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
description = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image
= xmlNode.childNodes.childNodes[0].firstChild.nodeValue;
description
= xmlNode.childNodes.childNodes[1].firstChild.nodeValue;
firstImage();
} else {
content = "file not loaded!";
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("images.xml");Hi, i checked my text and description boxes in my document,
and it is in fact loading the separate xml document, the problem
seems to stem from the fact that it is not displaying the xml image
within the movie clip.
I have two separate mc's on the stage, with different
instance names, flash displays the description of each separate xml
document, however, it only shows one of the movie clips images, if
i delete one from the actionscript, it shows the other, so it must
be something to do with them overwriting each other, i used a
trace, so i know the data is in flash for the images which arent
being shown, it just isn't showing for some reason.
Maybe you are looking for
-
Replication of a BP in CRM as a FI Vendor in ECC for Grants Management
Hi, We are implenting SAP CRM 7 with SAP ECC for Grants Management, integrated with FI AP (we're not using PSCD). For BP replication we followed the next steps, however something looks it is incorrect because my BDOC still shows errors: The middlewar
-
Different SC ship to address for different line items
Hello Frnds, Please help... My question is, I have 10 line items in a PO to a one vendor. I would want my vendor to ship each line item to different SC vendors. Can i have SC vendor for for each line item with SC Vend ticked in PO? Please advice...
-
Scientific fluorescence figures are not displayed correctly on iPad
I use the iPad 1 for reading scientific papers, and I figured out that some fluorescence figures are not displayed correctly. The colours are not correctly distinguished, even some colours are completely missing. Is this a limitation of the iPad disp
-
Calculating values from repeated fields.
I have a subform that repeatable, how to i calculate a value from a fields from the repeated values?
-
Accumulating Rolling Total on a column
I need to display a list of records and I'd like to create an accumulating field based on a set of records. I need to fill in amount balances that accumulates on every record. For instance, if I have these records: Quantity 2 3 1 5 10 My aggregated c