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.
Puede encontrar detalles de este problema allí: http://sourceforge.net/p/saxon/mailman/message/27969616/
Este es un límite global de diferentes prefijos para el mismo espacio de nombres
Una solución sería normalizar los prefijos, si puedes