我有一个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如何生成此类标头?
预先感谢您的帮助。