[prev in list] [next in list] [prev in thread] [next in thread]
List: xmlbeans-dev
Subject: [jira] [Created] (XMLBEANS-498) XmlValueOutOfRangeException on accessing xmlbean objects by multiple
From: "Gerhard (JIRA)" <xmlbeans-dev () xml ! apache ! org>
Date: 2013-02-21 9:50:13
Message-ID: JIRA.12633363.1361440108641.316411.1361440213753 () arcas
[Download RAW message or body]
Gerhard created XMLBEANS-498:
--------------------------------
Summary: XmlValueOutOfRangeException on accessing xmlbean objects by \
multiple threads Key: XMLBEANS-498
URL: https://issues.apache.org/jira/browse/XMLBEANS-498
Project: XMLBeans
Issue Type: Bug
Components: XmlObject
Affects Versions: Version 2.3, Version 2.6
Environment: Linux Server
Reporter: Gerhard
We have two threads sharing the same xmlbeans object. Although they perform only read \
actions on it, we sometimes get exceptions like XmlValueOutOfRangeException, \
ArrayIndexOutOfBoundsException and NullPointerException. See below for example of an \
error stack.
We found out, that all of the generated xmlbean object methods are thread safe, using \
"synchonize(monitor()") - that's fine. But some basic methods do not synchronize on \
monitor().
e.g. we have a generated class EventDateImpl, which is derived from \
JavaGDateHolderEx. The method getCalendarValue() is implemented in XmlObjectBase, \
which forwards the call to JavaGDateHolderEx #calendarValue(), which accesses the \
check_date() method NOT secured by synchonize(monitor()).
This leads to a race condition:
-> XmlObjectBase#check_dated()
-> XmlObjectBase#get_wscanon_text()
-> Xobj#fetch_text (is the type store)
-> Xobj#getValueAsString()
-> getFirstChars()
-> Xobj#getChars()
-> Xobj#getCharsHelper()
-> (over)writes the _locale._offSrc and _locale._cchSrc of the common \
shared Locale which are used by both threads reading on the xmlbeans object after a \
few lines in getValueAsString():
scrub.scrub( src, _locale._offSrc, _locale._cchSrc );
This leads to reading the wrong text and invalid data.
Caused by: org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException: Invalid date \
value: 26
at org.apache.xmlbeans.impl.values.XmlObjectBase$ValueOutOfRangeValidationContext.invalid(XmlObjectBase.java:285) \
~[xmlbeans-2.3.0.jar:na]
at org.apache.xmlbeans.impl.values.JavaGDateHolderEx.lex(JavaGDateHolderEx.java:74) \
~[xmlbeans-2.3.0.jar:na]
at org.apache.xmlbeans.impl.values.JavaGDateHolderEx.set_text(JavaGDateHolderEx.java:56) \
~[xmlbeans-2.3.0.jar:na]
at org.apache.xmlbeans.impl.values.XmlObjectBase.update_from_wscanon_text(XmlObjectBase.java:1135) \
~[xmlbeans-2.3.0.jar:na]
at org.apache.xmlbeans.impl.values.XmlObjectBase.check_dated(XmlObjectBase.java:1274) \
~[xmlbeans-2.3.0.jar:na]
at org.apache.xmlbeans.impl.values.JavaGDateHolderEx.calendarValue(JavaGDateHolderEx.java:192) \
~[xmlbeans-2.3.0.jar:na]
at org.apache.xmlbeans.impl.values.XmlObjectBase.getCalendarValue(XmlObjectBase.java:1516) \
~[xmlbeans-2.3.0.jar:na]
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic