Apache CXF java2wsdl: имена пользовательских символов - PullRequest
0 голосов
/ 17 февраля 2020

Наше приложение java должно взаимодействовать со службой SOAP. Мы используем Apache CXF для реализации клиента jaxws. Классы генерируются с помощью wsdl2 java из файла WSDL, который мы получили от поставщика услуг.

К сожалению, имена символов, предоставляемые службой, имеют только верхний регистр и подчеркивание (например, PRODUCT_ATTACHMENT). Это очень запутанно, поскольку отличается от типичного соглашения о кодировании CamelCase java (например, ProductAttachment).

Я знаю, что вы можете определить собственные сопоставления для каждого класса. Но так как существует огромное количество классов и членов, я бы хотел автоматизировать преобразование имен символов.

Поэтому мне интересно, есть ли способ предоставить какие-то правила или фрагмент кода java (как ловушка) для wsdl2 java, который говорит ему преобразовать имя символа ABC_DEF в AbcDef в сгенерированных java классах.

Если нет, возможно, существуют альтернативные решения вместо Apache CXF, которые позволяют это.

1 Ответ

0 голосов
/ 18 февраля 2020

Вы можете попробовать использовать плагин camelcase-always . Было приведено примеров по stackoverflow его интеграции с maven-jaxb2-plugin.

Пример конфигурации для cxf-codegen-plugin:

    <dependencies>
        <dependency>
            <groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
            <artifactId>camelcase-always</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>


    <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>3.3.5</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/wsdl/customer-service.wsdl</wsdl>
                                    <wsdlLocation>classpath:wsdl/customer-service.wsdl</wsdlLocation>
                                    <extraargs>
                                        <extraarg>-verbose</extraarg>
                                        <extraarg>-xjc-camelcase-always</extraarg>
                                    </extraargs>
                                </wsdlOption>
                                <bindingFiles>
                                    <bindingFile>${basedir}/src/main/resources/wsdl/bindings/customer-service-bindings.xjb</bindingFile>
                                </bindingFiles>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
                        <artifactId>camelcase-always</artifactId>
                        <version>1.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
...