Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Передача параметров WebService (http://www.flasher.ru/forum/showthread.php?t=152705)

Haiat 21.03.2011 23:31

Передача параметров WebService
 
Все доброго времени суток:

если взять на примере из одного блога следующий скрипт, как передать параметры?

Код AS3:

<mx:WebService id="webService"
            wsdl="http://www.flash-mx.com/ws/months.cfc?wsdl">
        <mx:operation name="getMonths"
                resultFormat="object"
                result="getMonths_result(event);"
                fault="getMonths_fault(event);" />
    </mx:WebService>

Цитата:

Каждый вызов любого метода сервиса требует передачи набора параметров для авторизации
например agent=1 pass=2

так?

Изначально думал что нужно вставлять их в тэг operation, но там оказывается нельзя пользовательские параметры вставлять

пробовал так:

Код AS3:

<mx:WebService id="webService"
            wsdl="http://www.flash-mx.com/ws/months.cfc?wsdl" agent="1" pass="2">

выходит ошибка

Цитата:

[Fault] exception, information=Error: Cannot assign operations into an RPC Service (agent)

Astraport 21.03.2011 23:53

А так?

Код AS3:

<mx:operation name="getMonths"
                resultFormat="object"
                result="getMonths_result(event);"
                fault="getMonths_fault(event);" >
      <mx:request>
<agent>1</agent>
<pass>2</pass>
      </mx:request>
    </mx:operation>


Haiat 22.03.2011 00:03

как я понимаю result выполняется если все нормально, а fault если ошибка.

ну так вот если я вообще параметры не передаю, то срабатывает result , вызывается функция:

Код AS3:

private function getMonths_result(evt:ResultEvent):void {
                textArea.text = ObjectUtil.toString(evt.result);
            }

и дает следующий результат:
Цитата:

(Object)#0
messages = (mx.collections::ArrayCollection)#1
filterFunction = (null)
length = 1
list = (mx.collections::ArrayList)#2
length = 1
source = (Array)#3
[0] (Object)#4
details = "java.lang.NullPointerException
at com.gridnine.xtrip.server.alliance.ws.AllianceWebService.selectFOP(AllianceWebService.java:411)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:246)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146)
at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:471)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:129)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:160)
at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:619)"
message = "фатальная ошибка ?"
type = "ERROR"
uid = "BD56296A-F4C4-8D90-4B3F-DA0245B4BD97"
sort = (null)
source = (Array)#3
а если я вставлю нужные входные данные, черех <mx:request> То срабатывает по fault функция
Код AS3:

private function getMonths_fault(evt:FaultEvent):void {
                                textArea.text = ObjectUtil.toString(evt.fault);
            }

и выдает
Цитата:

(mx.rpc::Fault)#0
content = (null)
errorID = 0
faultCode = "EncodingError"
faultDetail = (null)
faultString = "Unexpected parameter 'agent' found in input arguments."
message = "faultCode:EncodingError faultString:'Unexpected parameter 'agent' found in input arguments.' faultDetail:'null'"
name = "Error"
rootCause = (null)

alatar 22.03.2011 12:05

Цитата:

а если я вставлю нужные входные данные, черех <mx:request> То срабатывает по fault функция
На этом сервисе getMonths вообще не принимает параметров, тем более ни про какой 'agent' он понятия не имеет.
Код:

<wsdl:message name="getMonthsRequest"></wsdl:message>

Haiat 22.03.2011 13:21

alatar я это понимаю! я просто как пример спрашиваю! то есть у меня другой пример,
все ошибки я выложил со своего примера.
то есть клиент говорит мне что должны передаваться 4 параметра для авторизации. в самом WDSL описании я их не увидел нигде(наверно их не должно быть там видно,или должно?)
Цитата:

Каждый вызов любого метода сервиса требует передачи набора параметров для авторизации
не совсем понимаю как их передавать, пробовал по разному

спасибо

alatar 22.03.2011 13:48

Цитата:

не совсем понимаю как их передавать, пробовал по разному
В arguments операции передается объект с параметрами. Либо при вызове send(). Либо в request, но тогда надо приводить операцию к Operation, т.к. getOperation возвращает AbstractOperation. Ожидаемые параметры описываются в wsdl в тегах message.

Haiat 22.03.2011 14:06

вот у меня такой скрипт:
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">
 
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;
            import mx.utils.ObjectUtil;
 
            private var startTime:int;
            private var endTime:int;
 
            private function button_click():void {
                webService.searchSchedule.send();
                startTime = getTimer();
                lbl.text = "";
            }
 
            private function get_result(evt:ResultEvent):void {
                textArea.text = ObjectUtil.toString(evt.result);
                calcTime();
            }
 
            private function get_fault(evt:FaultEvent):void {
                Alert.show(evt.type);
                calcTime();
            }
 
            private function calcTime():void {
                endTime = getTimer();
                lbl.text = "total time: " + (endTime - startTime) + "ms";
            }
        ]]>
    </mx:Script>
    <mx:WebService id="webService" wsdl="http://alliance.gridnine.com:9090/alliance/ws?wsdl">
        <mx:operation name="searchSchedule" resultFormat="object" result="get_result(event);" fault="get_fault(event);" />
    </mx:WebService>
 
    <mx:ApplicationControlBar dock="true">
        <mx:Button id="button"
                label="get months from web service"
                click="button_click();" />
        <mx:Spacer width="100%" />
        <mx:Label id="lbl" />
    </mx:ApplicationControlBar>
 
    <mx:TextArea id="textArea"
            editable="false"
            width="100%"
            height="100%" />
 
</mx:Application>

подключаюсь к WDSL http://alliance.gridnine.com:9090/alliance/ws?wsdl

в нем я не вижу параметров agent и password, но мне говорят что их нужно передавать для авторизации

что я делаю не так? потому что я вызываю метод - а он возвращает ошибки которые я выше писал

alatar 22.03.2011 14:12

У меня не выдает этот wsdl, выложите все, что в message для searchSchedule

Haiat 22.03.2011 14:13

посмотрите исходный код, открывшейся страницы.

там есть это
Код:

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

это
Код:

<operation name="searchSchedule">
<input message="tns:searchSchedule" />
<output message="tns:searchScheduleResponse" />
<fault message="tns:Exception" name="Exception" />
</operation>

и это
Код:

<operation name="searchSchedule">
<soap:operation soapAction="" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
<fault name="Exception">
<soap:fault name="Exception" use="literal" />
</fault>
</operation>


alatar 22.03.2011 14:35

Ну он принимает некие parameters, странно, что тип не указан.
Обычно описывается в виде complexType или simpleType.
Скорее всего, что-то типа:
Код AS3:

var arguments:Object = {parameters: {agent: bond, password: james}};



Часовой пояс GMT +4, время: 19:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.