Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / web-сервис для приложения / 25 сообщений из 26, страница 1 из 2
05.11.2013, 16:18
    #38453299
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
Товарищи, всем доброго времени суток.
Появилась необходимость реализовать простую связку
"Логика на сервере + клиент в виде мобилки". Ну то есть реализовать наверное, самый распространнённый вариант приложения хоть на Android, хоть на iOS.

Накидал тестовый вебсервис в нетбинсе(glassfish3):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package androws;    
import javax.jws.WebService;

@WebService(serviceName = "AndroWS", endpointInterface = "androws.AndroWS")
public class AndroWS implements IAndroWS{
    @Override
    public String hello(String name) {
        return "Hello " + name + " !";
    }
}

package androws;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;

@WebService(name = "AndroWS", 
            targetNamespace = "http://androws/", 
            wsdlLocation="WEB- INF/wsdl/AndroWS.wsdl")
interface IAndroWS { 
   @WebMethod(operationName = "hello")
   public String hello(@WebParam(name = "name")String name);
}


Сервис, насколько я понимаю, валидный - деплоиться нормально, тест в нетбинсе проходит.
Его wsdl:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<message name="helloResponse">
    <part name="parameters" element="tns:helloResponse"/>
</message>

<portType name="AndroWS">
    <operation name="hello">
        <input wsam:Action="http://androws/AndroWS/helloRequest" 
               message="tns:hello"/>
        <output wsam:Action="http://androws/AndroWS/helloResponse" 
                message="tns:helloResponse"/>
    </operation>
</portType>

<binding name="AndroWSPortBinding" type="tns:AndroWS">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="hello">
       <soap:operation soapAction=""/>
          <input>
             <soap:body use="literal"/>
          </input>
          <output>
             <soap:body use="literal"/>
          </output>
    </operation>
</binding>

<service name="AndroWS">
    <port name="AndroWSPort" binding="tns:AndroWSPortBinding">
        <soap:address location="http://10.0.2.15:8080/TestAndroWS/AndroWS"/>
    </port>
</service>

</definitions>



по гайду накидал простое приложение в эклписе.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
private static final String NAMESPACE = "http://androws/";
private static String URL = "http://10.0.2.15:8080/TestAndroWS/AndroWS?WSDL"; 
private static final String METHOD_NAME = "hello";
private static final String SOAP_ACTION =  "http://androws/hello";

@Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       TextView lblResult = (TextView) findViewById(R.id.result);
       SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

       PropertyInfo property = new PropertyInfo();
       property.name = "name";
       property.setNamespace(NAMESPACE);
       property.type = PropertyInfo.STRING_CLASS;
       property.setValue("John Smith"); 
       request.addProperty(property);

       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
       envelope.setOutputSoapObject(request);
       envelope.implicitTypes = true;
       HttpTransportSE http = new HttpTransportSE(URL,30000);
       try {
          http.call(SOAP_ACTION, envelope); 
          SoapObject resultsRequestSOAP = (SoapObject)envelope.bodyIn;
          lblResult.setText(resultsRequestSOAP.getPropertyAsString("result"));
       } catch (Exception e) {
         /* some code, witch printing results in textview */        
       }
  }
}




Но проблема - нет коннекта - на вызове
...
Рейтинг: 0 / 0
05.11.2013, 16:26
    #38453315
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
В продолжении:
Но проблема - нет коннекта на вызове
Код: java
1.
http.call(SOAP_ACTION, envelope); 


падает с NPE.

Ну во-первых, очень интересно, что именно делаю не так.
А ещё, после изучения этого вопроса инете, понял, что вариант такого соединения не особо популярен.
По этому ещё такой вопрос: как вообще принято реализовывать подобную связку?
...
Рейтинг: 0 / 0
05.11.2013, 16:55
    #38453368
Ivo
Ivo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDart, зачем Вам SOAP для данного use-case? Реализуйте REST-архитектуру.
...
Рейтинг: 0 / 0
05.11.2013, 17:16
    #38453403
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
Мне soap показался более подходящим под мои задачи.
Если дело не в архитектуре, давайте вернёмся к тому что есть.
...
Рейтинг: 0 / 0
05.11.2013, 18:57
    #38453592
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
Не знаю точно с какой версии, если на 2.х работает, то на 4.х, точно не работает.

Все сетевые соединения !
не разрешается делать в главном потоке.
создавайте новый поток и работайте с соап там!
...
Рейтинг: 0 / 0
05.11.2013, 18:57
    #38453594
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
зы.

JSON - с ним как то приятнее работать.

ну лично мне.
...
Рейтинг: 0 / 0
05.11.2013, 19:14
    #38453606
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
ДжибсНе знаю точно с какой версии, если на 2.х работает, то на 4.х, точно не работает.

Имеете в виду версию системы Android?

ДжибсВсе сетевые соединения !

Если я Вас правильно понимаю - вероятнее всего, дело в сетевых соединениях?
...
Рейтинг: 0 / 0
05.11.2013, 20:07
    #38453654
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDartНо проблема - нет коннекта - на вызовеКак тестируете: на устройстве, на эмуляторе? В эмуляторе работает?
Если да, то проблема скорее всего в том, о чём пишет Джибс.
...
Рейтинг: 0 / 0
05.11.2013, 21:48
    #38453731
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
skyANAPavelDartНо проблема - нет коннекта - на вызовеКак тестируете: на устройстве, на эмуляторе? В эмуляторе работает?
Если да, то проблема скорее всего в том, о чём пишет Джибс.

Тестирую в эмуляторе.
Target = 4.3
...
Рейтинг: 0 / 0
05.11.2013, 23:17
    #38453807
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDart, хорошо. Пробовали отлаживаться?

Походу значение URL должно быть таким: " http://10.0.2.15:8080/TestAndroWS/AndroWS", - без "?WSDL" на конче.
Покажите что отображается в браузере по ссылке " http://10.0.2.15:8080/TestAndroWS/AndroWS?WSDL".
...
Рейтинг: 0 / 0
06.11.2013, 01:12
    #38453866
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDartskyANAпропущено...
Как тестируете: на устройстве, на эмуляторе? В эмуляторе работает?
Если да, то проблема скорее всего в том, о чём пишет Джибс.

Тестирую в эмуляторе.
Target = 4.3

ну тогда внимательно, еще раз перечитываем ошибку в logcat
...
Рейтинг: 0 / 0
06.11.2013, 11:39
    #38454190
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
Сперва хотел бы поблагодарить небезучастных к моей проблеме - спасибо большое, глядишь, и разрезолвим проблему.

skyANAPavelDart, хорошо. Пробовали отлаживаться?

Конечно пробовал. Да только вызов идёт из скомпиленного джарника - смотреть там нечего :)
Вообще же, вся эта активность производилась по этому гайду, к сожалению, ссылку в первый пост вставить не успел:
http://www.ibm.com/developerworks/webservices/library/ws-android/index.html

Гайд получил немалую огласку, соответственно, есть положительные воспроизведения. В разных источниках говориться о нескольких неточностях в гайде. В своём варианте я постарался разумно собрать лучшие решения, что нашёл.

skyANAПокажите что отображается в браузере по ссылке " http://10.0.2.15:8080/TestAndroWS/AndroWS?WSDL".

Отображается содержимое wsdl, как и должно быть, как я понимаю.
wsdl ещё раз:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://androws/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"
   targetNamespace="http://androws/" 
   name="AndroWS">

<types>
   <xsd:schema>
       <xsd:import namespace="http://androws/"
           schemaLocation="http://10.0.2.15:8080/TestAndroWS/AndroWS?xsd=1"/>
   </xsd:schema>
</types>

<message name="hello">
    <part name="parameters" element="tns:hello"/>
</message>

<message name="helloResponse">
    <part name="parameters" element="tns:helloResponse"/>
</message>

<portType name="AndroWS">
    <operation name="hello">
        <input wsam:Action="http://androws/AndroWS/helloRequest" 
               message="tns:hello"/>
        <output wsam:Action="http://androws/AndroWS/helloResponse" 
                message="tns:helloResponse"/>
    </operation>
</portType>

<binding name="AndroWSPortBinding" type="tns:AndroWS">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="hello">
       <soap:operation soapAction=""/>
          <input>
             <soap:body use="literal"/>
          </input>
          <output>
             <soap:body use="literal"/>
          </output>
    </operation>
</binding>

<service name="AndroWS">
    <port name="AndroWSPort" binding="tns:AndroWSPortBinding">
        <soap:address location="http://10.0.2.15:8080/TestAndroWS/AndroWS"/>
    </port>
</service>

</definitions>



Вообще же моё мнение - стопудово здесь ошибка с обращением к веб-серверу или в wsdl, потому как среди увиденного мною кода удачных примеров, код андроид-приложения практически один-в-один из примера в пример. Пусть даже, на сколько возможно, я постарался повторить приведённый в гайде ws, но где-то видимо промахнулся. Ещё один момент был - свою разработку я вёл под виртуалбоксовской виртуалкой - там не раз сталкивался с проблемами сетевыми, по этому вчера вечером воспроизвёл на другой уже "железной" винде - результат тот же.
...
Рейтинг: 0 / 0
06.11.2013, 13:26
    #38454385
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDart, не знал, что в нетбинс так всё печально с отладкой. Отлаживайтесь через эклипс

Что касается wsdl:
Код: xml
1.
<soap:address location="http://10.0.2.15:8080/TestAndroWS/AndroWS"/>


Почему в коде:
Код: java
1.
private static String URL = "http://10.0.2.15:8080/TestAndroWS/AndroWS?WSDL";

?
...
Рейтинг: 0 / 0
06.11.2013, 13:44
    #38454426
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
А, понял. Надо идти в статье разбираться. Разберитесь с отладкой и напишите какого типа исключение возникает.
...
Рейтинг: 0 / 0
06.11.2013, 15:54
    #38454723
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDart,

поставь эмулятор версии 2.хх и тестируй
...
Рейтинг: 0 / 0
07.11.2013, 09:42
    #38455565
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
skyANAА, понял. Надо идти в статье разбираться. Разберитесь с отладкой и напишите какого типа исключение возникает.
LogCat, если не ошибаюсь так называется, возвращает то, что я озвучил в первом сообщении - NullPointerException, дальше то по стэктрейсу уходит в методы, там уже ничего интересного.

ДжибсPavelDart,
поставь эмулятор версии 2.хх и тестируй
Не прокатило.
...
Рейтинг: 0 / 0
07.11.2013, 11:46
    #38455770
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
тогда ошибку показывай
...
Рейтинг: 0 / 0
07.11.2013, 11:48
    #38455775
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
} catch (Exception e) {
e.printstack(); // могу ошибиться точно не помню.
}

пусть хоть покажет что за ошибка
...
Рейтинг: 0 / 0
08.11.2013, 08:36
    #38457342
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
11-08 04:32:23.923: W/System.err(303): java.lang.NullPointerException
11-08 04:32:23.973: W/System.err(303): 	at com.example.testapp.MainActivity.onCreate(MainActivity.java:51)
11-08 04:32:23.973: W/System.err(303): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-08 04:32:24.005: W/System.err(303): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-08 04:32:24.005: W/System.err(303): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-08 04:32:24.013: W/System.err(303): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-08 04:32:24.013: W/System.err(303): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-08 04:32:24.013: W/System.err(303): 	at android.os.Handler.dispatchMessage(Handler.java:99)
11-08 04:32:24.043: W/System.err(303): 	at android.os.Looper.loop(Looper.java:123)
11-08 04:32:24.043: W/System.err(303): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
11-08 04:32:24.083: W/System.err(303): 	at java.lang.reflect.Method.invokeNative(Native Method)
11-08 04:32:24.083: W/System.err(303): 	at java.lang.reflect.Method.invoke(Method.java:521)
11-08 04:32:24.083: W/System.err(303): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-08 04:32:24.083: W/System.err(303): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-08 04:32:24.093: W/System.err(303): 	at dalvik.system.NativeStart.main(Native Method)
...
Рейтинг: 0 / 0
08.11.2013, 14:17
    #38457916
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
1. сделай проекту clean Projects->Clean , бывает, что его глючит, и он криво пересобирает R файлик. потом не может найти во вюшке элементы.

2.

посмотри вообще ответ так.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 try {
          http.call(SOAP_ACTION, envelope); 
          //SoapObject resultsRequestSOAP = (SoapObject)envelope.bodyIn;
          //lblResult.setText(resultsRequestSOAP.getPropertyAsString("result"));

	Object obj =  envelope.getResponse(); 
	 if (obj != null)
	   System.out.println(obj.toString());

       } catch (Exception e) {
          e.printStackTrace();
       }
...
Рейтинг: 0 / 0
08.11.2013, 18:27
    #38458322
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDart
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
11-08 04:32:23.923: W/System.err(303): java.lang.NullPointerException
 11-08 04:32:23.973: W/System.err(303): 	at com.example.testapp.MainActivity.onCreate(MainActivity.java:51) 
11-08 04:32:23.973: W/System.err(303): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-08 04:32:24.005: W/System.err(303): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-08 04:32:24.005: W/System.err(303): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-08 04:32:24.013: W/System.err(303): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-08 04:32:24.013: W/System.err(303): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-08 04:32:24.013: W/System.err(303): 	at android.os.Handler.dispatchMessage(Handler.java:99)
11-08 04:32:24.043: W/System.err(303): 	at android.os.Looper.loop(Looper.java:123)
11-08 04:32:24.043: W/System.err(303): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
11-08 04:32:24.083: W/System.err(303): 	at java.lang.reflect.Method.invokeNative(Native Method)
11-08 04:32:24.083: W/System.err(303): 	at java.lang.reflect.Method.invoke(Method.java:521)
11-08 04:32:24.083: W/System.err(303): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-08 04:32:24.083: W/System.err(303): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-08 04:32:24.093: W/System.err(303): 	at dalvik.system.NativeStart.main(Native Method)
И что в файле MainActivity.java на 51-й строке?
...
Рейтинг: 0 / 0
09.11.2013, 22:23
    #38459004
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
51 строка - это моё. Исправил - заработало.
Можно сказать повезло.
Спасибо за помощь.

По второму же вопросу так никто и не ответил.
Как вы реализовываете подобную связку на продуктовых приложениях?
Тоже отдельный web-сервер (свой/арендуете) ? Может быть в каких-нибудь фреймворках уже есть какие-то шаблоны?
Если, конечно, не секрет )
...
Рейтинг: 0 / 0
10.11.2013, 00:20
    #38459081
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
арендованные сервера.
но я юзал json

по сути не большая разница.
...
Рейтинг: 0 / 0
10.11.2013, 01:09
    #38459117
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
PavelDartКак вы реализовываете подобную связку на продуктовых приложениях?В "продуктовых" (слово-то какое) приложениях у меня на сервере .Net. ASP.NET Web-сервис, что отдаёт XML. Либо ASP.NET WebAPI, что умеет отдавать как XML, так и JSON, т.к. поддерживает content negotiation.
PavelDartТоже отдельный web-сервер (свой/арендуете)?На работе свои сервера, для личных проектов арендовано пара VDS.
PavelDartМожет быть в каких-нибудь фреймворках уже есть какие-то шаблоны?При разработке нативного приложения под Andriod пока не пользовался. Но библиотеки-то конечно есть. Легко гуглятся.
...
Рейтинг: 0 / 0
10.11.2013, 01:14
    #38459120
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web-сервис для приложения
P.S.: для разбора полученного SOAP-конверта использую наследника от
Код: java
1.
public class DefaultHandler implements org.xml.sax.EntityResolver, org.xml.sax.DTDHandler, org.xml.sax.ContentHandler, org.xml.sax.ErrorHandler

из пакета org.xml.sax.helpers, что входит в состав Adroid SDK.
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / web-сервис для приложения / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]