通过Spring WebServiceTemplate使用第三方Web服务

时间:2009-06-18 19:10:24

标签: web-services spring wsdl spring-ws webservicetemplate

我正在尝试通过提供的wsdl文件使用第三方Web服务。我会从WEB-INF文件夹下的基于Spring-J2EE的项目本地加载文件。

wsdl可能会暴露多个操作。所以我需要一种方法来选择要调用的方法。我还需要使用JaxbMarshaller。

任何人都可以帮助使用相同的代码段吗?

感谢您的帮助。

2 个答案:

答案 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();
            }       
}
相关问题