it-notepad.com

Java Soap client

Java Soap client

В предыдущей заметке было написано, как поднять SOAP веб сервис за 5 минут. В этой заметке, мы напишем SOAP клиент за те же самые 5 минут 😉  Вопреки ожиданиям, делать это мы будем вовсе не встроенными средствами Java SE. Мы будем использовать библиотеку KSOAP. Т.к. по своей специализации, я являюсь Android разработчиком, данный код будет прекрасно работать как в Java SE, так и в Android. У нас есть некий SOAP метод getCodeUser. На вход он принимает String параметр  “user”, на выходе возвращает String параметр некого кода.

public class GetCodeUser {

    String user;

    public GetCodeUser(String user){
       this.user = user;
    }

    public String soapRequest() {
       HttpTransportSE httpTransport=null;

       try{
          String method = "getCodeUser";
          SoapObject request = new SoapObject(MainAsync.NAMESPACE, method);

          PropertyInfo pi1 = new PropertyInfo();
          pi1.setName("user");
          pi1.setValue(user);
          pi1.setType(String.class);
          request.addProperty(pi1);

          SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
          envelope.setOutputSoapObject(request);
          httpTransport = new HttpTransportSE(MainAsync.wsdlSchema);

          httpTransport.debug=true;
          httpTransport.call(MainAsync.getSoapAction(method), envelope);

          SoapObject result =(SoapObject) envelope.bodyIn;
          String objectSerialization = result.getProperty("return").toString();

          return objectSerialization;</pre>
     } catch (Exception e) {

          return"";
     } finally{
         if(httpTransport!=null)
             httpTransport.reset();
     }
  }

}

 

Параметры запроса очень простые:

MainAsync.NAMESPACE - пространство имен. В wsdl оно прекрасно видно в описании.
MainAsync.wsdlSchema - ссылка с wsdl SOAP веб сервиса.

И отдельно надо немного написано про статический метод : MainAsync.getSoapAction(method) - Если при работе с SOAP библиотекой получаете Exception, связанный с неправильным именем веб метода, при вызове добавьте следующее форматирование:

public static String getSoapAction(String method) {
    return "\"" + NAMESPACE + method + "\"";
}

 

P.S. для новичков подскажу – если собираетесь использовать данный код в Android, не забудьте завернуть этот код как минимум в отдельный поток, а лучше всего в AsyncTask.

Exit mobile version