Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
3.3.0
-
None
-
Unknown
Description
I am using CXF as webservice client for years and since the migration of my application from Java 8 to Java 11 I have noticed a performance degradation on very big request
after digging in the code I found following methods in DOMUtils.java
/** * Try to get the DOM Node from the SAAJ Node with JAVA9 afterwards * @param node The original node we need check * @return The DOM node */ public static Node getDomElement(Node node) { if (node != null && isJava9SAAJ()) { //java9plus hack try { Method method = node.getClass().getMethod("getDomElement"); node = (Node)method.invoke(node); } catch (NoSuchMethodException e) { //best effort to try, do nothing if NoSuchMethodException } catch (Exception e) { throw new RuntimeException(e); } } return node; }
CXF-7270 + CXF-7683 + CXF-7741 + CXF-7847
when getDomelement() method doesn't exist on the Node, an exception of type NoSuchMethodException is created which normally takes 1 milliseconds (mainly used to fill the stacktrace)
(similar problem for getDomDocumentFragment() method)
but if the document is really big and contains more than 30'000 elements, the repetitive creation of this exception could cost a some seconds ...
I have fixed this performance by caching node without getDomElement() method to avoid repetitive exception but I am not sure if it's a good solution
can you help me with this performance problem?
Attachments
Issue Links
- links to