Как избежать кодекса CXF от изменения имен элементов в схеме? - PullRequest
0 голосов
/ 23 октября 2018

Я использую cxf-codegen-plugin v. 3.2.4 в проекте maven.WSDL ссылается на схему:

<xsd:import namespace="http://mynamespace/"
                        schemaLocation="../schema/MySchema.xsd"/>

Но когда запускается сгенерированный Сервер, опубликованный wsdl ссылается на схему следующим образом:

<xsd:import namespace="http://mynamespace/" schemaLocation="http://localhost:9999/?xsd=1"/>

И этот сгенерированный xsd изменил имена аргументов дляданный метод.Исходная схема имеет следующее определение:

<xs:complexType name="myMethod">
        <xs:sequence>
            <xs:element name="messageHeader" type="tns:soapMessageHeader" minOccurs="0"/>
            <xs:element name="myId" type="xs:string" minOccurs="0"/>
            <xs:element name="mySecondId" type="xs:string" minOccurs="0"/>
            <xs:element name="myThirdId" type="xs:string" minOccurs="0"/>
            <xs:element name="password" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

Принимая во внимание, что сгенерированная схема имеет следующее:

<xs:complexType name="myMethod">
<xs:sequence>
   <xs:element name="arg0" type="tns:soapMessageHeader" minOccurs="0"/>
   <xs:element name="arg1" type="xs:string" minOccurs="0"/>
   <xs:element name="arg2" type="xs:string" minOccurs="0"/>
   <xs:element name="arg3" type="xs:string" minOccurs="0"/>
   <xs:element name="arg4" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>

Она изменила имена элементов с определенных на «arg0», «arg... ".Мне нужно, чтобы это не было сделано.

У моего pom есть это:

<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>${source.wsdl.path}</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/wsdl/MyServiceDefinition.wsdl</wsdl>
                                    <extraargs>
                                        <extraarg>-impl</extraarg>
                                        <extraarg>-verbose</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Автоматически сгенерированный интерфейс для сервиса имеет аннотацию @WebParam.

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

В http://www.benmccann.com/web-services-tutorial-with-apache-cxf автор указывает на использование атрибута аннотации endpointInterface для соблюдения аннотаций внутри автоматически сгенерированного интерфейса (самим cxf):

@WebService(endpointInterface = "com.company.auth.service.AuthService",
            serviceName = "corporateAuthService")

Эта альтернатива не требует дополнительной конфигурации xml.

Документация Tomcat EE дает нам законченный пример: http://tomee.apache.org/examples-trunk/simple-webservice

Еще один вопрос о стекопереработке, который может быть связан: jax-ws относительно endpointinterface

0 голосов
/ 23 октября 2018

Я только что понял: хотя сгенерированный интерфейс для сервиса имеет аннотацию @WebParam, соответствующий конкретный класс, реализующий EndPoint, не имеет его.Я думал, что это не будет проблемой, так как интерфейс имеет аннотацию.Затем я попытался добавить их к параметрам и вуаля!Сгенерированный xsd неожиданно выходит правильно, и я могу прочитать параметры!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...