如何从ADF移动中的Web服务获取数据

时间:2013-06-26 09:53:36

标签: oracle-adf

我是ADF移动应用程序开发的新手。我目前在一个场景中被阻止了。我有一个需要检索数据的Web服务(来自第三方)。在soapUI中,只有存在此安全标记时,Web服务才会检索响应。否则,它将响应作为无效安全性。 Web服务看起来像这样:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xx="http://xmlns.oracle.com/apps/csf/soaprovider/plsql/xx_fs_mob_login/" xmlns:get="http://xmlns.oracle.com/apps/csf/soaprovider/plsql/xx_fs_mob_login/get_login/">
           <soapenv:Header>
              <xx:SOAHeader>
                 <!--Optional:-->
                 <xx:Responsibility>XXX</xx:Responsibility>
                 <!--Optional:-->
                 <xx:RespApplication>XXX</xx:RespApplication>
                 <!--Optional:-->
                 <xx:SecurityGroup>XXX</xx:SecurityGroup>
                 <!--Optional:-->
                 <xx:NLSLanguage>XXX</xx:NLSLanguage>
                 <!--Optional:-->
                 <xx:Org_Id>XXX</xx:Org_Id>
              </xx:SOAHeader>

<The portion which is excluded from the soap, but which is required for getting response>

<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                 <wsse:UsernameToken wsu:Id="UsernameToken-1">
                    <wsse:Username>XXX</wsse:Username>
                    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXX</wsse:Password>
                    <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">XXX</wsse:Nonce>
                    <wsu:Created>2013-02-13T08:58:50.649Z</wsu:Created>
                 </wsse:UsernameToken>
              </wsse:Security>
<The portion which is excluded from the soap, but which is required for getting response>

           </soapenv:Header>
           <soapenv:Body>
              <get:InputParameters>
                 <!--Optional:-->
                 <get:P_USERNAME>XXX</get:P_USERNAME>
              </get:InputParameters>
           </soapenv:Body>
        </soapenv:Envelope>

我尝试了ADF移动教程中描述的步骤来获取Web服务数据。但我从服务器获得响应代码500。我也尝试了安全Web服务的步骤。但我不确定Web服务中实现了哪个安全策略。我尝试使用oracle / wss_username_client_token_policy和其他一些但没有成功。后来我尝试创建Web服务客户端/代理。但由于Oracle ADF仅支持java 1.4,因此生成的代码出现错误(泛型和注释错误)。

Web服务的WSDL如下:

<definitions xmlns:tns="http://xmlns.oracle.com/apps/csf/soaprovider/plsql/xx_fs_mob_login/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns1="http://xmlns.oracle.com/apps/csf/soaprovider/plsql/xx_fs_mob_login/get_login/" name="XX_FS_MOB_LOGIN" targetNamespace="http://xmlns.oracle.com/apps/csf/soaprovider/plsql/xx_fs_mob_login/">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/apps/csf/soaprovider/plsql/xx_fs_mob_login/get_login/">
<include schemaLocation="http://27.251.157.211:8000/webservices/SOAProvider/plsql/xx_fs_mob_login/APPS_XX_FS_MOB_LOGIN_GET_LOGIN.xsd"/>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/apps/csf/soaprovider/plsql/xx_fs_mob_login/">
<element name="SOAHeader">
<complexType>
<sequence>
<element name="Responsibility" minOccurs="0" type="string"/>
<element name="RespApplication" minOccurs="0" type="string"/>
<element name="SecurityGroup" minOccurs="0" type="string"/>
<element name="NLSLanguage" minOccurs="0" type="string"/>
<element name="Org_Id" minOccurs="0" type="string"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<message name="GET_LOGIN_Input_Msg">
<part name="header" element="tns:SOAHeader"/>
<part name="body" element="tns1:InputParameters"/>
</message>
<message name="GET_LOGIN_Output_Msg">
<part name="body" element="tns1:OutputParameters"/>
</message>
<portType name="XX_FS_MOB_LOGIN_PortType">
<operation name="GET_LOGIN">
<input message="tns:GET_LOGIN_Input_Msg"/>
<output message="tns:GET_LOGIN_Output_Msg"/>
</operation>
</portType>
<binding name="XX_FS_MOB_LOGIN_Binding" type="tns:XX_FS_MOB_LOGIN_PortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GET_LOGIN">
<soap:operation soapAction="http://XXX:8000/webservices/SOAProvider/plsql/xx_fs_mob_login/"/>
<input>
<soap:header message="tns:GET_LOGIN_Input_Msg" part="header" use="literal"/>
<soap:body parts="body" use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="XX_FS_MOB_LOGIN_Service">
<port name="XX_FS_MOB_LOGIN_Port" binding="tns:XX_FS_MOB_LOGIN_Binding">
<soap:address location="http://XXX:8000/webservices/SOAProvider/plsql/xx_fs_mob_login/"/>
</port>
</service>
</definitions>

请帮我找出解决方案。

提前致谢 ノ

1 个答案:

答案 0 :(得分:2)

如果您不知道它使用的安全类型,您将无法直接从ADF Mobile访问安全的Web服务。

如果您可以创建调用Web服务的代理客户端,那么一种解决方案是在服务器上运行该客户端,并将该客户端公开为ADF Mobile层可以访问的Web服务。