我正在尝试通过提供的 wsdl 文件来使用第三方 Web 服务。我将从 WEB-INF 文件夹下的基于 Spring-J2EE 的项目本地加载文件。
wsdl 可能暴露了多个操作。所以我需要一种方法来选择要调用的方法。我还需要使用 JaxbMarshaller。
任何人都可以帮助提供相同的代码片段吗?
谢谢您的帮助。
我正在尝试通过提供的 wsdl 文件来使用第三方 Web 服务。我将从 WEB-INF 文件夹下的基于 Spring-J2EE 的项目本地加载文件。
wsdl 可能暴露了多个操作。所以我需要一种方法来选择要调用的方法。我还需要使用 JaxbMarshaller。
任何人都可以帮助提供相同的代码片段吗?
谢谢您的帮助。
WebServiceTemplate 和 Spring-WS 一般不将 WSDL 作为起点。相反,它是面向模式的。
当您使用 WebServiceTemplate 时,插入 JaxmMarshaller,然后调用 marshalSendAndReceiver 方法,传入包含您要调用的 SOAP 操作的 SoapActionCallback。您可以从 WSDL 获取 SOAP 操作 URI。WebServiceTemplate 将编组您的请求,使用您指定的 SOAP 操作将其包装在 WSDL 信封中,然后将其关闭。
如果您想要一个从您的 WSDL 生成存根的框架,那么 Spring-WS 不适合您。
这是调用 Web 服务的简单方法。详情请点击这里
public void createSoapActionCallBack(ValidateCardRequest validateCardRequest) {
//This is used to send header message
SoapActionCallback actionCallBack=new SoapActionCallback(soapAction);
try{
actionCallBack = new SoapActionCallback(SOAPACTION_DEFAULT_URL) {
public void doWithMessage(WebServiceMessage msg) {
SoapMessage smsg = (SoapMessage)msg;
SoapHeader soapHeader = smsg.getSoapHeader();
try{
//To send header message
StringSource headerSource = new StringSource("<UserCredentials xmlns='URL'>\n" +
"<userid>"+"ABCD"+"</userid>\n" +
"<password>"+"ABCD"+"</password>\n" +
"</UserCredentials>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, soapHeader.getResult());
smsg.setSoapAction(soapAction);
}catch(Exception e)
{
e.printStackTrace();
}
}
};
validateCardResponse = (FVValidateCardResponse) webServiceTemplate.marshalSendAndReceive(URL, validateCardRequest, actionCallBack);
} catch (Exception e) {
e.printStackTrace();
}
}