无法为 CXF 项目执行 maven docker jar
Unable to execute maven docker jar for CXF project
我有一个基于 Apache CXF 的现有工作 java 解决方案来使用一些 SOAP 服务。 java 可执行文件和阴影 jar 在本地都可以正常工作。但是,当我尝试在 docker 中部署相同的解决方案时,代码
Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to
create service.
at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:162)
at org.apache.cxf.jaxws.ServiceImpl.(ServiceImpl.java:128)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82)
at javax.xml.ws.Service.(Service.java:77)
at com.flightview.BatchService.(BatchService.java:48)
at de.lh.hixca.oag.ingestionraw.OAGIngestionMainClass.main(OAGIngestionMainClass.java:57)
Caused by:
org.apache.cxf.service.factory.ServiceConstructionException: Failed to
create service.
at org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:87)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:217)
at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:160)
... 5 more Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing
'file:/usr/src/app/src/main/resources/jks/oag_wsdl.wsdl'.:
java.io.FileNotFoundException:
/usr/src/app/src/main/resources/jks/oag_wsdl.wsdl (No such file or
directory)
at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2390)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2422)
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:266)
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:165)
at org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:85)
... 7 more Caused by: java.io.FileNotFoundException: /usr/src/app/src/main/resources/jks/oag_wsdl.wsdl (No such file or
directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:148)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:806)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2188)
... 12 more
我的样本 pom.xml 看起来像这样
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-bundle -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-compatible</artifactId>
<version>3.3.6</version>
</dependency>
<!--some other dependencies-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>my.correct.main.class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!--shadded plugin-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<!-- transformers for CXF (see -->
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/com.sun.tools.xjc.Plugin</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/cxf/cxf.extension</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/extensions.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/cxf/extensions.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/cxf/bus-extensions.txt</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/cxf/bus-extensions.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/wsdl.plugin.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/tools.service.validator.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/cxf/java2wsbeans.xml</resource>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/jks/oag_wsdl.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我用于 docker 构建的 docker 文件是:
#
# Build stage
#
FROM maven:3.5-jdk-8 AS build
#copying .m2 settings.xml for profile
COPY settings.xml /root/.m2/
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
ENV http_proxy "http://<username>:<password>@<host>:<port>"
ENV https_proxy "http://<username>:<password>@<host>:<port>"
RUN apt-get update \
&& apt-get install --no-install-recommends -y openjfx \
&& apt-get clean
RUN mvn -f /usr/src/app/pom.xml clean package
#
# Package stage
FROM gcr.io/distroless/java
COPY --from=build /usr/src/app/target/ingestion-oag-using-soap-1.0-SNAPSHOT.jar /usr/app/ingestion-oag-using-soap-1.0-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/app/ingestion-oag-using-soap-1.0-SNAPSHOT.jar"]
我的 pom.xml for wsdl2java 目标是否存在无法识别存储在资源文件夹中的完整 oag_wsdl.wsdl
路径的问题?如果是这样,我该如何调整我的 docker 文件?
您的服务 类 似乎是使用绝对路径(不是来自类路径)生成的:
Caused by: java.io.FileNotFoundException: /usr/src/app/src/main/resources/jks/oag_wsdl.wsdl
尝试添加 wsdlLocation 参数以生成正确的 wsdl 路径:
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/jks/oag_wsdl.wsdl</wsdl>
<wsdlLocation>classpath:jks/oag_wsdl.wsdl</wsdlLocation>
<!-- <wsdlLocation>/jks/oag_wsdl.wsdl</wsdlLocation> -->
</wsdlOption>
</wsdlOptions>
我有一个基于 Apache CXF 的现有工作 java 解决方案来使用一些 SOAP 服务。 java 可执行文件和阴影 jar 在本地都可以正常工作。但是,当我尝试在 docker 中部署相同的解决方案时,代码
Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:162) at org.apache.cxf.jaxws.ServiceImpl.(ServiceImpl.java:128) at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82) at javax.xml.ws.Service.(Service.java:77) at com.flightview.BatchService.(BatchService.java:48) at de.lh.hixca.oag.ingestionraw.OAGIngestionMainClass.main(OAGIngestionMainClass.java:57) Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. at org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:87) at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:217) at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:160) ... 5 more Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'file:/usr/src/app/src/main/resources/jks/oag_wsdl.wsdl'.: java.io.FileNotFoundException: /usr/src/app/src/main/resources/jks/oag_wsdl.wsdl (No such file or directory) at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198) at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2390) at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2422) at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:266) at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:165) at org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:85) ... 7 more Caused by: java.io.FileNotFoundException: /usr/src/app/src/main/resources/jks/oag_wsdl.wsdl (No such file or directory) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(FileInputStream.java:195) at java.io.FileInputStream.(FileInputStream.java:138) at java.io.FileInputStream.(FileInputStream.java:93) at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90) at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623) at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:148) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:806) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2188) ... 12 more
我的样本 pom.xml 看起来像这样
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-bundle -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-compatible</artifactId>
<version>3.3.6</version>
</dependency>
<!--some other dependencies-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>my.correct.main.class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!--shadded plugin-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<!-- transformers for CXF (see -->
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/com.sun.tools.xjc.Plugin</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/cxf/cxf.extension</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/extensions.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/cxf/extensions.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/cxf/bus-extensions.txt</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/cxf/bus-extensions.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/wsdl.plugin.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/tools.service.validator.xml</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
<resource>META-INF/cxf/java2wsbeans.xml</resource>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/jks/oag_wsdl.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我用于 docker 构建的 docker 文件是:
#
# Build stage
#
FROM maven:3.5-jdk-8 AS build
#copying .m2 settings.xml for profile
COPY settings.xml /root/.m2/
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
ENV http_proxy "http://<username>:<password>@<host>:<port>"
ENV https_proxy "http://<username>:<password>@<host>:<port>"
RUN apt-get update \
&& apt-get install --no-install-recommends -y openjfx \
&& apt-get clean
RUN mvn -f /usr/src/app/pom.xml clean package
#
# Package stage
FROM gcr.io/distroless/java
COPY --from=build /usr/src/app/target/ingestion-oag-using-soap-1.0-SNAPSHOT.jar /usr/app/ingestion-oag-using-soap-1.0-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/app/ingestion-oag-using-soap-1.0-SNAPSHOT.jar"]
我的 pom.xml for wsdl2java 目标是否存在无法识别存储在资源文件夹中的完整 oag_wsdl.wsdl
路径的问题?如果是这样,我该如何调整我的 docker 文件?
您的服务 类 似乎是使用绝对路径(不是来自类路径)生成的:
Caused by: java.io.FileNotFoundException: /usr/src/app/src/main/resources/jks/oag_wsdl.wsdl
尝试添加 wsdlLocation 参数以生成正确的 wsdl 路径:
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/jks/oag_wsdl.wsdl</wsdl>
<wsdlLocation>classpath:jks/oag_wsdl.wsdl</wsdlLocation>
<!-- <wsdlLocation>/jks/oag_wsdl.wsdl</wsdlLocation> -->
</wsdlOption>
</wsdlOptions>