1

我是 ADF 移动应用程序开发的新手。我目前在一个场景中被阻止。我有一个需要检索数据的网络服务(来自第三方)。在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>

请帮我找出解决方案。

在此先感谢里诺

4

1 回答 1

2

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

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

于 2013-07-02T21:05:44.460 回答