powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / web-сервис для приложения
25 сообщений из 26, страница 1 из 2
web-сервис для приложения
    #38453299
PavelDart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, всем доброго времени суток.
Появилась необходимость реализовать простую связку
"Логика на сервере + клиент в виде мобилки". Ну то есть реализовать наверное, самый распространнённый вариант приложения хоть на 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
web-сервис для приложения
    #38453315
PavelDart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В продолжении:
Но проблема - нет коннекта на вызове
Код: java
1.
http.call(SOAP_ACTION, envelope); 


падает с NPE.

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

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

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

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

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

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

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

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

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

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

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

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
web-сервис для приложения
    #38454385
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
web-сервис для приложения
    #38454426
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, понял. Надо идти в статье разбираться. Разберитесь с отладкой и напишите какого типа исключение возникает.
...
Рейтинг: 0 / 0
web-сервис для приложения
    #38454723
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelDart,

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

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

пусть хоть покажет что за ошибка
...
Рейтинг: 0 / 0
web-сервис для приложения
    #38457342
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)
...
Рейтинг: 0 / 0
web-сервис для приложения
    #38457916
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
web-сервис для приложения
    #38458322
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
web-сервис для приложения
    #38459004
PavelDart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
51 строка - это моё. Исправил - заработало.
Можно сказать повезло.
Спасибо за помощь.

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

по сути не большая разница.
...
Рейтинг: 0 / 0
web-сервис для приложения
    #38459117
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelDartКак вы реализовываете подобную связку на продуктовых приложениях?В "продуктовых" (слово-то какое) приложениях у меня на сервере .Net. ASP.NET Web-сервис, что отдаёт XML. Либо ASP.NET WebAPI, что умеет отдавать как XML, так и JSON, т.к. поддерживает content negotiation.
PavelDartТоже отдельный web-сервер (свой/арендуете)?На работе свои сервера, для личных проектов арендовано пара VDS.
PavelDartМожет быть в каких-нибудь фреймворках уже есть какие-то шаблоны?При разработке нативного приложения под Andriod пока не пользовался. Но библиотеки-то конечно есть. Легко гуглятся.
...
Рейтинг: 0 / 0
web-сервис для приложения
    #38459120
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 26, страница 1 из 2
Форумы / Android [игнор отключен] [закрыт для гостей] / web-сервис для приложения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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