Я использую 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 ...". Мне нужно, чтобы этого не было.

В моем помпе есть это:

<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.

Кто-нибудь может мне помочь?

cxf
1
Leonardo Machado 23 Окт 2018 в 19:08

2 ответа

Лучший ответ

В 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 / простой вебсервис

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

0
Amadeu Barbosa 24 Окт 2018 в 14:02

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

0
Leonardo Machado 23 Окт 2018 в 18:10
52953503