Gilles Diacon created CXF-8028:
----------------------------------

             Summary: Performance problem with very big request 
                 Key: CXF-8028
                 URL: https://issues.apache.org/jira/browse/CXF-8028
             Project: CXF
          Issue Type: Bug
          Components: Core, JAX-WS Runtime
    Affects Versions: 3.3.0
            Reporter: Gilles Diacon


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}}
{code: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;
}
{code}
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?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to