Hello!

I’m trying to build a Spring Boot 3.4.4 application using CXF 4.1.1 with JAX-WS 
endpoints on GraalVM 24 (native-image) under Windows 11.

The native executable is successfully created, but execution fails when the 
first JAX-WS endpoint is initialized, throwing the following exception:


    Caused by: java.lang.NullPointerException
        at 
org.apache.cxf.common.util.PackageUtils.getPackageName(PackageUtils.java:47)
        at org.apache.cxf.common.jaxb.JAXBUtils.scanPackages(JAXBUtils.java:865)
        ...

The SpringBus is extended as follows:

     bus.setExtension(new WrapperHelperClassLoader(bus), 
WrapperHelperCreator.class);
    bus.setExtension(new ExtensionClassLoader(bus), 
ExtensionClassCreator.class);
    bus.setExtension(new ExceptionClassLoader(bus), 
ExceptionClassCreator.class);
    bus.setExtension(new WrapperClassLoader(bus), WrapperClassCreator.class);
    bus.setExtension(new FactoryClassLoader(bus), FactoryClassCreator.class);
    bus.setExtension(new GeneratedNamespaceClassLoader(bus), 
NamespaceClassCreator.class);

The endpoint is created like this:

    EndpointImpl endpoint = new EndpointImpl(bus, usermanagement);
    endpoint.publish("/usermanagement");

And the usermanagement class is annotated as:

    @WebService(
        endpointInterface = "de.x.y.IUsermanagement",
        targetNamespace = "http://www.xyz.de/usermanagement";
    )

 wouldn’t expect a NullPointerException at JAXBUtils.scanPackages() or 
ReflectionServiceFactoryBean, and the same application runs fine on the JVM.

I looked at the official CXF example jaxws_graalvm hoping for guidance. I 
managed to build it with GraalVM 24 by extending the native-image.properties, 
but execution fails with this:

    Exception in thread "main" org.apache.cxf.bus.extension.ExtensionException: 
Could not load extension class 
org.apache.cxf.jaxws.spi.WrapperClassNamingConvention$DefaultWrapperClassNamingConvention.
            at 
org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:184)
            at 
org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:200)
            at 
org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:139)
            at 
org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:145)
            at 
org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:157)
            at demo.jaxws.server.Server.<init>(Server.java:33)
            at demo.jaxws.server.Server.main(Server.java:43)
            at 
java.base@24.0.1/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
    Caused by: java.lang.ClassNotFoundException: 
org.apache.cxf.jaxws.spi.WrapperClassNamingConvention$DefaultWrapperClassNamingConvention
            at 
java.base@24.0.1/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:59)
            at 
java.base@24.0.1/java.lang.ClassLoader.loadClass(ClassLoader.java:115)
            at 
org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:167)
            ... 7 more

I’ll likely submit this issue as a bug report against the example.

But my main question is:
Do you have any suggestions on how to solve or debug the NullPointerException 
in scanPackages() when building JAX-WS endpoints with CXF on GraalVM native 
image?

Thanks in advance – the application behaves perfectly fine on the JVM.

Greetings from Munich,
Torsten





Reply via email to