我正在尝试通过提供的wsdl文件使用第三方Web服务。我会从WEB-INF文件夹下的基于Spring-J2EE的项目本地加载文件。
wsdl可能会暴露多个操作。所以我需要一种方法来选择要调用的方法。我还需要使用JaxbMarshaller。
任何人都可以帮助使用相同的代码段吗?
感谢您的帮助。
答案 0 :(得分:1)
WebServiceTemplate和Spring-WS通常不会将WSDL视为起点。相反,它是面向架构的。
当您使用WebServiceTemplate时,您插入JaxmMarshaller,然后调用marshalSendAndReceiver方法,传入一个SoapActionCallback,其中包含您要调用的SOAP Action。您可以从WSDL获取SOAP操作URI。 WebServiceTemplate将封送您的请求,使用您指定的SOAP操作将其包装在WSDL信封中,然后将其关闭。
如果你想要一个从你的WSDL生成存根的框架,那么Spring-WS不适合你。
答案 1 :(得分:0)
这是调用Web服务的简单方法。有关详细信息Click here
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();
}
}