wso2 wso2esb saxon

wso2 - Error XSLT-Se excedió el límite de NamePool



wso2esb saxon (2)

Esto fue ampliamente discutido en 2011 en el hilo al que gentilmente se refiere Jean-Michel.

Desde entonces, ha habido desarrollos adicionales para reducir la dependencia de NamePool. Una de las más importantes es tal vez que cuando utiliza modelos de árbol de terceros como JDOM2 o AXIOM, los códigos de nombre NamePool ya no se asignan. Por lo tanto, si cambió su procesamiento para usar dicho modelo de árbol, podría procesar los archivos XML extraños generados por Axis2 (que usan grandes cantidades de prefijos de espacio de nombres) sin inflar los límites de Saxon.

Construí un proxy en WSO2 ESB 4.6.0 que procesa muchos mensajes, pero ahora lanza esta excepción.
¿Por qué sucede y cómo puedo solucionar esto?

ERROR {org.apache.synapse.mediators.transform.XSLTMediator} - Unable to perform XSLT transformation using : Value {name =''null'', keyValue =''conf:ManageWorkforce/xslt/SoapFaultToStandardHeader.xsl''} against source XPath : s11:Body/child::*[position()=1] | s12:Body/child::*[position()=1] {org.apache.synapse.mediators.transform.XSLTMediator} net.sf.saxon.om.NamePool$NamePoolLimitException: NamePool limit exceeded: max 1023 prefixes per URI at net.sf.saxon.om.NamePool.allocate(NamePool.java:437) at net.sf.saxon.om.FingerprintedQName.allocateNameCode(FingerprintedQName.java:99) at net.sf.saxon.tree.tiny.TinyBuilder.startElement(TinyBuilder.java:235) at net.sf.saxon.event.ReceivingContentHandler.startElement(ReceivingContentHandler.java:285) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:405) at net.sf.saxon.event.Sender.send(Sender.java:178) at net.sf.saxon.Controller.transform(Controller.java:1790) at org.apache.synapse.mediators.transform.XSLTMediator.performXSLT(XSLTMediator.java:289) at org.apache.synapse.mediators.transform.XSLTMediator.mediate(XSLTMediator.java:191) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:112) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:230) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:443) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:166) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:217) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)

EDITAR

Me he dado cuenta de que para las operaciones del DSS con la casilla "Estado de solicitud de devolución" marcada, la devolución es algo así como:

<axis2ns5:REQUEST_STATUS xmlns:axis2ns5="http://ws.wso2.org/dataservice">SUCCESSFUL</axis2ns5:REQUEST_STATUS>

donde el número 5 en el prefijo se incrementa para cada solicitud de servicio. Supongo que cuando este número llega a 1024, ocurre este error.

Me gustaría descubrir cómo prevenir esto.