spring-projects / spring-ws

Spring Web Services
https://spring.io/projects/spring-ws
Apache License 2.0
314 stars 304 forks source link

GraalVM Native Image support #1329

Open naihil opened 1 year ago

naihil commented 1 year ago

This is not a bug report, only my experiments to build spring-ws in native image. I have a simple project that uses WebServiceTemplate to send/receive SOAP messages. It compiles fine but there were several runtime exceptions. To resolve them I need following files in META-INF/native-image:

  1. reflect-config.json:
    
    [
    {
    "name" : "com.sun.org.apache.xpath.internal.functions.FuncNormalizeSpace",
    "allDeclaredConstructors": true
    },
    {
    "name" : "org.springframework.ws.soap.saaj.SaajSoapMessageFactory",
    "allDeclaredConstructors": true
    },
    {
    "name" : "org.springframework.ws.transport.http.HttpUrlConnectionMessageSender",
    "allDeclaredConstructors": true
    },
    {
    "name" : "org.springframework.ws.soap.client.core.SoapFaultMessageResolver",
    "allDeclaredConstructors": true
    },
    {
    "name" : "org.springframework.ws.soap.server.endpoint.adapter.method.SoapMethodArgumentResolver",
    "allDeclaredConstructors": true
    },
    {
    "name" : "org.springframework.ws.soap.server.endpoint.adapter.method.SoapHeaderElementMethodArgumentResolver",
    "allDeclaredConstructors": true
    }
    ]

2. resource-config.json:

{ "resources": { "includes": [ { "pattern": "\Qorg\/springframework\/ws\/transport\/http\/MessageDispatcherServlet.properties\E" }, { "pattern": "\Qorg\/springframework\/ws\/client\/core\/WebServiceTemplate.properties\E" }, { "pattern": "\Qorg\/springframework\/ws\/server\/MessageDispatcher.properties\E" }, { "pattern": "\Qorg\/springframework\/ws\/soap\/server\/SoapMessageDispatcher.properties\E" } ] } }



Maybe this helps someone to submit official support to spring-ws.
ksilz commented 1 year ago

@naihil Thank you! Worked like a charm for me!

How do find out this stuff?

NicklasWallgren commented 5 months ago

@naihil Thank you! Worked like a charm for me!

How do find out this stuff?

@ksilz You can find parts of it using the native-image-agent.

@naihil Thanks!

plebcity commented 1 month ago

This is one of the reasons why we stopped using native image. There are too many libraries even from Spring themselves that don't support it fully yet which means it requires a lot of maintenance work for us.