Невозможно выполнить банку maven docker для проекта CXF - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть работающее java решение, основанное на Apache CXF, которое потребляет некоторую SOAP услугу. И исполняемый, и затененный jar java прекрасно работают локально. Однако, когда я попытался развернуть то же решение в docker, код

Исключение в потоке "main" javax. xml .ws.WebServiceException: org. apache .cxf.service.factory.ServiceConstructionException: Не удалось создать службу. в орг. apache .cxf.jaxws.ServiceImpl.initialize (ServiceImpl. java: 162) в орг. apache .cxf.jaxws.ServiceImpl. (ServiceImpl. java: 128) в орг. apache .cxf.jaxws.spi.ProviderImpl.createServiceDelegate (ProviderImpl. java: 82) в javax. xml .ws.Service. (Сервис. java: 77) в com.flightview.BatchService. (BatchService. java: 48) at de.lh.hixca.oag.ingestionraw.OAGIngestionMainClass.main (OAGIngestionMainClass. java: 57) Причина: org. apache .cxf.service.factory.ServiceConstructionException: Не удалось создать службу , в org. apache .cxf.wsdl11.WSDLServiceFactory. (WSDLServiceFactory. java: 87) в org. apache .cxf.jaxws.ServiceImpl.initializePorts (ServiceImpl. java: 217) в org. * 1041. * .cxf.jaxws.ServiceImpl.initialize (ServiceImpl. java: 160) ... еще 5 причин: javax.wsdl.WSDLException: WSDLException: faultCode = PARSER_ERROR: проблема с анализом файла: / usr / src / app / src / main / resources / jks / oag_wsdl.wsdl '.: java .io.FileNotFoundException: /usr/src/app/src/main/resources/jks/oag_wsdl.wsdl (нет такого файла или каталога) в com. ibm.wsdl. xml .WSDLReaderImpl.getDocument (WSDLReaderImpl. java: 2198) по адресу com.ibm.wsdl. xml .WSDLReaderImpl.readWSDL (WSDLReaderImpl. java: 2390). xml .WSDLReaderImpl.readWSDL (WSDLReaderImpl. java: 2422) в орг. apache .cxf.wsdl11.WSDLManagerImpl.loadDefinition (WSDLManagerImpl. java: 266) фн. Org. WSDLManagerImpl.getDefinition (WSDLManagerImpl. java: 165) в орг. apache .cxf.wsdl11.WSDLServiceFactory. (WSDLServiceFactory. java: 85) ... еще 7 причин: java .io.Fil eNotFoundException: /usr/src/app/src/main/resources/jks/oag_wsdl.wsdl (нет такого файла или каталога) в java .io.FileInputStream.open0 (собственный метод) в java .io.FileInputStream. открыть (FileInputStream. java: 195) в java .io.FileInputStream. (FileInputStream. java: 138) в java .io.FileInputStream. (FileInputStream. java: 93) на солнце. net. www.protocol.file.FileURLConnection.connect (FileURLConnection. java: 90) на солнце. net. www.protocol.file.FileURLConnection.getInputStream (FileURLConnection. java: 188) на com.sun.org. apache .xerces.internal.impl .XMLEntityManager.setupCurrentEntity (XMLEntityManager. java: 623) на com.sun.org. apache .xerces.internal.impl.XMLVersionDetector.determineDocVersion (XMLVersionDetector. java: 148) на com. 1072 * .xerces.internal.parsers.XML11Configuration.parse (XML11Configuration. java: 806) на com.sun.org. apache .xerces.internal.parsers.XML11Configuration.parse (XML11Configuration. java: 771) на com.sun.org. apache .xerces.internal.parsers.XMLParser.parse (XMLParser. java: 141) на com.sun.org. apache .xerces.internal.parsers.DOMParser.parse ( DOM Parser. java: 243) на com.sun.org. apache .xerces.internal.jaxp.DocumentBuilderImpl.parse (DocumentBuilderImpl. java: 339) на com.ibm.wsdl. xml .WSDLReaderImpl. getDocument (WSDLReaderImpl. java: 2188) ... еще 12

Мой пример 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 http://stackoverflow.com/a/9069435/61298) -->
                                <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 для wsdl2 java цель не в состоянии распознать полный путь oag_wsdl.wsdl, который хранится в папка ресурсов? Если так, как я могу настроить свой докер-файл для того же самого?

1 Ответ

1 голос
/ 30 апреля 2020

Похоже, что ваши классы обслуживания были созданы с абсолютным путем (не из classpath):

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...