XmlBeansFaq - XMLBEANS - Apache Software Foundation
DUE TO SPAM, SIGN-UP IS DISABLED. Goto
Selfserve wiki signup
and request an account.
XMLBEANS
Pages
Blog
Page tree
Browse pages
tachments (0)
Page History
Resolved comments
Page Information
View in Hierarchy
View Source
Export to PDF
Export to Word
Copy Page Tree
Jira links
XmlBeansFaq
Created by
ASF Infrabot
, last modified on
Jun 06, 2019
XMLBeans FAQ
General Community Questions
What are the different XMLBeans Mailing Lists?
Who are the XMLBeans Committers?
Where do I file a bug for XMLBeans?
Getting Started
Where can I download the latest release of XMLBeans?
What is the latest version of XMLBeans?
How do I get started coding with XMLBeans?
How can I get the latest XMLBeans source code in svn?
How do I build XMLBeans from source?
Can I view the XMLBeans Source Code online, without having svn on my machine?
Is the XMLBeans javadoc available online?
What jars do I need on the classpath to use XMLBeans?
Running my code that used to work fails with "java.lang.NoClassDefFoundError: javax/xml/namespace/QName" after upgrading to 2.3.0
The scomp program can't find javac and fails with java.io.IOException on Windows!
The scomp program gives OutOfMemoryError when compiling my complex Schema!
The scomp fails with code too large error!
General XMLBeans Questions
How can I write the PCDATA in Element which is complexType?
What Java types are created for a particular schema type?
Can I change the default package names for the java classes generated from my schema?
Is there a way to do a
deep equals
between two Xmlobjects?
How can I influence the namespace prefix used when saving/printing out my XML?
How can I instruct XMLBeans to add the xsi:schemaLocation attribute to my documents?
Is selectPath(...) on XmlObject and XmlCursor working?
Is execQuery(...) on XmlObject and XmlCursor working?
How do I modify the generated interfaces?
How do I control CDATA?
Why am I getting XmlValueDisconnectedException when I try to change an XmlObject?
Schema Object Model Questions
Is there an introduction document on the XMLBeans Schema Type System?
How do I get the java name for a schema type?
How do I get to SchemaAnnotation and SchemaIdentityConstraint on elements?
What is the difference between SchemaProperty and SchemaParticle?
How do I use substitution groups?
How do I compile multiple schema files with dependencies?
XmlCursor API
Is there documentation on navigating with XmlCursor?
How do I use Bookmarks to annotate XML?
General Community Questions
What are the different XMLBeans Mailing Lists?
Apache XMLBeans Mailing Lists
Who are the XMLBeans Committers?
Apache XMLBeans Committers
Where do I file a bug for XMLBeans?
XMLBeans uses Jira for bugtracking.
Go to XMLBeans JIRA
See reporting information of XMLBeans JIRA issues
Getting Started
What is the latest version of XMLBeans?
Check the
news page
for the latest release. The 1.0.4 release is the latest stable maintenance release. You will need JDK 1.4 for the 2.3.0 and 1.0.4 release. For JDK 1.3 users, there is a version of the 1.0.4 release compatible with JDK 1.3. For 2.6.0 release JDK 6 is required.
Where can I download the latest release of XMLBeans?
How do I get started coding with XMLBeans?
You can find lots of
documentation
on the XMLBeans' website. The
Getting Started
guide (
) is a good introduction to XMLBeans. Another excellent place to start is the
tutorial
How can I get the latest XMLBeans source code in svn?
XMLBeans Source Code Information
. You will need a Subversion (svn) client.
Is the XMLBeans javadoc available online?
Yes, you can view the XMLBeans [2.5.0 Javadocs],
2.4.0 JavaDocs
2.2.0 JavaDocs
2.1.0 JavaDocs
2.0.0 JavaDocs
or the
1.0.4 JavaDocs
What jars do I need on the classpath to use XMLBeans?
The obvious one is
xbean.jar
, which contains the XMLBeans code.
scomp.cmd
includes trailing periods after this on v1.0.4, which may cause problems under Windows XP.
For XMLBeans V1, this is all you need, but for XMLBeans 2, the JSR173 API jar is also required, since it contains classes that XMLBeans depends on. For XMLBeans 2.0.0, the name of the jar is
jsr173_api.jar
and for XMLBeans 2.1.0, it's
jsr173_1.0_api.jar
. In both cases, the jar comes with the XMLBeans binary distribution (for source distributions, the build process will download it and place it in the
build/lib
directory.
For JDK 1.4 users, as of XMLBeans 2.3.0 it has become necessary to also include xmlbeans-qname.jar
If XPath/XQuery support is required, the
xbean_xpath.jar
contains the XPath "glue" code and needs to be included on the classpath. Then, depending on the version of XMLBeans in use, the following are also required:
jaxen.jar
for XMLBeans V1 (only supports XPath, no XQuery),
saxon8.jar
for XMLBeans V2.0.0 and V2.1.0 (the only version supported is Saxon 8.1.1),
saxon8.jar
and
saxon8-dom.jar
for XMLBeans built from SVN head (this supports Saxon >= 8.6.1).
XMLBeans version
Saxon supported version
v2.4.0
Saxon-9.0.0.4
v2.3.0
Saxon-8.8
v2.2.0
SaxonB-8.6.1
v2.1.0
SaxonB-8.1.1
v2.0.0
SaxonB-8.1.1
v1.x
N/A
In addition to those, compiling Schemas using the scomp script requires
tools.jar
from the JDK and
resolver.jar
from Apache xml-commons (the latter one only in case support for OASIS XML catalogs for resolving external entities is needed).
We make another jar available,
xmlpublic.jar
, which contains the classes in the "org.apache.xmlbeans" package. If your code can be compiled with
xmlpublic.jar
on the classpath instead of the full
xbean.jar
, it means that your code uses only "public", supported APIs and will likely not need any modification if you need to upgrade to a newer XMLBeans version.
Running my code that used to work fails with "java.lang.NoClassDefFoundError: javax/xml/namespace/QName" after upgrading to 2.3.0
See
What jars do I need on the classpath to use XMLBeans?
. You need to add xmlbeans-qname.jar on you classpath.
The scomp program can't find javac and fails with java.io.IOException on Windows!
On Windows, some users have reported that the scomp program fails when trying to run javac on the generated java source. First, be sure you have a JDK installed. The JRE doesn't have the javac program so you won't be able to compile the generated java source. If you have both a JDK and a JRE installed, the JRE's java is being found before the JDK's java. Since scomp uses the 'java.home' property to find the javac program, but javac is only available in the JDK, finding javac will fail.
The solution is to move the JDK higher up on the PATH in the environment. An alternate solution is to set JAVA_HOME and edit the scomp script to run %JAVA_HOME%\bin\java instead of relying on the PATH. The error you would see looks like:
$ scomp -out myeasypo.jar easypo
Time to build schema type system: 1.969 seconds
Time to generate code: 0.313 seconds
'javac' is required on the path.
java.io.IOException: CreateProcess: c:\xmlbeans-1.0.2\schemas\javac @c:\DOCUME~1\alex\LOCALS~1\Temp\javac20992 error=2
null
java.io.IOException: CreateProcess: c:\xmlbeans-1.0.2\schemas\javac @c:\DOCUME~1\alex\LOCALS~1\Temp\javac20992 error=2
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at org.apache.xmlbeans.impl.tool.CodeGenUtil.externalCompile(CodeGenUtil.java:218)
at org.apache.xmlbeans.impl.tool.SchemaCompiler.compile(SchemaCompiler.java:815)
at org.apache.xmlbeans.impl.tool.SchemaCompiler.main(SchemaCompiler.java:264)
BUILD FAILED
If that doesn't fix the issue, try specifying relevant paths using Windows 8.3 names. This will get around issues with spaces in folder names.
The scomp program gives OutOfMemoryError when compiling my complex Schema!
The likely problem here is that because of the large number of source files that must be generated sometimes, the javac compilation step fails with insufficient memory. Here's how the problem manifests itself:
@ scomp myBigSchema.xsd
Time to build schema type system: 4.641 seconds
Time to generate code: 8.574 seconds
The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError
If you get this, you need to give javac more memory. But since javac is launched as an external process, tweaking the scomp.bat script and upping the memory that scomp has available will have no effect. The solution is to use the "-mx" parameter to scomp, for example:
$ scomp -mx 1024M myBigSchema.xsd
The scomp fails with code too large error
This issue has been seen when running scomp xsds from www.niem.gov and www.it.ojp.gov/jxdm. When encountered in the schemas above is caused by a limitation of the JVM. It was discovered and noted by a JIRA issue.
The scomp tool does not currently have a solution for this.
How do I build XMLBeans?
Building XMLBeans
. You will need
Ant
installed and JDK 1.4.
Can I view the XMLBeans source code online, without having svn on my machine?
Yes you can use the CVS/SVNView to browse or link to the XMLBeans source code.
Link to XMLBeans main dev trunk
General XMLBeans Questions
What Java types are created for a particular schema type?
User Derived Schema Types
When you compile XML schema, the resulting API is made up of two categories of types: built-in types that mirror those in the schema specification and others that are generated from user-derived schema types. This topic provides an overview of the Java types generated for user-derived types, describing the methods the Java types provide ...
Java Types Generated from User-Derived Schema Types
Built in Types
Just as with types in XML schema, the XMLBeans types based on schema are arranged in a hierarchy. In general, the hierarchy of XMLBean types mirrors the hierarchy of the schema types themselves. XML schema types all inherit from xs:anyType (which is at the root of the hierarchy); XMLBeans types inherit from XmlObject ...
XMLBeans Support for Built-In Schema Types
Can I change the default package names for the java classes generated from my schema?
You can create a file that ends in .xsdconfig to map targetnamespace to packagename. Put the .xsdconfig file in the same directory as the .xsd that you are compiling. Here is an example .xsdconfig:
Notice that you can also map specific element/attribute names to java names.
Note: If schema doesn't include targenamespace then use
to specify package names
Note: XMLBeans doesn’t support using two or more sets of java classes (in different packages) mapped to schema types/elements that have the same names and target namespaces, using all in the same class loader. Depending on the direction you are using for the java classes to schema types mapping, some features might not work correctly. This is because even though the package names for the java classes are different, the schema location for the schema metadata (.xsb files) is the same and contains the corresponding implementing java class, so the JVM will always pick up the first on the classpath. This can be avoided if multiple class loaders are used.
Is there a way to do a
deep equals
between two XmlObjects?
Dmitri.Colebatch posted some code that will do a
deep equals
. You can find the code attached to this post
Kevin Krouse also posted some code that will do a
deep equals
but had some limitations addressed by Dmitri above. You can find the code attached to this post
How can I influence the namespace prefix used when saving/printing out my XML?
XMLBeans does not keep the prefixes when the original XML is loaded into the underlying XML store. If you need/want a specific prefix to be associated with a namespace you can use the
setSaveSuggestedPrefixes(...)
XmlOption.
Here is a code example from this helpful post,
HashMap suggestedPrefixes = new HashMap();
suggestedPrefixes.put("http://foo.com/", "foo");
XmlOptions opts = new XmlOptions();
opts.setSaveSuggestedPrefixes(suggestedPrefixes);
String output = document.xmlText(opts);
How can I instruct XMLBeans to add the xsi:schemaLocation attribute to my documents?
Here's how to do it. Assume that you have a document represented by the
doc
XmlObject (obtained via TestDocument.Factory.newInstance() or TestDocument.Factory.parse()) and you need an xsi:schemaLocation attribute on it, with value from the
location
String.
XmlCursor cursor = doc.newCursor();
if (cursor.toFirstChild())
cursor.setAttributeText(new QName("http://www.w3.org/2001/XMLSchema-instance","schemaLocation"), location);
Is selectPath(...) on XmlObject and XmlCursor working?
XMLBeans has a built in engine for very simple XPath expressions. To use more advanced XPath or XQuery expressions in 2.x, you will need
Saxon
on the classpath.
NOTE
: See
supported versions of Saxon
To use more advanced XPath expressions in 1.0.4, the Jaxen engine can be used if xbean_xpath.jar is on the classpath. The xbean_xpath.jar is available in build\private\lib by running 'ant xbean_xpath.jar'.
Is execQuery(...) on XmlObject and XmlCursor working?
Yes! XMLBeans 2.1.0 uses
Saxon
as its XQuery engine so you will need it on your classpath.
NOTE
: See
supported versions of Saxon
For the 1.0.4 release, there is no open source XQuery integration. However, the XmlBeans included in BEA's Weblogic 8.x executes xqueries using a BEA's proprietary XQuery engine.
How do I modify the generated interfaces?
Use .xsdconfig files. Learn more here -
XsdConfigFile
How do I control CDATA?
Use CDATA options. Learn more here -
CdataOptions
Why am I getting XmlValueDisconnectedException when I try to change an
XmlObject
The cause is that the
XmlObject
is an orphan; i.e., it has become disassociated from the XML store. This can happen if you get a reference to an object (perhaps by fetching the first item in an array), delete the item from the tree (perhaps by calling the array remove method on element 0), and then try to invoke methods on that reference or any of its child elements. You cannot even invoke the toString() method on an orphaned object! If you need to keep a deleted object, make a copy before you delete it. For example:
LineItem nl = p.getLineItemArray(0).copy();
p.removeLineItem(0);
Schema Object Model Questions
Is there an introduction document on the XMLBeans Schema Type System?
This
document
is a good starting place to learn about programming against the XMLBeans Schema Type System.
How do I get the java name for a schema type?
Once you've compiled things and got the JAR...
Put the JAR on your classpath
Use
com.bea.xml.XmlBeans.getContextTypeLoader()
to get the SchemaTypeLoader corresponding to your thread's context classloader.
you can then use
schemaTypeLoader.findType(QNameForType)
and then
type.getFullJavaName()
see this post:
@fixme: seems to be a dead link
How do I get to SchemaAnnotation and SchemaIdentityConstraint on elements?
See below
What is the difference between SchemaProperty and SchemaParticle?
What is the difference between SchemaProperty and SchemaParticle?
In a few words, the difference is that SchemaProperty represents a "flattened", simplified view of the contents of a type, while SchemaParticle represents a "complete" view including all of the model groups, as defined in Schema. To exemplify, consider the following Schema:
.
.
.
As you can see, this content mandates an element in the instance, followed by either one or more s or one or more s (a (a+|b+)). The majority of applications would only be interested in what are the names and types of elements allowed inside the content for type "T" and would not care whether there are nested sequeces/choices and the like. As such, they can use
SchemaType.getProperties()
and they will see two entries, one for element "a" (built by collapsing the two occurences of an "a" element in the Schema) and one for element "b".
However, in some cases, more detail is needed about the content of the element. One example would be a Schema validator which needs to know if and are contained by a
This example code illustrate how to get the SchemaProperty'ies and SchemaParticle's on a type:
SchemaType t = XmlBeans.getContextTypeLoader().findType(new QName("http://test", "T"));
SchemaProperty[] schemaProperties = t.getProperties();
for (int i = 0; i < schemaProperties.length; i++)
printPropertyInfo(schemaProperties[i]);
System.out.println();
if (t.getContentType() == SchemaType.ELEMENT_CONTENT ||
t.getContentType() == SchemaType.MIXED_CONTENT)
SchemaParticle topParticle = t.getContentModel();
// topParticle is non-null if we checked the content
navigateParticle(topParticle);
public static void navigateParticle(SchemaParticle p)
switch (p.getParticleType())
case SchemaParticle.ALL:
case SchemaParticle.CHOICE:
case SchemaParticle.SEQUENCE:
// These are "container" particles, so iterate over their children
SchemaParticle[] children = p.getParticleChildren();
for (int i = 0; i < children.length; i++)
navigateParticle(children[i]);
break;
case SchemaParticle.ELEMENT:
printElementInfo((SchemaLocalElement) p);
break;
default:
// There can also be "wildcards" corresponding to
With helper methods
public static void printPropertyInfo(SchemaProperty p)
System.out.println("Property name=\"" + p.getName() + "\", type=\"" + p.getType().getName()
+ "\", maxOccurs=\"" +
(p.getMaxOccurs() != null ? p.getMaxOccurs().toString() : "unbounded") + "\"");
public static void printElementInfo(SchemaLocalElement e)
System.out.println("Element name=\"" + e.getName() + "\", type=\"" + e.getType().getName()
+ "\", maxOccurs=\"" +
(e.getMaxOccurs() != null ? e.getMaxOccurs().toString() : "unbounded") + "\"");
SchemaAnnotation annotation = e.getAnnotation();
if (annotation != null)
SchemaAnnotation.Attribute[] att = annotation.getAttributes();
if (att != null && att.length > 0)
System.out.println(" Annotation: " + att[0].getName() + "=\"" +
att[0].getValue() + "\"");
this is the result of running this code:
Property name="a", type="{http://www.w3.org/2001/XMLSchema}string", maxOccurs="unbounded"
Property name="b", type="{http://www.w3.org/2001/XMLSchema}string", maxOccurs="unbounded"
Element name="a", type="{http://www.w3.org/2001/XMLSchema}string", maxOccurs="1"
Element name="a", type="{http://www.w3.org/2001/XMLSchema}string", maxOccurs="unbounded"
Annotation: {http://test}ann="annotation_a"
Element name="b", type="{http://www.w3.org/2001/XMLSchema}string", maxOccurs="unbounded"
As you can see, using the SchemaParticle API we get two occurences for the "a" element and an annotation showing up only on the second of these occurences.
How do I use substitution groups?
See the Substitution Groups FAQ:
SubstGroupsFaq
How do I compile multiple schema files with dependencies?
Schema files need to be compiled with its compiled dependencies on the classpath. For example, if s4.xsd and s3.xsd depends on s2.xsd which depends on s1.xsd, compile using the following:
scomp -out s1.jar s1.xsd
scomp -cp s1.jar -out s2.jar s2.xsd
scomp -cp s1.jar;s2.jar -out s3.jar s3.xsd s4.xsd
XmlCursor
API
Is there documentation on navigating with XmlCursor?
This document,
, discusses using XmlCursor to navigate a document.
How do I use Bookmarks to annotate XML?
This
document
, discusses using bookmarks to annotate xml.
No labels
Overview
Content Tools
Atlassian Confluence Open Source Project License
granted to Apache Software Foundation.
Evaluate Confluence today
Atlassian Confluence
8.5.31
Printed by Atlassian Confluence 8.5.31
Report a bug
Atlassian News
Atlassian
{"serverDuration": 138, "requestCorrelationId": "356948ff7fe6918b"}