Torsten Liermann created CXF-9130:
-------------------------------------

             Summary: WrapperClassLoader.generate() should not add null values; 
createWrapperClass() should log a warning when failing to create wrapper class
                 Key: CXF-9130
                 URL: https://issues.apache.org/jira/browse/CXF-9130
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime
    Affects Versions: 4.1.1
         Environment: * Spring Boot 3.4.4

 * Apache CXF 4.1.1

 * Java 17 & 21

 * GraalVM Native Image 24.0.1

Problem reproducible on both standard JVM and native-image environments.
            Reporter: Torsten Liermann


In `WrapperClassLoader.generate()`, the returned `Set<Class<?>> wrapperBeans` 
may contain null values if the call to `createWrapperClass(...)` returns null.

This situation can occur when the service metadata (MessagePartInfo, 
OperationInfo) is incomplete or when the wrapper class cannot be properly 
generated due to missing or non-existent generated classes.

Currently, no warning is logged when `createWrapperClass(...)` fails to find or 
create a wrapper class.
This leads to:

- `null` entries in the wrapperBeans Set
- Later `NullPointerException`s (e.g., when iterating over the Set)
- Very difficult diagnosis, especially in GraalVM Native Image mode, but 
reproducible even on the JVM if using a custom WrapperClassLoader.
h3. Suggestion
 * In `createWrapperClass(...)`, if no suitable wrapper class is found after 
the loop, log a **warning** like: "Failed to find or generate wrapper class for 
operation '{}', method '{}'. This may lead to runtime errors.", 
             op.getName(), ....
 * In {{{}generate(){}}}, add wrapper classes only if they are not {{null}}

h3. Background

Initially, this issue appeared while compiling a Spring Boot application with 
CXF 4.1.1 into a GraalVM Native Image. However, after deeper debugging, the 
real root cause was reproducible *also in standard JVM mode* when setting a 
{{WrapperClassLoader}} manually:

{{bus.setExtension(new WrapperClassLoader(bus), WrapperClassCreator.class);}}

Incidentally, before I investigated this problem more deeply, I had already 
opened the [following question | 
https://stackoverflow.com/questions/79590372/apache-cxf-4-1-1-jax-ws-endpoint-throws-nullpointerexception-at-jaxbutils-scanpa]on
 Stack Overflow.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to