Действие мыла, определенное в wsdl, перезаписывается - PullRequest
1 голос
/ 01 апреля 2019

У меня есть wsdl, определяющий кучу операций. Один из которых определяется следующим образом:

<wsdl:operation name="obtenirCommunication">
            <wsdl:documentation/>
            <soap:operation soapAction="obtenirCommunication" 
    style="document"/>
            <wsdl:input>
                <soap:body parts="requete" use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body parts="reponse" use="literal"/>
            </wsdl:output>
            <wsdl:fault name="fault">
                <soap:fault name="fault" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>

Как видите, я специально определяю параметр soapAction как obtenirCommunication. Когда я создаю свое Java-приложение с Maven, интерфейс создается на основе wsdl с использованием CXF.

<jaxws:client id="servicesFondationProxy" serviceName="srv:DesjServiceDivulgation"
        serviceClass="com.desjardins.finances.divulgation.divulgations.services.fondation.service.http.DesjServiceDivulgation"
        address="${com/desjardins/finances/divulgation/divulgations/Services_fondation_endpoint}">
        <jaxws:outInterceptors>
            <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
                <constructor-arg>
                    <map>
                        <entry key="action" value="UsernameToken" />
                        <entry key="user" value="[...]" />
                        <entry key="passwordType" value="PasswordText" />
                        <entry key="passwordCallbackRef" value-ref="sfPasswordCallback" />
                    </map>
                </constructor-arg>
            </bean>
            <bean
                class="com.desjardins.finances.divulgation.divulgations.accesServicesFondation.CustomFieldInjectHandler"
                scope="singleton">
            </bean>
        </jaxws:outInterceptors>
        <jaxws:features>
            <wsa:addressing xmlns:wsa="http://cxf.apache.org/ws/addressing" />
        </jaxws:features>

    </jaxws:client>

Когда я захожу в этот интерфейс, я вижу, что операция установлена ​​правильно.

        @WebResult(name = "ObtenirCommunicationReponse", targetNamespace = "[...]", partName = "requete")
    @WebMethod(action = "obtenirCommunication")
    public ObtenirCommunicationReponseType obtenirCommunication(
        @WebParam(partName = "requete", name = "ObtenirCommunicationRequete", targetNamespace = "[...]")
        ObtenirCommunicationRequeteType requete
    ) throws Fault;

Я вижу операцию, которую я определил, параметр действия установлен правильно. Теперь, когда я запускаю свой сервер и нажимаю на элемент IHM, который переключает вызов службы, вот действие в отправляемом сообщении SOAP:

<Action xmlns="http://www.w3.org/2005/08/addressing">obtenirListeCommunication</Action>

Я не могу понять, почему действие, которое я определил в моем wsdl, перезаписывается с помощью obtenirListeCommunication. Я должен указать, что obtenirListeCommunication - это действие, соответствующее предыдущему вызову, который я выполняю при прохождении IHM. Чтобы уточнить, сначала я вызываю службу (obtenirListeCommunication), которая извлекает и отображает группу объектов Communication. Для каждого из этих объектов я могу позвонить во вторую службу (obtenirCommunication), чтобы получить больше информации о конкретной связи.

Это похоже на то, что параметр action не обновляется после первого вызова службы.

Мой вопрос: что я сделал не так? Я забыл что-то настроить? Почему действие, указанное в моем wsdl, игнорируется / не обновляется? Как SOAP генерирует такие заголовки?

Заранее спасибо за помощь.

...