ArrayIndexOutOfBoundsException when using saveDataGraph
-------------------------------------------------------
Key: TUSCANY-2778
URL: https://issues.apache.org/jira/browse/TUSCANY-2778
Project: Tuscany
Issue Type: Bug
Components: Java SDO Implementation
Affects Versions: Java-SDO-1.1
Environment: windows, java
Reporter: Yan
Priority: Critical
In my project, for every service call response, I need to use saveDataGraph to
translate Datagraph to XML string. So I have a function called bind:
public static String bind( final DataGraph graph ) throws IOException
{
if ( graph != null && graph.getRootObject() != null )
{
ByteArrayOutputStream os = new ByteArrayOutputStream();
Map<String, Object> options = new HashMap<String, Object>();
options.put( "DECLARE_XML", Boolean.FALSE );
SDOUtil.saveDataGraph( graph, os, options );
final String xml = os.toString();
return xml;
}
return null;
}
This works fine most of the time. However, if I have too many service calls,
which in turn calls the bind function for too many times, the following problem
happens. It seems saveDataGraph has some problem in clearing out the buffer?
java.lang.ArrayIndexOutOfBoundsException: 8192
at
org.eclipse.emf.ecore.xmi.impl.StringSegment.writeAscii(StringSegment.java:322)
at
org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.writeAscii(XMLSaveImpl.java:900)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.save(XMLSaveImpl.java:237)
at
org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doSave(XMLResourceImpl.java:203)
at
org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:993)
at
org.apache.tuscany.sdo.helper.SDOHelperImpl.saveDataGraph(SDOHelperImpl.java:220)
at org.apache.tuscany.sdo.api.SDOUtil.saveDataGraph(SDOUtil.java:175)
at
com.abacus.aim.service.util.DataGraphUtils.bind(DataGraphUtils.java:80)
at
com.abacus.aim.service.translation.LookupQueryTranslation.processRequest(LookupQueryTranslation.java:57)
at
com.abacus.aim.service.translation.ServiceTranslation.process(ServiceTranslation.java:113)
at sun.reflect.GeneratedMethodAccessor364.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:275)
at
org.springframework.jms.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:452)
at
org.springframework.jms.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:354)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:506)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:463)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:435)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:407)
at
org.springframework.jms.listener.SimpleMessageListenerContainer.processMessage(SimpleMessageListenerContainer.java:228)
at
org.springframework.jms.listener.SimpleMessageListenerContainer$2.onMessage(SimpleMessageListenerContainer.java:205)
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:946)
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:122)
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:192)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:118)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:42)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Thank you very much for your help!!
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.