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.

Leave a Reply

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.