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

Freeman Fang edited comment on CXF-7932 at 12/28/18 4:22 AM:
-------------------------------------------------------------

Hi,

Since JDK11, jaxb module(along with several others) was removed from JDK, and 
DynamicClientFactory needs to use jaxb api. So we need to put jaxb api on the 
classpath. The tricky part is that when using "java -jar", it will override the 
classpath you specified, so we can add the necessary classpath in manifest.

I will append a testcase(sandbox-springboot-cxf-ws-jdk11.tar) based on yours to 
demonstrate it. After "mvn clean install" you  can use 
java -jar application.jar
with jdk11.

Freeman


was (Author: ffang):
Hi,

Since JDK11, jaxb module(along with several others) was removed from JDK, and 
DynamicClientFactory needs to use jaxb api. So we need to put jaxb api on the 
classpath. The tricky part is that when using "java -jar", it will override the 
classpath you specified, so we can add the necessary classpath in manifest.

I will append a testcase based on yours to demonstrate it. After "mvn clean 
install" you  can use 
java -jar application.jar
with jdk11.

Freeman

> JaxWsDynamicClientFactory in Spring Boot fat JAR with JDK11 leads to 
> JAXBException ... doesnt contain ObjectFactory.class or jaxb.index
> ---------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-7932
>                 URL: https://issues.apache.org/jira/browse/CXF-7932
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime, JAXB Databinding
>    Affects Versions: 3.2.7
>         Environment: OpenJDK 11
>            Reporter: Alexander Kosarev
>            Assignee: Freeman Fang
>            Priority: Major
>              Labels: jdk11, spring-boot
>         Attachments: sandbox-springboot-cxf-ws-jdk11.tar, 
> sandbox-springboot-cxf-ws.zip
>
>
> I have a project based on Spring Boot and packaged as a fat JAR. When I try 
> to run the application with Java 11, 
> JaxWsDynamicClientFactory.createClient(...) leads to an error like 
> 'javax.xml.bind.JAXBException: "..." doesnt contain ObjectFactory.class or 
> jaxb.index'.
> {code:java}
> Caused by: java.lang.IllegalStateException: Unable to create JAXBContext for 
> generated packages: "net.gcomputer.webservices" doesnt contain 
> ObjectFactory.class or jaxb.index
>     at 
> org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:417)
>  ~[cxf-rt-frontend-simple-3.2.7.jar!/:3.2.7]
>     at 
> org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:244)
>  ~[cxf-rt-frontend-simple-3.2.7.jar!/:3.2.7]
>     at 
> org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:237)
>  ~[cxf-rt-frontend-simple-3.2.7.jar!/:3.2.7]
>     at 
> org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:192)
>  ~[cxf-rt-frontend-simple-3.2.7.jar!/:3.2.7]
>     at 
> name.alexkosarev.sandbox.SandboxSpringbootCxfWsApplication.lambda$commandLineRunner$0(SandboxSpringbootCxfWsApplication.java:33)
>  [classes!/:1.0.0]
>     at 
> org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813)
>  [spring-boot-2.1.1.RELEASE.jar!/:2.1.1.RELEASE]
>     ... 13 common frames omitted
> Caused by: javax.xml.bind.JAXBException: "net.gcomputer.webservices" doesnt 
> contain ObjectFactory.class or jaxb.index
>     at 
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:284) 
> ~[jaxb-runtime-2.3.0.jar!/:2.3.0]
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method) ~[na:na]
>     at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>  ~[na:na]
>     at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  ~[na:na]
>     at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
>     at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:217) 
> ~[jaxb-api-2.3.1.jar!/:2.3.0]
>     at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:175) 
> ~[jaxb-api-2.3.1.jar!/:2.3.0]
>     at javax.xml.bind.ContextFinder.find(ContextFinder.java:353) 
> ~[jaxb-api-2.3.1.jar!/:2.3.0]
>     at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:508) 
> ~[jaxb-api-2.3.1.jar!/:2.3.0]
>     at 
> org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:413)
>  ~[cxf-rt-frontend-simple-3.2.7.jar!/:3.2.7]
>     ... 18 common frames omitted
> {code}
> Startup command looks like:
> {code:java}
> java -jar application.jar
> {code}
> Problem doesn't appear if I use 'exploded' (unzipped) JAR instead of fat. 
> Startup command looks like:
> {code:java}
> java -classpath "/path/to/BOOT-INF/classes:/path/to/BOOT-INF/lib/*" 
> my.main.ClassName{code}
> Problem also doesn't appear if I run the application with Java 8 (with both 
> jars).
> [~snicoll] suggested to post it here, because "it might be related to the way 
> the resources is located".



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

Reply via email to