0

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

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

任何人都可以帮助提供相同的代码片段吗?

谢谢您的帮助。

4

2 回答 2

1

WebServiceTemplate 和 Spring-WS 一般不将 WSDL 作为起点。相反,它是面向模式的。

当您使用 WebServiceTemplate 时,插入 JaxmMarshaller,然后调用 marshalSendAndReceiver 方法,传入包含您要调用的 SOAP 操作的 SoapActionCallback。您可以从 WSDL 获取 SOAP 操作 URI。WebServiceTemplate 将编组您的请求,使用您指定的 SOAP 操作将其包装在 WSDL 信封中,然后将其关闭。

如果您想要一个从您的 WSDL 生成存根的框架,那么 Spring-WS 不适合您。

于 2009-06-20T08:36:59.570 回答
0

这是调用 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();
            }       
}
于 2014-12-17T07:09:26.587 回答