cxf-codegen-plugin случайно завершается с AccessDeniedException - PullRequest
0 голосов
/ 28 февраля 2019

Создан вопрос только для того, чтобы сохранить мое решение для моей проблемы и сделать его доступным для всех.Ближайший вопрос без ответа: apache cxf wsdl2java Не удалось сгенерировать типы-> Отказано в доступе

Я пробовал разные способы, упомянутые там (fork = всегда, отключить кэширование диска в Windows, закрытьдругие программы и т. д.) и ничего не помогло.Поэтому я потратил много времени, пытаясь понять, что не так и почему cxf-codegen-plugin создает AccessDeniedException, например:

[WARNING] Exception in thread "main" org.apache.cxf.tools.common.ToolException: Failed to generate types.
[WARNING] 	at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.generate(JAXBDataBinding.java:849)
[WARNING] 	at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:727)
[WARNING] 	at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:267)
[WARNING] 	at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164)
[WARNING] 	at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412)
[WARNING] 	at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105)
[WARNING] 	at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
[WARNING] 	at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
[WARNING] 	at org.apache.cxf.maven_plugin.wsdl2java.ForkOnceWSDL2Java.main(ForkOnceWSDL2Java.java:51)
[WARNING] Caused by: java.nio.file.AccessDeniedException: E:\Projects\example-project\example-module\target\generated-sources\cxf\com\package\SomeClass.java
[WARNING] 	at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
[WARNING] 	at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
[WARNING] 	at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
[WARNING] 	at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
[WARNING] 	at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:434)
[WARNING] 	at java.nio.file.Files.newOutputStream(Files.java:216)
[WARNING] 	at org.apache.cxf.tools.util.OutputStreamCreator.createOutputStream(OutputStreamCreator.java:33)
[WARNING] 	at org.apache.cxf.tools.wsdlto.databinding.jaxb.TypesCodeWriter.openBinary(TypesCodeWriter.java:72)
[WARNING] 	at com.sun.codemodel.CodeWriter.openSource(CodeWriter.java:100)
[WARNING] 	at com.sun.codemodel.JPackage.createJavaSourceFileWriter(JPackage.java:490)
[WARNING] 	at com.sun.codemodel.JPackage.build(JPackage.java:441)
[WARNING] 	at com.sun.codemodel.JCodeModel.build(JCodeModel.java:311)
[WARNING] 	at com.sun.codemodel.JCodeModel.build(JCodeModel.java:301)
[WARNING] 	at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.generate(JAXBDataBinding.java:837)
[WARNING] 	... 8 more

Наконец-то сам нашел решение для себя.Размещать это здесь для всех.В моем случае было сгенерировано несколько конечных точек из нескольких файлов WSDL, они использовали общий набор файлов XSD, то есть общие классы, которые использовались и генерировались в каждом WSDL.Итак, я выделил генерацию всех таких классов в отдельный шаг - сгенерируйте их до генерации конечных точек.Теперь они генерируются с помощью jaxb2-maven-plugin из этих XSD, а конечные точки генерируются впоследствии с помощью cxf-codegen-plugin, как и раньше, но с исключениями, позволяющими избежать генерации этих классов, например:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-common-jaxb-classes</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <arguments>
                            <argument>-Xnamespace-prefix</argument>
                            <argument>-XtoString</argument>
                            <argument>-Xequals</argument>
                            <argument>-XhashCode</argument>
                            <argument>-Xinheritance</argument>
                            <argument>-Xvalue-constructor</argument>
                        </arguments>
                        <sources>
                            <source>xsd/BaseTypes.xsd</source>
                            <source>xsd/EntityDocument.xsd</source>
                            <source>xsd/ScheduleDocument.xsd</source>                                
                        </sources>
                        <xjbSources>
                            <xjbSource>bindings/bindingsCommon.xjb</xjbSource>
                        </xjbSources>
                        <outputDirectory>${project.basedir}/target/generated-sources/jaxb/common</outputDirectory>
                    </configuration>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-endpoints</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <fork>once</fork>
                        <encoding>UTF-8</encoding>
                        <defaultOptions>
                            <bindingFiles>
                                <bindingFile>bindings/bindingsCommon.xjb</bindingFile>
                            </bindingFiles>
                            <extraargs>
                                <extraarg>
                                    -xjc-target,2.0,-Xnamespace-prefix,-XtoString,-Xequals,-XhashCode,-Xinheritance,-Xvalue-constructor
                                </extraarg>
                                <extraarg>-verbose</extraarg>
                                <extraarg>-nexclude</extraarg>
                                <extraarg>http://entsoe.etse.com/internal/type</extraarg>
                                <extraarg>-nexclude</extraarg>
                                <extraarg>http://some.site.com/internal/type/schedule</extraarg>
                                <extraarg>-nexclude</extraarg>
                               <extraarg>http://some.site.com/internal/type/entity</extraarg>
                            </extraargs>
                        </defaultOptions>
                        <wsdlRoot>wsdl</wsdlRoot>
                        <includes>
                            <include>*.wsdl</include>
                        </includes>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Hopeэто помогает кому-то сэкономить время на поиски решений самостоятельно ...

...