Использование сторонних веб-сервисов через Spring WebServiceTemplate - PullRequest
0 голосов
/ 18 июня 2009

Я пытаюсь использовать сторонний веб-сервис через предоставленный файл wsdl. Я бы загружал файл локально из проекта на основе Spring-J2EE в папке WEB-INF.

В wsdl может быть открыто более одной операции. Поэтому мне нужен способ, чтобы иметь возможность выбрать метод для вызова. Мне также нужно использовать JaxbMarshaller.

Может кто-нибудь помочь с фрагментом кода для того же?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 20 июня 2009

WebServiceTemplate и Spring-WS в целом не рассматривают WSDL в качестве отправной точки. Скорее, он ориентирован на схему.

Когда вы используете WebServiceTemplate, вы подключаете JaxmMarshaller, а затем вызываете методы marshalSendAndReceiver, передавая SoapActionCallback, который содержит действие SOAP, которое вы хотите вызвать. Вы можете получить URI действия SOAP из WSDL. WebServiceTemplate упорядочит ваш запрос, поместит его в конверт WSDL с указанным вами действием SOAP и сработает.

Если вам нужна среда, которая генерирует заглушки из вашего WSDL, то Spring-WS не для вас.

0 голосов
/ 17 декабря 2014

Это простой метод вызова веб-службы. Подробнее Нажмите здесь

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();
            }       
}
...