Radu,
Actually the file
schemaorg_apache_xmlbeans/element/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/item_2Dquery.xsb
is in the jar. I just overlooked it. I modified my test
code to load the resource and it loaded fine.
Two questions:
1) Do you know offhand which class handles
the loading of the .xsb resources. I'm going to look at the
source.
2) Does XML beans generate log messages during the XML
marshalling/unmarshalling and loading of .xsb resources?
If so, I'd like to enable it in the
hopes it may help me debug this problem.
Thanks for the help,
-- Tellis
From: Radu Preotiuc-Pietro [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 22, 2006 7:16 PM
To: [email protected]
Subject: RE: ArrayStoreException in get*Array() method in custom Ant task
Ok, so we know that the classloader loads all the resources
you would expect it to.
However, the fact that "schemaorg_apache_xmlbeans/element/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/item_2Dquery.xsb"
is missing is a problem and will result in the exception that you are seeing.
Moreover, if I compile the Schema snippet that you provided and look inside the
generated jar, that resource is there so I don't know how it got removed in your
environment.
So you
need to recompile and get the new jar under ant and everything will, hopefully,
be fine.
And yeah, if anyone
looked inside a jar generated by XmlBeans and wondered what was up with the
"URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5" strings, they are just the
SHA-1 hash of the targetNamespace in the
Schema.
Thanks,
Radu
From: Tellis B. Ellis, IV [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 22, 2006 2:43 PM
To: [email protected]
Subject: RE: ArrayStoreException in get*Array() method in custom Ant task
Radu,
I wrote some code to load the following resources from the
xmlbeans-generated-jar:
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/queryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/itemQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/itemQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb
I was able to load all the resources when the code was
executed from my Ant task.
Below is the code I used to test the resource
loading:
String[] res = {
"schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/queryDefinition.xsb",
"schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/itemQueryDefinition.xsb",
"schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb",
"schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb"
};
for (int i = 0; i < res.length; i++)
{
URL resUrl = QueryDefinitionSetXmlBean.class.getClassLoader().getResource(res[i]);
if (resUrl == null)
{
System.out.println("Failed to load resource " + res[i]);
}
else
{
System.out.println("Loaded resource " + resUrl);
}
}
"schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb",
"schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb"
};
for (int i = 0; i < res.length; i++)
{
URL resUrl = QueryDefinitionSetXmlBean.class.getClassLoader().getResource(res[i]);
if (resUrl == null)
{
System.out.println("Failed to load resource " + res[i]);
}
else
{
System.out.println("Loaded resource " + resUrl);
}
}
And the Ant output from my "starteam-query" custom
task:
[starteam-query] Loaded resource
jar:file:/U:/StarTeam/Working/internal/CM/StarTeam/dev/notification_server/bin/cm_notification_xm
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/queryDefinition.xsb
[starteam-query] Loaded resource jar:file:/U:/StarTeam/Working/internal/CM/StarTeam/dev/notification_server/bin/cm_notification_xm
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/itemQueryDefinition.xsb
[starteam-query] Loaded resource jar:file:/U:/StarTeam/Working/internal/CM/StarTeam/dev/notification_server/bin/cm_notification_xm
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb
[starteam-query] Loaded resource jar:file:/U:/StarTeam/Working/internal/CM/StarTeam/dev/notification_server/bin/cm_notification_xm
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/queryDefinition.xsb
[starteam-query] Loaded resource jar:file:/U:/StarTeam/Working/internal/CM/StarTeam/dev/notification_server/bin/cm_notification_xm
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/itemQueryDefinition.xsb
[starteam-query] Loaded resource jar:file:/U:/StarTeam/Working/internal/CM/StarTeam/dev/notification_server/bin/cm_notification_xm
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb
[starteam-query] Loaded resource jar:file:/U:/StarTeam/Working/internal/CM/StarTeam/dev/notification_server/bin/cm_notification_xm
lbeans.jar!/schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb
--
Tellis
From: Tellis B. Ellis, IV [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 22, 2006 4:25 PM
To: [email protected]
Subject: RE: ArrayStoreException in get*Array() method in custom Ant task
Radu,
The names of the relevant .xsb resources for this XMLBean
in the generated jar are:
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/queryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/itemQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/itemQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/changeRequestQueryDefinition.xsb
schemaorg_apache_xmlbeans/type/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/fileQueryDefinition.xsb
There is no resource named:
schemaorg_apache_xmlbeans/element/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/item_2Dquery.xsb
Is this what you would expect?
Thanks,
-- Tellis
From: Tellis B. Ellis, IV [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 22, 2006 4:04 PM
To: [email protected]
Subject: RE: ArrayStoreException in get*Array() method in custom Ant task
Thanks for the help Radu! I'll test out the resource load
using the xmlbean's classloader and let you know how it works
out.
What puzzles me somewhat is why it (XMLBeans, the java
classloader, etc) can't find the resource even if the resource is in the
same jar as the
xmlbean class file. Have you encountered anything similar in
Ant or elsewhere? Also, how did you know the name of resource it expects
is
"schemaorg_apache_xmlbeans/element/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/item_2Dquery.xsb"?
Thanks,
--
Tellis
From: Radu Preotiuc-Pietro [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 22, 2006 3:17 PM
To: [email protected]
Subject: RE: ArrayStoreException in get*Array() method in custom Ant task
Yeah, it does smell like one of those esoteric
classloader issues. Do you also use substitution groups in this context? (looks
like there probably are global element definitions corresponding to
itenQueryDefinition, changeRequestQueryDefinition and
fileQueryDefinition)
So what is happening is that XmlBeans doesn't have
access to one of the generated resources so it can resolve the subst group. The
resource name should be
"schemaorg_apache_xmlbeans/element/URI_SHA_1_1DD80F3162A834D56F4BECF11C9343A1641FECC5/item_2Dquery.xsb"
and the classloader should be com.commerce360.internal.cm.starteam.query.xml.QueryDefinitionSetXmlBean.class.getClassLoader()
(hope I'm getting this right...). In order to debug this you can resource load
that and see if ant makes it available to you, as a first
step.
I'd appreciate it if you would let us know if get more
info out of debugging this
Thanks,
Radu
From: Tellis B. Ellis,
IV [mailto:[EMAIL PROTECTED]
Sent: Tuesday, March 21, 2006 9:24 AM
To: [email protected]
Subject: RE: ArrayStoreException in get*Array() method in custom Ant task
Sent: Tuesday, March 21, 2006 9:24 AM
To: [email protected]
Subject: RE: ArrayStoreException in get*Array() method in custom Ant task
I left out some of the stacktrace:
java.lang.ArrayStoreException
at
java.lang.System.arraycopy(Native
Method)
at java.util.ArrayList.toArray(ArrayList.java:305)
at com.commerce360.internal.cm.starteam.query.xml.impl.QueryDefinitionSetXmlBeanImpl.getQueryArray(QueryDefinitionSetXmlBe
anImpl.java:59)
at java.util.ArrayList.toArray(ArrayList.java:305)
at com.commerce360.internal.cm.starteam.query.xml.impl.QueryDefinitionSetXmlBeanImpl.getQueryArray(QueryDefinitionSetXmlBe
anImpl.java:59)
Thanks,
--
Tellis
From: Tellis B. Ellis, IV [mailto:[EMAIL PROTECTED]
Sent: Tuesday, March 21, 2006 11:01 AM
To: [email protected]
Subject: ArrayStoreException in get*Array() method in custom Ant task
Fellow XMLBeans
users,
I have an xmlbean
and some code that uses the xmlbean. The code works as
expected when launched from the java command-line
or launched via
Ant's 'java' task. I wrote a simple Ant custom task to run the code. When the
custom task is executed an ArrayStoreException is thrown in the bean's
get*Array() method. I'm
using XMLBeans 2.1.0 and Ant 1.6.4. Below is a snippet from the
stacktrace:
java.lang.ArrayStoreException
at
com.commerce360.internal.cm.starteam.query.xml.impl.QueryDefinitionSetXmlBeanImpl.getQueryArray(QueryDefinitionSetXmlBeanImpl.java:59)
The XSD fragment for
the bean looks like this:
<xs:complexType name="queryDefinitionSet">
<xs:sequence>
<xs:element ref="query" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType><xs:complexType name="queryDefinition" abstract="true">
<xs:sequence>
<xs:element name="id" type="xs:ID" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="itemQueryDefinition" abstract="true">
<xs:complexContent>
<xs:extension base="queryDefinition">
<xs:sequence>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="changeRequestQueryDefinition">
<xs:complexContent>
<xs:extension base="itemQueryDefinition">
<xs:sequence>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="fileQueryDefinition">
<xs:complexContent>
<xs:extension base="itemQueryDefinition">
<xs:sequence>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="query" type="queryDefinition"/>
The code
generated for the xmlbean's getQueryArray() method looks like
this:
public class
QueryDefinitionSetXmlBeanImpl extends
org.apache.xmlbeans.impl.values.XmlComplexContentImpl implements
com.commerce360.internal.cm.starteam.query.xml.QueryDefinitionSetXmlBean
{
public QueryDefinitionSetXmlBeanImpl(org.apache.xmlbeans.SchemaType sType)
{
super(sType);
}
private static final javax.xml.namespace.QName QUERY$0 =
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "query");
private static final org.apache.xmlbeans.QNameSet QUERY$1 = org.apache.xmlbeans.QNameSet.forArray(
{
public QueryDefinitionSetXmlBeanImpl(org.apache.xmlbeans.SchemaType sType)
{
super(sType);
}
private static final javax.xml.namespace.QName QUERY$0 =
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "query");
private static final org.apache.xmlbeans.QNameSet QUERY$1 = org.apache.xmlbeans.QNameSet.forArray(
new javax.xml.namespace.QName[] {
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "item-query"),
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "file-query"),
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "change-request-query"),
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "query"),
});
/**
* Gets array of all "query" elements
*/
public com.commerce360.internal.cm.starteam.query.xml.QueryDefinitionXmlBean[] getQueryArray()
{
synchronized (monitor())
{
check_orphaned();
java.util.List targetList = new java.util.ArrayList();
get_store().find_all_element_users(QUERY$1, targetList);
com.commerce360.internal.cm.starteam.query.xml.QueryDefinitionXmlBean[] result = new
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "item-query"),
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "file-query"),
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "change-request-query"),
new javax.xml.namespace.QName("http://www.360commerce.com/internal/starteam/query/xml", "query"),
});
/**
* Gets array of all "query" elements
*/
public com.commerce360.internal.cm.starteam.query.xml.QueryDefinitionXmlBean[] getQueryArray()
{
synchronized (monitor())
{
check_orphaned();
java.util.List targetList = new java.util.ArrayList();
get_store().find_all_element_users(QUERY$1, targetList);
com.commerce360.internal.cm.starteam.query.xml.QueryDefinitionXmlBean[] result = new
com.commerce360.internal.cm.starteam.query.xml.QueryDefinitionXmlBean[targetList.size()];
targetList.toArray(result);
return result;
}
}
targetList.toArray(result);
return result;
}
}
.....
.....
......
}
The exception occurs
at the 'targetList.toArray(result)' line. What's happening is that when the code
is run as a custom ant task,
the class of the
elements in the 'targetList' ArrayList is
'org.apache.xmlbeans.impl.values.XmlAnyTypeImpl' whereas when the same
code
is successfully run
as a command-line java app, the class is
'com.commerce360.internal.cm.starteam.query.xml.impl.ChangeRequestQueryDefinitionXmlBeanImpl'.
I am using the same classpath
and input XML in
both cases.
I did some googling
and found another person who experienced the same exception but over
RMI:
Does anyone have
insight as to why the XMLBeans unmarshalling code would type my objects as
XmlAnyTypeImpl when
run as a custom Ant
task? This
smells like one of those esoteric classloader issues and I suspect it
requires a deeper knowlegde of XMLBeans
internals than I
currently have to debug it.
Any help or insights
would be appreciated.
Thanks,
--
Tellis
_______________________________________________________________________ This email message, together with any attachments, may contain of BEA Systems, Inc., its subsidiaries and affiliated that may be confidential, proprietary, copyrighted and/orprivileged, and is intended solely for the use of the individualentity named in this message. If you are not the intended recipient,have received this message in error, please immediately return thisemail and then delete it.
_______________________________________________________________________ This email message, together with any attachments, may contain of BEA Systems, Inc., its subsidiaries and affiliated that may be confidential, proprietary, copyrighted and/orprivileged, and is intended solely for the use of the individualentity named in this message. If you are not the intended recipient,have received this message in error, please immediately return thisemail and then delete it.

