wsdl中定义的肥皂操作将被覆盖

时间:2019-04-01 18:33:44

标签: java soap wsdl soapheader

我有一个wsdl定义了一堆操作。其中一项定义如下:

frames[frames.Length - 1] = result;

如您所见,我专门将soapAction参数定义为<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> 。 当我使用Maven构建Java应用程序时,会使用CXF基于wsdl生成一个接口。

obtenirCommunication

当我进入此界面时,可以看到操作设置正确。

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

我可以看到我定义的操作,操作参数已正确设置。 现在,当我运行服务器并单击切换服务调用的IHM元素时,这是正在发送的SOAP消息中的操作:

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

我不知道为什么我在wsdl中特别定义的操作被<Action xmlns="http://www.w3.org/2005/08/addressing">obtenirListeCommunication</Action> 覆盖了。我应该指定obtenirListeCommunication是与我通过IHM进行的上一个调用相对应的操作。为了明确起见,首先我调用一个服务(obtenirListeCommunication),该服务将获取并显示一堆Communication对象。然后,对于每个对象,我可以调用第二个服务(obtenirListeCommunication)以获取有关特定通信的更多信息。

这就像在第一个服务调用后未刷新action参数。

我的问题是:我做错了什么?我忘了配置一些东西吗?为什么我在wsdl中指定的操作被忽略/未刷新? SOAP如何生成此类标头?

预先感谢您的帮助。

0 个答案:

没有答案