After applying IS 6.5 SP2, we noticed that we were receiving ClassCastExceptions from the pub.xml:xmlNodeToDocument service when a value for its nsDecls parameter was mapped implicitly. Note that this implicit mapping was done intentionally to use a consistent set of namespace declarations throughout a service.
The steps to reproduce this issue are relatively simple:
- Create node using pub.xml:xmlStringToXmlNode. The xml string used in my example was a soap request from which I wanted to extract a wsse:UsernameToken.
- Use pub.xml:queryXmlNode to extract a portion of a document in a separate node (specify nsDecls parameter with several prefix and ns declarations)
- Use pub.xml:xmlNodeToDocument to attempt to create document from node. Use implicitly assigned value for nsDecls populated in step 2 above
- Step 3 will throw ClassCastException (see stacktrace below).
A workaround is to drop nsDecls after step 2.
My assertion is that this should not fail or if it does fail, it should throw an exception more meaningful than a CCE.
Any ideas on why xmlNodeToDocument would throw a class cast exception when nsDecls was populated?
Mark
com.wm.app.b2b.server.ServiceException: java.lang.ClassCastException
at pub.xml.xmlNodeToDocument(xml.java:594)
at sun.reflect.GeneratedMethodAccessor69.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:322)
at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:612)
at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:44)
at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:226)
at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:198)
at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:39)
at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:411)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:521)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:369)
at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:246)
at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:168)
at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:324)
at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:581)
at com.wm.lang.flow.FlowState.step(FlowState.java:438)
at com.wm.lang.flow.FlowState.invoke(FlowState.java:403)
at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:982)
at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:612)
at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:44)
at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:226)
at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
at com.wm.app.b2b.server.ACLManager.process(ACLMan