Sunday, October 23, 2011

Integrated SOA Gateway and SSL

In the previous post I shared the ISG based solution for processing inbound email notifications. As I mentioned in that post, this solution only worked when the approvers were connected to the internal network. The customer required this functionality on mobile devices such as iPhone, iPad, Android, and BlackBerry. The obvious solution was to enable SSL for eBS. The eBS external URL changed to https://<ebs.companyname.com> without a port number. 
With this change in place, I tried to regenerate the WSDL for the custom procedure. After a long wait all I got was an error - something to the effect of "SOAProvider is not accessible. Please check with your system administrator". I set up statement level logging and found that the error was caused by the function call oracle.apps.fnd.soa.provider.util.ServerAccess.sendMessageToServer. The value for SOA_SERVER_URL was  https://<ebs.companyname.com>:<port>. The program was sending an HTTP request to a non-existent URL. So, I changed the oc4j.properties template files in $FND_TOP/admin/template -  oc4j_properties_1013.tmp and oafm_oc4j_properties_1013.tmp - and ran autoconfig. The value for SOA_SERVER_URL was now https://<ebs.companyname.com>. I tried to regenerate the WSDL once more and this time I got a numeric value exception. I decompiled $JAVA_TOP/oracle/apps/fnd/soa/provider/util/ServerAccess.class and saw this piece of code :

       int k = s3.lastIndexOf(":");
  s3 contains the value of SOA_SERVER_URL. This code assumes, rightly or wrongly, that the SOA server URL will always have a port number. Well not so in this case. I could have created an SR with Oracle Support but it was easier to get the web guys to create an alias for https://<ebs.companyname.com>:<port> to point to  https://<ebs.companyname.com>. I reverted to the original templates for oc4j.properties, ran autoconfig and retried the WSDL generation. Worked as expected.


In the next post I share how I got the solution to work on mobile browsers after grappling with various levels of JavaScript support.



12 comments:

  1. Hi,
    Thanks for the information provided.
    Does ISG Service Provider (NOT WS Invocation Framework) supports SOAP over HTTPS?
    I have a requirement where Requester(Legacy Systems) calls Provider(PL/SQL API exposed as Webservice using ISG). After generating WSDL, I can see that it is SOAP over HTTP. However,we need SOAP over HTTPS. Could you please guide me on this(any links,configs,Oracle SR will be useful?

    Thanks,
    Nagaraj Ganapa
    +91-7387483335

    ReplyDelete
    Replies
    1. Take a look at My Oracle Support note 815196.1 under the section Support for SSL-based Web Service Invocation Over HTTPS. Hope this helps.

      Delete
    2. Hi Sunder,
      Thanks for responding with information.
      However, It mentions SSL for WSIF(Web Service Invocation), which is from EBS to external webservice. But my requirement is the other way. That is, External Systems invoking EBS Webservice. The flow is from External Systems to EBS Webservice. So, in this context, EBS is acts as a "Service Provider" rathen than "Service Requester(WSIF)". I hope, its clear now.
      Please help me in this regard.

      Thanks,
      Nagaraj Ganapa
      +91-7387483335

      Delete
    3. As long as both the SOAP client (requester) and ISG are running SSL, there should be no issues calling eBS webservices over HTTPS. Please verify that you are running eBS in SSL. The WSDL generated will be https://... if you are SSL, http://... otherwise..

      Delete
    4. Many thanks for the response Sunder.
      If that is the case, then let me try with HTTPS. Yes, EBS is configured for SSL.

      Thanks,
      Nagaraj Ganapa
      +91-7387483335

      Delete
  2. Hi Sundar,
    When trying to launch QueryWorkOrder webserice, I am getting "Launcher Service is not up and running. Please contact your System Administrator" as exception. I believe this is something related to the SOA_SERVER_URL url not responding. Could you throw some light on this please ?

    My email id : kprabhureddy@yahoo.com

    The file which throws this error message is "oracle.apps.fnd.soa.forms.services.rt.FormsLauncherClientWS.java"

    LAUNCHER_UNAVAILABLE ERROR Launcher Service is not up and running. Please contact your System Administrator.

    ReplyDelete
    Replies
    1. Seems to me like the SOA Webservice is not running - the message clearly says that. Have you installed ISG and generated WSDLs?

      Delete
    2. Hi, is this issue resolved? Because I have same error and I can't advance

      Delete
  3. Hi,

    Is there any impact of SSL version on the SOA Porovider? or SOA Provider will support any version of the SSL say SSL V3.0 and SSL v3.1?

    --Khaleel

    ReplyDelete
    Replies
    1. I am not aware of any limitations based on the SSL version. If you find out, please let me know.

      Delete
  4. Hi Sunder,

    Thanks a lot for your quick reply.
    Now we want publish the WSDL from ISG to external clients. In order to provide access to them over the DMZ, what is the best configuration to hide the actual host:port of the EBS server from the external users. Any documents on configuration is helpful for HTTPS and URL masking.

    --Khaleel

    ReplyDelete
  5. Hi Sunder,

    To be more clear we want to understand where and how to create an alias for https://: to point to https://? can we do this alias from DMZ server to EBS server URL? That means I want to give the url like HTTPS:///SOAProvider/abc.wsdl for an actual URL HTTP://<actualebs.com:7890/SOAProvider/abc.wsdl

    I am curious to understand WHERE to configure the CERTIFICATES and where to create the ALIASs?

    Really appreciated your quick reply as we are stuck on this for our design approach.

    --Khaleel

    ReplyDelete