/* Copyright 2004 The Apache Software Foundation | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package org.apache.xmlbeans.samples.xsdconfig; | |
/** | |
*This class uses the package names and class names mentioned in XsdConfig. | |
*Note the difference between the imports in two files (CatalogXsdConfig.java and CatalogXsd.java) | |
*/ | |
import com.catalog.XmlCatalogDocumentBean; | |
import com.catalog.XmlJournalDocumentBean; | |
import com.catalog.XmlArticleDocumentBean; | |
import com.catalog.XmlShortItemBean; | |
import org.apache.xmlbeans.XmlException; | |
import org.apache.xmlbeans.XmlError; | |
import org.apache.xmlbeans.XmlObject; | |
import org.apache.xmlbeans.XmlOptions; | |
import java.util.ArrayList; | |
import java.io.IOException; | |
import java.io.File; | |
public class CatalogXsdConfig | |
{ | |
public static void main(String[] args) | |
{ | |
// Create an instance of this class to work with. | |
CatalogXsdConfig catxsdconfig = new CatalogXsdConfig(); | |
// Create an instance of a type based on the received XML's schema | |
XmlCatalogDocumentBean catdoc = catxsdconfig.parseXml(args[0]); | |
//Prints the element values from the XML. | |
catxsdconfig.printElements(catdoc); | |
} | |
/** | |
* Creates a File from the XML path provided in main arguments, then | |
* parses the file's contents into a type (CatalogDocument) generated from schema. | |
* | |
* @param xmlFilePath A path to XML based on the schema in EasyPo.xsd | |
* @return An instance of a generated schema type (CatalogDocument) that contains the | |
* parsed XML. | |
*/ | |
public XmlCatalogDocumentBean parseXml(String xmlFilePath) | |
{ | |
File xmlfile = new File(xmlFilePath); | |
XmlCatalogDocumentBean catdoc = null; | |
try | |
{ | |
catdoc = XmlCatalogDocumentBean.Factory.parse(xmlfile); | |
} | |
catch (XmlException e) | |
{ | |
e.printStackTrace(); | |
} | |
catch (IOException e) | |
{ | |
e.printStackTrace(); | |
} | |
return catdoc; | |
} | |
/* | |
* This method prints all the element values in the given XML document based on Catalog.xsd | |
*/ | |
public void printElements(XmlCatalogDocumentBean catdoc) | |
{ | |
// Get object reference of root element. | |
XmlCatalogDocumentBean.Catalog catalogelement = catdoc.getCatalog(); | |
//Get all <journal> element from the root element. | |
XmlJournalDocumentBean.Journal[] journalarray = catalogelement.getJournalArray(); | |
//Loop through <journal> element array. | |
for (int i = 0; i < journalarray.length; i++) | |
{ | |
//Retrieve all <article> elements within each <journal> element | |
XmlArticleDocumentBean.Article[] articlearray = journalarray[i].getArticleArray(); | |
//Loop through <article> array retrieved above | |
for (int j = 0; j < articlearray.length; j++) | |
{ | |
System.out.println(articlearray[j].getTitle()); | |
String[] str = articlearray[j].getAuthorArray(); | |
for (int k = 0; k < str.length; k++) | |
System.out.println(str[k]); | |
//Note the method for retrieving <forsample> element. | |
System.out.println( | |
articlearray[j].getXmlShortItemBean().getGoodName()); | |
} | |
} | |
System.out.println("\n\n\n"); | |
} | |
/** | |
* <p>Validates the XML, printing error messages when the XML is invalid. Note | |
* that this method will properly validate any instance of a compiled schema | |
* type because all of these types extend XmlObject.</p> | |
* <p/> | |
* <p>Note that in actual practice, you'll probably want to use an assertion | |
* when validating if you want to ensure that your code doesn't pass along | |
* invalid XML. This sample prints the generated XML whether or not it's | |
* valid so that you can see the result in both cases.</p> | |
* | |
* @param xml The XML to validate. | |
* @return <code>true</code> if the XML is valid; otherwise, <code>false</code> | |
*/ | |
public static boolean validateXml(XmlObject xml) | |
{ | |
boolean isXmlValid = false; | |
// A collection instance to hold validation error messages. | |
ArrayList validationMessages = new ArrayList(); | |
// Validate the XML, collecting messages. | |
isXmlValid = xml.validate( | |
new XmlOptions().setErrorListener(validationMessages)); | |
// If the XML isn't valid, print the messages. | |
if (!isXmlValid) | |
{ | |
System.out.println("\nInvalid XML: "); | |
for (int i = 0; i < validationMessages.size(); i++) | |
{ | |
XmlError error = (XmlError) validationMessages.get(i); | |
System.out.println(error.getMessage()); | |
System.out.println(error.getObjectLocation()); | |
} | |
} | |
return isXmlValid; | |
} | |
} |