【発生している例外】
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:687)
at com.nexaweb.xml.ParserImpl.pushEntity(ParserImpl.java:1733)
at com.nexaweb.xml.ParserImpl.pushText(ParserImpl.java:1782)
at com.nexaweb.xml.ParserImpl.nextImpl(ParserImpl.java:1291)
at com.nexaweb.xml.ParserImpl.next(ParserImpl.java:922)
at com.nexaweb.xml.DocumentImpl.<init>(DocumentImpl.java:163)
at com.nexaweb.xml.DocumentImpl.<init>(DocumentImpl.java:126)
at com.nexaweb.xml.DocumentImpl.<init>(DocumentImpl.java:208)
at com.nexaweb.xml.ParserImpl.parseXml(ParserImpl.java:412)
at com.nexaweb.client.net.impl.HttpMessageImpl.toDocument(Unknown Source)
at jp.co.fujitsu.reffi.client.nexaweb.model.HTTPRequestCore.requestCompleted(HTTPRequestCore.java:570)
at com.nexaweb.client.netservice.impl.AbstractRequestServiceImpl$NetServiceListenerTask.run(Unknown Source)
at com.nexaweb.client.UiUpdateQueue$WrapperRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
【異常事象概要】 Reffi for Nexaweb2.0を利用するアプリケーションにて 特定の値を含むresponseを受けた場合に処理異常となる事象が発生
DBサーバから取得したデータをAPサーバで加工しクライアントに返してるが、 APサーバ→クライアント時の処理(フレームワークの処理)で例外が発生する。 フレームワークで発生している例外はハンドリングされておらず、業務アプリ側に通知されない。 また、クライアント側は待ち続ける事により画面が固まる。
【発生している例外】 java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(String.java:687) at com.nexaweb.xml.ParserImpl.pushEntity(ParserImpl.java:1733) at com.nexaweb.xml.ParserImpl.pushText(ParserImpl.java:1782) at com.nexaweb.xml.ParserImpl.nextImpl(ParserImpl.java:1291) at com.nexaweb.xml.ParserImpl.next(ParserImpl.java:922) at com.nexaweb.xml.DocumentImpl.<init>(DocumentImpl.java:163) at com.nexaweb.xml.DocumentImpl.<init>(DocumentImpl.java:126) at com.nexaweb.xml.DocumentImpl.<init>(DocumentImpl.java:208) at com.nexaweb.xml.ParserImpl.parseXml(ParserImpl.java:412) at com.nexaweb.client.net.impl.HttpMessageImpl.toDocument(Unknown Source) at jp.co.fujitsu.reffi.client.nexaweb.model.HTTPRequestCore.requestCompleted(HTTPRequestCore.java:570) at com.nexaweb.client.netservice.impl.AbstractRequestServiceImpl$NetServiceListenerTask.run(Unknown Source) at com.nexaweb.client.UiUpdateQueue$WrapperRunnable.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
【requestCompleted()における処理概要】 ①当該処理はAPサーバの正常処理完了時に呼ばれ、 HttpResponseを元にクライアント側Action処理へ結果を通知する。 ②requestCompleted()内にてNexawebの機能を使いDOM化を試行する。 responseがstreamである場合、XMLでないためParser例外が発生する。 ③Parser例外の場合Streamをシリアライズして返す。
特定の値(※)を含むresponseの場合、②の処理においてParser例外ではなく StringIndexOutOfBoundsが発生する。 StringIndexOutOfBounds例外はrequestCompleted()内においてハンドリングされていないため 以降の処理が停止する。
(※) long/int型に数値として9787を設定している場合に発生する
9787のビット列をASCIIコードで見ると"&;"となり、 DOM化の処理で通常と異なる例外が返されるのは 上記の数値や文字列を文字参照やエンティティ参照とみなしているからではないか。
【サポートリクエスト】 responseのstreamにlong/intに9787が設定されている場合も 異常停止とならずに③の処理に分岐できるようにしたい。