Integrating with Oracle Sales Cloud using SOAP web services and REST APIs (Part 1 of 2)

Sales Cloud provides several types of interfaces to facilitate integration with other applications within the enterprise and on the cloud.As one of the key integration interfaces, Sales Cloud supports SOAP services based integration, both inbound and outbound. At this point, Sales Cloud doesn’t provide REST API’s or cannot call outbound REST APIs. These are features planned for the upcoming releases. In the meanwhile it is possible to invoke external REST APIs from Sales Cloud (through a code-based approach) which we will discuss. Oracle continues to invest in improving both SOAP and REST based connectivity. The content in this blog is based on features that were available at the time of writing it (May 2014).

In this two part blog, I will cover the following topics briefly.

1.  Invoking Sales Cloud SOAP web services from external applications

a. Identifying the Sales Cloud SOAP web service to be invoked
b. Sample invocation from an external application
c. Techniques to invoke Sales Cloud services from an ADF application

2.  Invoking external SOAP Web Services from Sales Cloud (covered in Part 2)

3.  Invoking external REST APIs from Sales Cloud (covered in Part 2)

Note: The content for #1 is applicable to Sales Cloud, HCM Cloud and ERP Cloud (though this post references only Sales Cloud). #2 and #3 are applicable only for Sales Cloud and are not applicable to other cloud services.

To start with, I’ll touch upon some basics, so that you can quickly build a few SOAP/REST interactions with Sales Cloud. If you do not already have access to a Sales Cloud instance, you can request for a free 30 day trial of the Oracle Sales Cloud using

1. Invoking Sales Cloud SOAP web services from external applications

There are two main types of services that Sales Cloud exposes

–          ADF Services – These services allow you to perform CRUD operations on Sales Cloud business objects. For example, Sales Party Service, Opportunity Service etc. Using these services you can typically perform operations such as get, find, create, delete, update etc on Sales Cloud objects.These services are typically useful for UI driven integrations such as looking up Sales Cloud information from external application UIs, using third party Interfaces to create/update data in Sales Cloud. They are also used in non-UI driven integration uses cases such as initial upload of business or setup data, synchronizing data with an external systems, etc.

–          Composite Services – These services involve more logic than CRUD and often involving human workflows, rules etc. These services perform a business function such as Get Orchestration Order Service and are used when building larger process based integrations with external systems.These services are usually asynchronous in nature and are not typically used for UI integration patterns.

1a. Identifying the SOAP web service to be invoked

All Sales Cloud web service metadata (and the metadata for other cloud services such as HCM and ERP)  is available through an OER instance (Oracle Enterprise Repository) which is publicly available via This is the starting point for you to discover the services that you are going to work with. You do not need to own a Sales Cloud account to browse the services using the above UI

You can use the search area on the left to narrow down your search to what you are looking for. For example, you can choose the type as by ADF Services or Composite, you can narrow your search to a specific version, Product Family etc.


Once you hit ‘Search’ you can see all the details of the service. There is a bunch of details for each service, but to get started check for the following

–          Make sure that under the Taxonomy Tab, Keywords contains ‘EXTERNAL’.

–          Using the Details tab, identify for the operation that you are planning to use.

–          Using the Details tab, view the Abstract WSDL URL (scroll down to the end to find it). At this point you need an actual Sales Cloud instance to get started. Once you have an actual Sales Cloud instance, you can view the concrete WSDL by using URL mentioned as ‘Service Path’.

For the SalesPartyService, the Service Path is
Service Path: https://crm_server:PortNumber/crmCommonSalesParties/SalesPartyService?WSDL

crm_server:PortNumber for a given SaaS instance is the URL you would’ve got when you obtained your sales cloud account

In the case of SalesPartyService WSDL, you would simply use

For the Person service, the Service Path is given as

Now as you see your service needs HCM information, but you only have the CRM information.
To easily obtain the HCM information, go to your default Sales Cloud URL.
Then use the Navigator and navigate to switch to something that is HCM related, say, Navigator > Workforce Management > Person Management.

At this point you will notice your browser URL change to something else.
In my case it switched from to This is the HCM URL.

So you would use with Person Service WSDL
Similarly, you would use with Sales Party WSDL

The Composite Services do not provide a Service Path and are not candidates for SaaS integration. On-Premise Customers have access to the SOA servers where these composites are deployed. Using the Component Name and SAR location under the overview tab on, customers can identify the composite in the Oracle Enterprise manager. Using the information on Enterprise Manager, customers can build integrations with other On-Premise assets such as Siebel, E-Business Suite etc. These services are usually long running asynchronous processes and often involve human workflow, configurations and monitoring.

Oracle Fusion Distributed Order Orchestration is a good example where Oracle pre-built integrations with Siebel using these composite services. More information can be found at

In the rest of this post, we will focus on building simple UI centric use cases using ADF services (simply services going forward)

1b. Sample invocation of services from an external application

Take a closer look at the concrete WSDL. Couple of items to notice here

–          Most operations have synchronous as well as asynchronous variations.

–          Notice the security policy entry under binding. The synchronous operations are associated usually with wss11_saml_or_username_token_with_message_protection_service_policy

image003To being with, simply invoke these web services using a SOAP UI client. The following blog entry provides detailed explanation and step by step instructions to do this –

When dealing with external applications, ensure that the appropriate SSL certificates are imported similar to what is being done with SOAP UI example in the link above. Presently Sales Cloud does not provide an interface to import SSL certifications limiting certain integration abilities especially when self-signed certificates are used. (see comments below for an explanation on how to import SSL certificates)

You may also have noticed is the size of the response payload from the Sales Cloud services is very large. Especially with Find operations, the results may be too large to be meaningful. Imagine that you want to build a simple search feature in your custom application where you want the search results to display a valid set of Sales Accounts – as defined in Sales Cloud. You may want the results to display as a list of Accounts (organizations), with information just four key pieces of information – Organization Name, Address, City and Country.

image005If the service invocation with find operation results in providing ALL details for each Sales Party, then it makes it hard for the custom application to handle the output. There is an unnecessary performance overhead as well. Fortunately, the Find operation provides a set of parameters in the input payload that can be used to control the output.

For example, the XML request payload in the SOAP UI blog linked earlier, can be modified as follows


<soapenv:Envelope xmlns:soapenv="">
      <typ:findSalesParty xmlns:typ="">
         <typ:findCriteria xmlns:typ1="">

The above request translates to – give me the top 10 hits for Organizations whose names start with “Art” and give me only the Name, Address, City and Country details of these Organizations. When executed against my Sales Cloud instance, the response displays something like below


<env:Envelope ..>
      <ns0:findSalesPartyResponse ..">
         <ns2:result ..>
            <ns1:PartyName>Artemis International Solutions Corp</ns1:PartyName>
            <ns1:OrganizationParty ..>
               <ns3:Address1>1000 Louisiana</ns3:Address1>
         <ns2:result ..>
            <ns1:PartyName>Artisan Press Ltd</ns1:PartyName>
            <ns1:OrganizationParty ..>
               <ns3:Address1>4  BOSTON ROAD</ns3:Address1>
         <ns2:result ..>
            <ns1:PartyName>Artwise Messe</ns1:PartyName>
               <ns3:Address1>Bergengrünstr. 9</ns3:Address1>

Note that the response is much smaller and manageable. They key here is to use the findAttribute to control the output. In my system, the response time for this request without the findAttribute was 2000 to 2500ms. With the findAttribute the response time improved to 500ms.

In general, you can play with the findCriteria to exactly define what you want to search and what you want in the output. Think of it as the web service equivalent of the find functionality that you see in many enterprise applications. This is a powerful feature and is present only for the Find Operation.

Another key point to note about web services is that they encapsulate details originating from more than one individual object in Sales Cloud. For example in the case of SalesParty, in addition to the basic details of the Sales Party, the service provides dependent information from OrganizationParty and SalesAccount objects. Each of these objects again bring in dependencies that they need.

This allows the consumers of the webservice, to get all relavant information in one go, without having to make multiple calls to retrieve related information. This makes ADF services, granular and right-sized business services, which is a corner store to building robust web services based integration architectures.

1c. Techniques to invoke Sales Cloud services from an ADF based external application

Let us see some techniques when invoking Sales Cloud services from a custom built ADF application. This is useful when you have standalone ADF based application in your organization, or if you are building ADF extensions to Sales Cloud, say on Oracle Java Cloud Service.

Some parts of these instructions can be useful when invoking Sales Cloud web services from any J2EE based application.

There are several ways to invoke Sales Cloud web services from ADF. We will look at two simple options

–          Using ADF Web Service Data Control
–          Using Web Service Proxy

ADF Web Service data control is a simple and declarative approach to invoke a web service from ADF pages. The web service data control is particularly useful when the end objective is to simply display the results of a web service invocation on an ADF Page.

The Web Service Proxy option provides more flexibility and control, and can be used in conjunction with a programmatic VO or a bean data control.

The blog entry provides guidelines to pick a suitable approach when accessing web services in ADF.

If you have JDeveloper 11g installed in your system, you can simply follow the steps below to invoke your Sales Cloud on premise or SaaS instance.

Using ADF Web Service Data Control

  • Create an Application of type Fusion Web Application. I named mine ‘SalesPartySample’. Ensure that you choose and shuttle ‘Web Services’ when on the Model project creation page. Accept all other defaults in the Wizard


  • Under the Model Project, create a web service data control and provide the WSDL for the SalesParty web service. Select the getSalesParty Operation. Note that you can also include custom HTTP Headers. We won’t be using it in this example but it is one way of authenticating against an Sales Cloud service


  • In the Endpoint authentication, provide the username/password


  • At this point you should see something like this in the data controls. Notice the Parameters and results


  • Now we will use this data control from a simple UI. In the View Control Project, create a new JSF page. I created mine as index.jspx
  • Drag and drop the partyId parameter from the Data Control into the jspx. Choose the display type as Text Input w/ Label. Underneath it, drag and drop the getSalesParty(Long). Choose to display it as an ADF button. Underneath it, drag and drop the PartyName as Text Output. Drag and drop Address1, City and Country from under Organization Party. Your jspx should look like below


  • Simply right click your .jspx and Run.
  • In this page, plug in a Party ID. I entered the Party ID for ‘Artisan Press Ltd’ that I got from the previous SOAP UI exercise


  • It’s that simple! No coding effort!! Of course the UI can be made much better looking and there could be more complex usecases such as using custom HTTP Headers and this will require some amount of coding.
  • At this point if you face a SSL related error, it is because your Jdev keystore doenst have the necessary SSL certificates imported.To fix this, navigate to your Sales Cloud instance >Export the SSL certificate as .pem using your favorite browser (plenty of instruction on the internet). Import it to your JDev keystore as follows

C:\Oracle\Middleware\jdk160_24\bin>keytool -importcert -alias fusionapps -file <locationtotheexportedPEM>\mypk.pem -trustcacerts -keystore C:\Oracle\Middleware\wlserver_10.3\server\lib\DemoTrust.jks -storepass DemoTrustKeyStorePassPhrase

Using Web Service Proxy

Next we will look at using a Web Service Proxy to invoke the Sales Party Service. This time we will not use the get operation but use the find operation. We will build the FindCriteria that we used in SOAPUI using Java.

  • Create a new Application and Project that will house your proxy exclusively (I will explain later why this makes sense)
  • Click New and select Web Service Proxy


  • Choose JAX WS style
  • Enter the package name as oracle.sample.salesparty.proxy and oracle.sample.salesparty.proxy.types
  • Unselect generate as async and subsequently select Don’t Generate Async


  • You should see with the text, “Add your code to call the desired methods”
  • Best Practice: It is a good practice to not use the above Proxy Client directly. This is because the when the proxy gets regenerated the changes made to the above client changes will be be lost. Instead it is good to create a separate facade. The facade also allows you to control the input and output fields you would like to work with, instead of working with the entire payload. For example in our example we would like to only take in the input of ‘startswith’
  • Best Practice: Like I mentioned earlier, leave your proxy in its project. In fact you will treat as a standalone deployable entity. The facade and the rest of the application components such as UI, Data controls etc will constitute the main application which will include the proxy application as a dependency. This allows for distributed development as the same proxy can be used by multiple applications. This reduces redundancy and also ensure that if the proxy is regenerated, then all applications pull the latest code.
  • Create a facade like below. The idea is to build the same XML request payload using ‘findCriteria’ like we built in the earlier example. The getSalesPartyList method takes only “startsWith” as input from the user, builds the findcriteria and executes the service, returning a list of Sales Party records
public class SalesPartyFacade {
          private SalesPartyService_Service salesPartyService_Service;
          public List<SalesParty> getSalesPartyList(String startsWith)
          throws ServiceException
          List<SalesParty> SalesParties;
          FindCriteria findCriteria = createFindCriteria(startsWith);
          SecurityPolicyFeature[] securityFeatures =
          new SecurityPolicyFeature[] { new SecurityPolicyFeature("oracle/wss_username_token_over_ssl_client_policy") };
          // salesPartyService_Service = new SalesPartyService_Service();
               salesPartyService_Service = new SalesPartyService_Service(new URL("https://your_sales_cloud_URL/crmCommonSalesParties/SalesPartyService?WSDL"),new QName("","SalesPartyService") );
           } catch (MalformedURLException e) { 
          SalesPartyService salesPartyService = salesPartyService_Service.getSalesPartyServiceSoapHttpPort(securityFeatures);

          WSBindingProvider wsbp = (WSBindingProvider)salesPartyService;

          FindSalesParty fSalesParty= new FindSalesParty();
          SalesParties = salesPartyService.findSalesParty(fSalesParty).getResult();

          return SalesParties;

    private static FindCriteria createFindCriteria(String startsWith)
      FindCriteria findCriteria = new FindCriteria();
      ChildFindCriteria childFindCriteria = new ChildFindCriteria();

      ViewCriteria filter = new ViewCriteria();
      ViewCriteriaRow group1 = new ViewCriteriaRow();
      ViewCriteriaItem item1 = new ViewCriteriaItem();
      ViewCriteriaItem item2 = new ViewCriteriaItem();

/*    childFindCriteria.setChildAttrName("OrganizationParty");
      return findCriteria;

  • Best Practice: As shown in the code, you can use the WSBindingProvider to override the username password. This is especially useful when multiple projects are dependent on the same Proxy. Each project can then override the security policy in its facade to suit its needs.
  • Best Practice: When instantiating the proxy in the facade, instead of using the constructor with no arguments (which I intentionally commented out), use the constructor that accepts the WSDL. You will provide the WSDL of the SalesParty service in your Sales Cloud env here (although you already used the WSDL when building the proxy using the wizard). Reason for doing this again is as follows. At design time, you would’ve used a WSDL from a specific environment. However this proxy code can be ported to a different environment. At that time, it is not required for you to re-generate the proxy if you followed this approach. By simply providing the WSDL everytime in the facade, you are ensuring that your proxy is using the latest WSDL definitions. As an alternative approach, sometimes you see people overriding the endpoint alone using the ENDPOINT_ADDRESS_PROPERTY. However this alternative approach (of not overriding the WSDL but simply overriding the endpoint) has two pitfalls – the old WSDL may become unavailable and the old WSDL could have security related configuration that is incorrect for the new endpoint causing security issues.
  • Best Practice: You can also externalize the new WSDL URL by creating it as an entry in a property file and have the proxy reference it. Since you need to modify the property file only, you do not need access to the proxy source code. You just need the .ear of the file being deployed. The other advantage of this approach is that multiple proxies can leverage the same property in the property file allowing you to quickly modify applications during env migration. You can also use scripting to automate the end point changes in the property files to assist deployment automation.
  • Now that you have the facade, you can write a simple test class to test this facade.
        String filter = "Art"; 
        SalesPartyFacade spf = new SalesPartyFacade();
        List<SalesParty> salesparties = spf.getSalesPartyList(filter);
        for (SalesParty sp: salesparties)
        {System.out.print("Party Name = " + sp.getPartyName().getValue()+"\n");
         System.out.print("Address1 = " + sp.getOrganizationParty().get(0).getAddress1().getValue()+"\n");
         System.out.print("City = " + sp.getOrganizationParty().get(0).getCity().getValue()+"\n");
         System.out.print("Country = " + sp.getOrganizationParty().get(0).getCountry().getValue()+"\n");
         System.out.println("\n\n");   }
  • This facade can now be used in any manner to invoke the Sales Party Service from your UI.

This concludes part 1 of this two part blog. In part 2 of this post I’ll be talking about invoking external SOAP and REST services from Fusion Applications.





  1. Cristiano says:

    Hi, there are some Documentation about how to integrate the Oracle Sales Cloud with c# using the webservices?

  2. Hi,

    Could you please tell me how to invoke that web service using jwt and proxy client created in Jdeveloper 12c?

    Below is the working code in Jdeveloper 11g, I’m passing just an empty string as SecurityPolicyFeature:

    SecurityPolicyFeature[] securityFeatures =
    new SecurityPolicyFeature[] { new SecurityPolicyFeature(“”) };

    String wsURL = baseURL + “/hcmPeopleRolesV2/UserDetailsService?WSDL”;
    String qName = “”;

    try {
    userDetailsService_Service = new UserDetailsService_Service(new URL(wsURL), new QName(qName, “UserDetailsService”));
    } catch(MalformedURLException ex) {

    UserDetailsService userDetailsService =

    WSBindingProvider wsbp = (WSBindingProvider)userDetailsService;
    String authZParameterValue = “Bearer ” + pJWTToken;
    Map<String, List> authMap =
    new HashMap<String, List>();
    List authZList = new ArrayList();

    authMap.put(“Authorization”, authZList);


    UserDetailsResult res=userDetailsService.findSelfUserDetails();

    It is throwing the below error in Jdeveloper 12c, but in 11g, same code is working fine:

    java.lang.IllegalArgumentException: A document URI is required for a search criterion.
    at oracle.wsm.policymanager.bean.util.PolicySetBuilder.retrieveDocuments(
    at oracle.wsm.policymanager.bean.util.PolicySetBuilder.(
    at oracle.wsm.policyaccess.PolicyAccessPoint.buildRuntimePolicySet(
    at oracle.wsm.policyaccess.PolicyAccessPoint.registerListener(
    at Method)
    at weblogic.wsee.jaxws.tubeline.standard.StandardTubelineDeploymentListener$10.createClient(
    at weblogic.wsee.jaxws.WLSTubelineAssemblerFactory$WLSTubelineAssemblerImpl.createClient(
    at weblogic.wsee.jaxws.WLSTubelineAssemblerFactory$WLSTubelineAssemblerImpl.createClient(
    at weblogic.wsee.jaxws.spi.WLSProvider$ServiceDelegateImpl.internalGetPort(
    at weblogic.wsee.jaxws.spi.WLSProvider$ServiceDelegateImpl$PortClientInstanceFactory.createClientInstance(
    at weblogic.wsee.jaxws.spi.ClientInstancePool.takeSimpleClientInstance(
    at weblogic.wsee.jaxws.spi.ClientInstancePool.take(
    at weblogic.wsee.jaxws.spi.WLSProvider$ServiceDelegateImpl.getPort(
    at weblogic.wsee.jaxws.spi.WLSProvider$ServiceDelegateImpl.getPort(

    Please help!!


    • Arvind Srinivasamoorthy says:

      Are you deploying this application to JCS-SX? If yes, JCS-SX does not support JDeveloper 12c yet.

      • No, I’m deploying it to JCS.

        I think the issue is because of this line: new SecurityPolicyFeature(“”), because of the blank security policy. But I’m not sure of any other way to access the web service using jwt.

        • Hello guy,

          I’m facing the same problem when I’m trying to call a web service with jwt, I’m using JDev 12 and I’m deploying to JCS. Did you solve the problem? Do you have any updates on this?


          • Arvind Srinivasamoorthy says:
          • Thanks for response,

            But I’ve followed the documentation and also looked in the code sample and I get the same error.
            here is my code taken from sample(I’m calling OpportunityService):

            OpportunityService_Service service_Service;
            OpportunityService service = null;

            SecurityPolicyFeature[] secFeatures = new SecurityPolicyFeature[]
            {new SecurityPolicyFeature(“”)};

            service_Service = new OpportunityService_Service();
            service = service_Service.getOpportunityServiceSoapHttpPort(secFeatures);

            BindingProvider bp = (BindingProvider)service;
            Map<String,List> authMap=new HashMap<String,List>();
            List authZlist=new ArrayList();
            authZlist.add(new StringBuilder().append(“Bearer “).append(jwt).toString());
            authMap.put(“Authorization”,authZlist) ;


            At runtime, it stops at SecurityPolicyFeature line with java.lang.IllegalArgumentException: A document URI is required for a search criterion.

            If you have any ideea whould be very helpful!

  3. Sridhar Yerram says:


    I have successfully called the webService from Jdeveloper11.1.1.7.

    Can you provide the code of the HTTClient to be used for : Jdeveloper 10g.


    • Arvind Srinivasamoorthy says:

      I’m not sure I follow the question. Irrespective of the HTTPClient or other s/w like SOAPUI that you are using, the request response to the web service invocation remains the same.

      • Sridhar Yerram says:

        Hi Arvind,

        I mean the below code in my Java Class : CreateReqServiceSoapHttpPortClient

        public static void main(String[] args) {
        try {

        //setup security feature with OWSM policy
        SecurityPolicyFeature[] securityFeature = new SecurityPolicyFeature[] { new SecurityPolicyFeature(“oracle/wss_username_token_client_policy”) };

        xxjdev10g.proxy.CreateReqServiceSoapHttpPortClient myPort = new xxjdev10g.proxy.CreateReqServiceSoapHttpPortClient();
        System.out.println(“calling ” + myPort.getEndpoint());

        System.out.println(“Before Invoking Method”);
        long requisitionHeader =1000;
        RequisitionHeader requusitoinHeader = myPort.getRequisitionHeader(1000);
        System.out.println(“After Invoking Method”);
        // Add your own code here

        } catch (Exception ex) {

        Above card is part of Jdevelooper 10G, iam not sure how to apply the secuirty feature while calling the webservice method.

        Without applying the security feature, iam getting the below exception :

        D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jdk\bin\javaw.exe -client -classpath D:\Sridhar\Software\p17888411_R12_GENERIC\jdevhome\jdev\mywork\Jdev10FusionR9ReqService\Jdev10gFusionR9ReqService\classes;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\lib\xmlparserv2.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\lib\xml.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\lib\activation.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\lib\ejb.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\lib\jms.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\lib\jta.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\lib\mail.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\lib\servlet.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\jaxrpc-api.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\wsclient.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\wsserver.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\wssecurity.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\wsdl.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\orasaaj.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\saaj-api.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\orawsdl.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\orawsrm.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\jaxr_api.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\orajaxr.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\relaxngDatatype.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\jaxb-impl.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\jaxb-libs.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\xsdlib.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\webservices\lib\mdds.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\jaxen.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\oraclepki.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\ojpse.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\osdt_core.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\osdt_cert.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\osdt_xmlsec.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\osdt_wss.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\osdt_saml.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\repository.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jlib\ojmisc.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\lib\http_client.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\jazncore.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\j2ee\home\oc4jclient.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\rdbms\jlib\xdb.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\diagnostics\lib\ojdl2.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jakarta-taglibs\commons-logging-1.0.3\commons-logging-api.jar;D:\Sridhar\Software\p17888411_R12_GENERIC\jdevbin\jakarta-taglibs\commons-logging-1.0.3\commons-logging.jar xxjdev10g.proxy.CreateReqServiceSoapHttpPortClient
        Before Invoking Method
        javax.xml.rpc.soap.SOAPFaultException: InvalidSecurity : error in processing the WS-Security security header
        at xxjdev10g.proxy.runtime.CreateReqServiceSoapHttp_Stub.getRequisitionHeader(
        at xxjdev10g.proxy.CreateReqServiceSoapHttpPortClient.getRequisitionHeader(
        at xxjdev10g.proxy.CreateReqServiceSoapHttpPortClient.main(
        Process exited with exit code 0.


  4. Ramaswamy Ramalingam says:

    Hi ,

    Thanks for the article.Its really helpful to start with .
    I am having one question from where can we retrieve the wsdl for the custom Object .
    Also , Is there any service provided from fusion to retrieve the set of fields configured for the module.

    Ramaswamy Ramalingam

    • Arvind Srinivasamoorthy says:

      Sorry for the late response, but hopefully this will be useful for someone.

      When you add custom objects to the Oracle Sales Cloud data model using Application Composer, the custom objects don’t have named web services. Instead, they’re accessible through a generic web service that is available for each application.

      To access information in OER about the generic web services:
      – In the Enter Search String field, enter Custom Business Object.
      – For Type, select ADF Service.
      – For Version, select the latest version.

      In there you will see the operations supported for every custom object.

  5. Satyanarayana Tammineedi says:

    Hi Arvind,

    This an interesting and helpful article. I’m not able to get the actual service URL on our SaaS instance. Not sure how to get it. Is there any document or any other way to find all the services available on our SaaS instance ?


  6. Apoorv Jain says:

    Hi Thanks for the Article, its really helpful, but I am getting following issue

    javax.xml.soap.SOAPException: Message send failed: PKIX path building failed: unable to find valid certification path to requested target

    I even imported the JDev keystore, but issue still persist, also i am testing on my Inegrated weblogic not on JCS.

    Please help me on this, Thanks in Advance!!

    • Arvind Srinivasamoorthy says:

      In the blog post, I’ve mentioned the following

      “At this point if you face a SSL related error, it is because your Jdev keystore doenst have the necessary SSL certificates imported.To fix this, navigate to your FA instance >Export the SSL certificate as .pem using your favorite browser (plenty of instruction on the internet). Import it to your JDev keystore as follows”

      I understand that you have imported the SSL certificate. Use the keytool -list command to ensure that you have indeed added the certificate to your server.

      One common mistake when exporting the certificate from the browser is exporting the wildcard certificate instead of the CA certificate. Here are the steps.
      1. For the Sales Party WSDL above, hit https:///crmCommonSalesParties/SalesPartyService?WSDL on your browser (I’ll give instructions for chrome)
      2. Click the Green Lock symbol in the URL bar > Connection tab > Certificate Information
      3. Go to the Certification tab > Highlight the CA certificate (not the *, but the one above that) > View Certificate
      4. Go to Details Tab > Copy to File
      5. In the Wizard, click Next > Next > Give any file name > Finish

      Now on you weblogic server
      6. C:\Oracle\Middleware\jdk160_24\bin>keytool -importcert -alias -file -trustcacerts -keystore
      7. Restart your server

      This should help.

Add Your Comment