Указание имени пакета при использовании Maven для генерации Java из WSDL

Я использую maven script для генерации кода Java, который мне нужен для связи с сервисом WCF. Я получил связь, и я готов интегрировать свой maven script и код, который он создает, с остальной частью java-кода из проекта.

Однако я не могу получить maven для генерации кода с правильным именем пакета, которое я хочу. Из того, что я читал в Интернете, я должен использовать тег, и я видел два возможных места, где это происходит. Я включил сегмент script, я думаю, что они должны войти, и оба они есть. Однако эти теги ничего не влияют, и код генерируется так же, как и без них.

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>${cxf.version}</version>
            <configuration>
                        <packageName>com.name.server.cxf</packageName>                      
                    <sourceRoot>src/com/server/cxf</sourceRoot>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>src/com/server/cxf/code-generation/service.xml</wsdl>
                                <bindingFiles>
                                    <bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile>
                                </bindingFiles> 
                                <extraargs>
                                    <extraarg>-validate</extraarg>
                                    <extraarg>-client</extraarg>
                                    <extraarg>-verbose</extraarg>
                                    <extraarg>-xjc-verbose</extraarg>
                                </extraargs>
                            </wsdlOption>
                        </wsdlOptions>
                        <verbose />
                    </configuration>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                    <configuration>
                        <packageName>com.name.server.cxf</packageName>      
                    </configuration>
                </execution>
            </executions>
        </plugin>

Возможно, я использую неправильный тег или, возможно, он не в том месте?

Ответ 1

Добавьте <extraarg>-p</extraarg><extraarg>com.name.server.cxf</extraarg> в раздел <extraargs> внутри тега <wsdlOption>. Для меня работает следующая (немного другая версия).

       <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>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>src/com/server/cxf/code-generation/service.xml</wsdl>
                                <bindingFiles>
                                    <bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile>
                                </bindingFiles>
                                <extraargs>
                                    <extraarg>-validate</extraarg>
                                    <extraarg>-client</extraarg>
                                    <extraarg>-verbose</extraarg>
                                    <extraarg>-xjc-verbose</extraarg>
                                    <extraarg>-p</extraarg>
                                    <extraarg>com.name.server.cxf</extraarg>
                                </extraargs>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

В качестве альтернативы создайте файл service-options в src/com/server/cxf/code-generation/ с содержимым -p com.name.server.cxf

Ответ 2

Это очень хорошо для меня:

<wsdlOption>
                                <wsdl>src/main/resources/wsdl/my_wsdl.wsdl</wsdl>
                                <extraargs>
                                    <extraarg>-p</extraarg>
                                    <extraarg>http://services.demo.es/=com.my.package.demo1</extraarg>
                                    <extraarg>-p</extraarg>
                                    <extraarg>http://tempuri.org/=com.my.package.demo2</extraarg>
                                    <extraarg>-exsh</extraarg>
                                    <extraarg>true</extraarg>
                                    <extraarg>-client</extraarg>
                                    <extraarg>-wsdlLocation</extraarg>
                                    <extraarg></extraarg>
                                </extraargs>
                            </wsdlOption>

Ответ 3

Вышеприведенное решение с

<extraarg>-p</extraarg>
<extraarg>com.name.server.cxf</extraarg>

Является изменением имени пакета сгенерированного источника в одном пакете, из-за которого классы ObjectFactory переопределяются. Мне нужна такая структура пакета, как на основе wsld. Наряду с пакетом дополнений.

Примеры Java-классов создаются как com.service.name.mypackage.a, com.service.name.mypackage.b, com.service.name.mypackage.c