2009-06-18 4 views
0

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

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

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

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

ответ

1

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

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

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

0

Это простой способ вызова веб-сервиса. Для получения более подробной информации 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(); 
      }  
}