Java 11:在karaf 4.2.7上启动Soap WS时出现问题

Java 11:在karaf 4.2.7上启动Soap WS时出现问题,soap,jax-ws,java-11,apache-karaf,Soap,Jax Ws,Java 11,Apache Karaf,我正在进行从java8到java11的java迁移。 java11上排除的包中有javax.xml.ws,它由web服务使用。 我添加了jaxws-rt2.3.3-b01作为pom文件的依赖项。 这个版本还可以。 部署失败,因为jaxws rt正在jvm com.sun.xml.internal.ws.spi.ProviderImpl上搜索ProviderImpl,但没有找到它:java.lang.ClassNotFoundException:com.sun.xml.internal.ws.sp

我正在进行从java8到java11的java迁移。 java11上排除的包中有javax.xml.ws,它由web服务使用。 我添加了jaxws-rt2.3.3-b01作为pom文件的依赖项。 这个版本还可以。 部署失败,因为jaxws rt正在jvm com.sun.xml.internal.ws.spi.ProviderImpl上搜索ProviderImpl,但没有找到它:java.lang.ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl

之后,我在apache-karaf-4.2.7/lib/boot/目录上添加了两个jars-jaxws-api-2.3.1.jar和jaxws-rt-2.3.3-b01.jar,以便在karaf start上加载。我还添加了以下行:

wrapper.java.additional.13=-Djavax.xml.ws.spi.Provider=com.sun.xml.ws.spi.ProviderImpl

在karaf-wrapper.conf文件中定义新的ProviderImpl,而不是Java 11上删除的旧ProviderImpl

但是在启动WS时,我仍然有这个阻塞错误:

Caused by: java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: com.sun.xml.ws.spi.ProviderImpl not a subtype
        at java.util.ServiceLoader.fail(ServiceLoader.java:588) ~[?:?]
        at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1236) ~[?:?]
        at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1264) ~[?:?]
        at java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1299) ~[?:?]
        at java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1384) ~[?:?]
        at javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:63) ~[jaxws-api-2.3.1.jar:?]
        at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:89) ~[jaxws-api-2.3.1.jar:?]
        at javax.xml.ws.spi.Provider.provider(Provider.java:96) ~[jaxws-api-2.3.1.jar:?]
        at javax.xml.ws.Service.<init>(Service.java:112) ~[jaxws-api-2.3.1.jar:?]
        at fr.asipsante.psig.service.signalement.PSIGSignalement.<init>(PSIGSignalement.java:39) ~[?:?]
        at fr.gouv.sante.sivss.psig.service.PsigSignalementWebService.createPSIGSignalementWebService(PsigSignalementWebService.java:70) ~[?:?]
        at fr.gouv.sante.sivss.psig.service.PsigSignalementWebService.init(PsigSignalementWebService.java:48) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
        at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337) ~[!/:1.10.2]
        at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835) ~[!/:1.10.2]
        at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591) ~[!/:1.10.2]
        ... 55 more

我尝试了不同的解决方案,但仍然不明白遗漏了什么

注意:如果有人想查看有关解决方案实施的信息,我可以提供更多详细信息。
提前感谢您的建议!!Anas

您不应该将这些jar添加到karaf lib文件夹中。最好添加apachecxf特性,然后安装cxfjaxws特性。这将安装CXF和基本SOAP捆绑包

更新日期:2020年11月11日:

对于您的项目,有许多事情正在进行。我建议从karafsoap示例开始,然后根据该项目调整代码。它将部署并解决与SOAP相关的API和Impl JAR的依赖性问题

Java8到Java11的变化 XML和SOAP已作为标准API和JDK附带的实现被删除。现在,任何Java8-to-11项目在部署时都需要包含这些API和implJAR。然而,卡拉夫已经为你提供了保障。安装cxf jaxws功能部件,您就可以使用了。 部署到卡拉夫。这个项目以前在卡拉夫运行过吗

SOAP实现—您正在尝试使用SOAP ri进行部署。Karaf已经使用ApacheCXF解决了所有依赖关系管理问题。我建议您使用CXF—它有更多的功能,包括度量、日志记录和安全性。ApacheCXF在商业和开源SOAP产品中广泛用于企业用例

Karaf提供了一个开箱即用的SOAP示例:

您的日志语句指示使用EclipseOSGi运行时,而不是Karaf的默认Felix。有理由改变吗


这没用。。。。未解决的需求:导入包:javax.xml.ws;version=[2.3.0,3.0.0在org.eclipse.osgi.container.Module.startModule.java:444~[?:?]在org.eclipse.osgi.internal.framework.EquinoxBundle.startEquinoxBundle.java:383~[?:?]我更新了我的答案..我不知道为什么会有人投票反对它.这么有趣