[ 
https://issues.apache.org/jira/browse/CXF-8340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17219433#comment-17219433
 ] 

olivier dufour commented on CXF-8340:
-------------------------------------


I am writing the extension on quarkus for cxf. I have read a lot of the code on 
github cxf and fixed a lot of issues but I still failed with native compilation.
I am not sure if it comes from jaxp or jaxb or cxf reflection. Anyway, an 
exception is thrown from cxf.

I have an exception:
java.lang.RuntimeException: Invalid schema document passed to 
AbstractDataBinding.addSchemaDocument, not in W3C schema namespace: schema
at 
org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:111)
at 
org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:68)
at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:408)
at 
org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
at 
org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:469)
at 
org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:693)

Analyze show that in AbstractDataBinding.addSchemaDocument the Document contain:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><schema 
xmlns:tns="http://cxf.it.quarkus.io/"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
targetNamespace="http://cxf.it.quarkus.io/"; version="1.0">
<element name="reply" type="tns:reply"/>
<element name="replyResponse" type="tns:replyResponse"/>
<complexType name="reply"><sequence><element minOccurs="0" name="text" 
type="xs:string"/></sequence></complexType>
<complexType name="replyResponse"><sequence><element minOccurs="0" 
name="return" type="xs:string"/></sequence></complexType>
</schema>

Document.getDocumentElement() return a node Schema
but .getNamespaceURI() return null.

DOMSource domSource = new DOMSource(d);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = null;
try {
    transformer = tf.newTransformer();
    transformer.transform(domSource, result);
} catch (Exception e) {
}

Logger LOG = 
LogUtils.getL7dLogger(org.apache.cxf.endpoint.dynamic.TypeClassInitializer.class);
LOG.info("DOCUMENT :"+ writer.toString());
LOG.info("DOCUMENT element :"+ d.getDocumentElement().toString());
LOG.info("DOCUMENT namespace :"+ d.getDocumentElement().getNamespaceURI());
return:
DOCUMENT : [previous schema xml]
DOCUMENT element :[schema: null]
DOCUMENT namespace :null

So, my question is:
- is my schema badly valid ?
- What is class which parse Document to produce the namespaceUri ?

I was thinking the issue may come from package-info generation but it seems oki.
Here is class decompilation from intelij:
package io.quarkus.it.cxf.jaxws_asm;

@javax.xml.bind.annotation.XmlSchema(namespace = "http://cxf.it.quarkus.io/";, 
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
interface $$package-info /* Real name is 'package-info' */ {
}

Here you have limitation of Graal in native:
https://www.graalvm.org/reference-manual/native-image/Limitations/

First, here is my work:
https://github.com/dufoli/quarkus-cxf

2 classes are very important:
https://github.com/dufoli/quarkus-cxf/blob/master/deployment/src/main/java/io/quarkus/cxf/deployment/QuarkusCxfProcessor.java
this one lists native documents and classname which need to been reflected.

https://github.com/dufoli/quarkus-cxf/blob/master/runtime/src/main/java/io/quarkus/cxf/graal/CXFSubstitutions.java
This one does substitution to remove class generation in CXF.


> Graalvm native image fails to run
> ---------------------------------
>
>                 Key: CXF-8340
>                 URL: https://issues.apache.org/jira/browse/CXF-8340
>             Project: CXF
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 3.3.7
>            Reporter: sendev
>            Assignee: Andriy Redko
>            Priority: Major
>              Labels: cxf,, graalvm, native-image
>
> Hello,
> My app is using spring boot 2.3.1 and CXF 3.3.7. I managed to create Graalvm 
> native image, now I am trying to fix the issues that is happening during 
> native image run. Currently I am encountering following issue. Looks like the 
> native image fails when tries to create bean for the soap service. Any help 
> would be appreciated. 
> I raised this issue with Spring GraalVM native community and they pointed the 
> issue to CXF. Hence I am reaching out here for help.
> [https://github.com/spring-projects-experimental/spring-graalvm-native/issues/273]
>  
> Here is the config method that creates the soap service
>  
> {code:java}
> @Bean("PublishingServiceClient")
>     public PublishingService getPublishingClient(Bus bus, SoapServiceConfig 
> soapServiceConfig) {
>         final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
>         factory.setBus(bus);
>         factory.setServiceClass(PublishingService.class);
>         factory.setAddress(soapServiceConfig.getUrl());
>         factory.setServiceName(new QName(name));
>         final List<Feature> features = factory.getFeatures();
>         if(soapServiceConfig.getMaxNumberOfRetries() > 0) {
>             features.add(getFailoverFeature(soapServiceConfig));
>         }
>         return (PublishingService) factory.create();
>     }
>       
>       private Feature getFailoverFeature(SoapServiceConfig soapServiceConfig) 
> {
>         final RetryStrategy retryStrategy = new RetryStrategy();
>         
> retryStrategy.setMaxNumberOfRetries(soapServiceConfig.getMaxNumberOfRetries());
>         
> retryStrategy.setDelayBetweenRetries(soapServiceConfig.getDelayBetweenRetries());
>         final List<String> addressList = new LinkedList<>();
>         addressList.add(soapServiceConfig.getUrl());
>         retryStrategy.setAlternateAddresses(addressList);
>         final FailoverFeature failoverFeature = new FailoverFeature();
>         failoverFeature.setStrategy(retryStrategy);
>         return failoverFeature;
>     }
> {code}
> Here is error while running native image
> {code:java}
> [2020-09-08 15:43:52.112-0500] [APP]  INFO 23684 --- [main] 
> o.a.c.w.s.f.ReflectionServiceFactoryBean : Creating Service 
> {http://mywebservice.com/publish}PublishingServiceService from class 
> com.mywebservice.publish.PublishingService
> Fatal error reported via JNI: JVM_GetSystemPackage called:  Unimplemented
> Stacktrace Stage 2:
>   SP 00000000007ce680 IP 00007ff7749dbf93  [image code] 
> com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_FatalError_dea4272cf8e20ff701a0a73f7a6d5d75e3401653(IsolateEnterStub.java:0)
>   SP 00000000007ce7c0 IP 00007ff7766cc9f4  [image code] 
> java.lang.Package.getSystemPackage0(Package.java)
>   SP 00000000007ce820 IP 00007ff7766cc8bb  [image code] 
> java.lang.Package.getSystemPackage(Package.java:544)
>   SP 00000000007ce860 IP 00007ff7766bb44c  [image code] 
> java.lang.ClassLoader.getPackage(ClassLoader.java:1618)
>   SP 00000000007ce8b0 IP 00007ff7766bb38b  [image code] 
> java.lang.ClassLoader.getPackage(ClassLoader.java:1616)
>   SP 00000000007ce900 IP 00007ff7766bb38b  [image code] 
> java.lang.ClassLoader.getPackage(ClassLoader.java:1616)
>   SP 00000000007ce950 IP 00007ff7772a3d9b  [image code] 
> org.apache.cxf.common.util.ASMHelper$TypeHelperClassLoader.defineClass(ASMHelper.java:392)
>   SP 00000000007ce9b0 IP 00007ff7772a8ab3  [image code] 
> org.apache.cxf.common.util.ASMHelper.loadClass(ASMHelper.java:321)
>   SP 00000000007ce9f0 IP 00007ff7774f2827  [image code] 
> org.apache.cxf.jaxws.WrapperClassGenerator.generatePackageInfo(WrapperClassGenerator.java:267)
>   SP 00000000007cea50 IP 00007ff7774ef654  [image code] 
> org.apache.cxf.jaxws.WrapperClassGenerator.createWrapperClass(WrapperClassGenerator.java:169)
>   SP 00000000007ceb30 IP 00007ff7774f09be  [image code] 
> org.apache.cxf.jaxws.WrapperClassGenerator.generate(WrapperClassGenerator.java:122)
>   SP 00000000007ceb70 IP 00007ff77754cd2c  [image code] 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.generatedWrapperBeanClass(JaxWsServiceFactoryBean.java:672)
>   SP 00000000007ceb90 IP 00007ff77754d3a9  [image code] 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.getExtraClass(JaxWsServiceFactoryBean.java:642)
>   SP 00000000007cebf0 IP 00007ff777699076  [image code] 
> org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:463)
>   SP 00000000007cec80 IP 00007ff77754c131  [image code] 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:693)
>   SP 00000000007ceca0 IP 00007ff7776b4182  [image code] 
> org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:529)
>   SP 00000000007cece0 IP 00007ff77769ba2b  [image code] 
> org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:262)
>   SP 00000000007ced10 IP 00007ff77754c2d1  [image code] 
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:199)
>   SP 00000000007ced40 IP 00007ff7772f55a8  [image code] 
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:103)
>   SP 00000000007cedb0 IP 00007ff7772f9796  [image code] 
> org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91)
>   SP 00000000007cedf0 IP 00007ff7772fb02a  [image code] 
> org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:159)
>   SP 00000000007cee40 IP 00007ff7774df366  [image code] 
> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)
>   SP 00000000007ceeb0 IP 00007ff7764dd302  [image code] 
> com.myapp.config.CxfConfig.gePublishingClient(CxfConfig.java:71)
>   SP 00000000007ceee0 IP 00007ff7750f7c24  [image code] 
> com.oracle.svm.reflect.CxfConfig_gePublishingClient_3d3d3b652097ee9557dd0cbed555428ec2c537c9.invoke(Unknown
>  Source)
>   SP 00000000007cef10 IP 00007ff7767445d9  [image code] 
> java.lang.reflect.Method.invoke(Method.java:498)
>   SP 00000000007cef40 IP 00007ff7788167ae  [image code] 
> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
>   SP 00000000007cefb0 IP 00007ff7787e2546  [image code] 
> org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650)
>   SP 00000000007ceff0 IP 00007ff7787e29dd  [image code] 
> org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:635)
>   SP 00000000007cf110 IP 00007ff7787b3c3e  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
>   SP 00000000007cf140 IP 00007ff7787acb88  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
>   SP 00000000007cf1a0 IP 00007ff7787adbf3  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
>   SP 00000000007cf220 IP 00007ff7787abf36  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
>   SP 00000000007cf290 IP 00007ff7787cc0f9  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
>   SP 00000000007cf2c0 IP 00007ff7787bff4e  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$2c40051508af481f3e2b011afbd5800cdeae9fd3.getObject(Unknown
>  Source)
>   SP 00000000007cf2d0 IP 00007ff77880713b  [image code] 
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
>   SP 00000000007cf340 IP 00007ff7787c2fc5  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
>   SP 00000000007cf3d0 IP 00007ff77879b8a0  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
>   SP 00000000007cf3d0 IP 00007ff77879b8a0  [image code] 
> org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
>   SP 00000000007cf3e0 IP 00007ff7787f53b8  [image code] 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1304)
>   SP 00000000007cf460 IP 00007ff7787fffdc  [image code] 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1224)
>   SP 00000000007cf4b0 IP 00007ff7787e63c9  [image code] 
> org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:884)
>   SP 00000000007cf520 IP 00007ff7787e022b  [image code] 
> org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788)
>   SP 00000000007cf640 IP 00007ff7787dbda9  [image code] 
> org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:227)
>   SP 00000000007cf730 IP 00007ff7787aad0f  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358)
>   SP 00000000007cf770 IP 00007ff7787acef0  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204)
>   SP 00000000007cf7d0 IP 00007ff7787adbf3  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
>   SP 00000000007cf850 IP 00007ff7787abf36  [image code] 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
>   SP 00000000007cf8c0 IP 00007ff7787cc0f9  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
>   SP 00000000007cf8f0 IP 00007ff7787bff4e  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$2c40051508af481f3e2b011afbd5800cdeae9fd3.getObject(Unknown
>  Source)
>   SP 00000000007cf900 IP 00007ff77880713b  [image code] 
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
>   SP 00000000007cf970 IP 00007ff7787c2fc5  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
>   SP 00000000007cfa00 IP 00007ff7787fbcfa  [image code] 
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
>   SP 00000000007cfa00 IP 00007ff7787fbcfa  [image code] 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:893)
>   SP 00000000007cfa60 IP 00007ff778a709a1  [image code] 
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
>   SP 00000000007cfaa0 IP 00007ff778a7668a  [image code] 
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
>   SP 00000000007cfb00 IP 00007ff7789fc201  [image code] 
> org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
>   SP 00000000007cfb20 IP 00007ff77885b17b  [image code] 
> org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
>   SP 00000000007cfb20 IP 00007ff77885b17b  [image code] 
> org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
>   SP 00000000007cfb50 IP 00007ff77885b1e9  [image code] 
> org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
>   SP 00000000007cfb70 IP 00007ff77885b978  [image code] 
> org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
>   SP 00000000007cfbe0 IP 00007ff77885c433  [image code] 
> org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
>   SP 00000000007cfc00 IP 00007ff7764da85a  [image code] 
> org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
>   SP 00000000007cfc00 IP 00007ff7764da85a  [image code] 
> com.myapps.MainApplication.main(LocalAbeServiceApplication.java:23)
>   SP 00000000007cfc70 IP 00007ff7749e917f  [image code] 
> com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:149)
>   SP 00000000007cfc70 IP 00007ff7749e917f  [image code] 
> com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:184)
>   SP 00000000007cfc70 IP 00007ff7749e917f  [image code] 
> com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(IsolateEnterStub.java:0)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to