Thursday, January 1, 2099

Introducing ourselves!

Welcome to our integration group blog! This is our first blog post and we would like to introduce ourselves, what our goal is and our plans for the future.

We are a group of eight colleagues based in Portugal and the Netherlands, with a main focus on integration. The team members are: Carlos Marques, Tomas Brouwers, Johan Kemna, Beatriz Romba Valéria Pacheco, Léon Smiers, Alexander van der Woude and Jos Alblas. We have working experience with the well-known (Oracle) products like Service Bus and SOA Suite, but also the newer (cloud) platforms like Process Cloud Service and Integration Cloud Service.  Currently our teams main focus is the latest addition to the family; Integration Cloud Service.

Our goal is to share our knowledge and experiences with the integration platforms from Oracle. Our plan for the near future is publishing a variety of blog posts differing from how to’s, troubleshooting, (new) functionality and best practices. In an addition to blogging we will also start recording Podcasts and Webcasts where we will discuss and/or demonstrate all kinds of stuff involving cloud integration.

We hope that we can help you in any way by sharing our knowledge and experience. If you have any suggestions on subjects we can address please feel free to leave a comment below or get in touch with us via the contact form.

Happy integrating!





Thursday, December 15, 2016

Security OSB,OWSM - Authorization per OSB service

The key to security is thinking it through and  start thinking about the security architecture right from the start of the project. Since security is a crosscutting aspect, most parts of the security will be hard and costly to implement only at latter stages of the project.

You usually see on projects that SOA security is very coarse grained. Clients get access to all services or none. Using standard functionality it is easy to have both authentication and authorization per service method. The Oracle Web Service Manager  has standard functionality to fine-tune the service access. The idea is to grant access to a service method based on a token. In this blog I will describe how to implement this on the Oracle Service Bus.

There are several ways to check the authentication and authorization of a client, i.e. by a username/password token or x509 certificates. In this tutorial we will give or deny access to a service based on the Common Name (CN) in a x509 certificate. Every service method will have access rules specifying which client can use the method. We will make use of an OWSM policy for configuration.
The following staps will have to be done:
 

  1. Configure keystore
  2. Configure IdentityAsserter to use x509
  3. Create OWSM policy
  4. Attach policy to OSB proxy service
  5. Configure OSB access rules    
  6. User configuration

Generating a client certificate and exchanging public keys between OSB and client are necessary but will only be mentioned.

1.     Configure OSB keystore

In the Enterprise Manager we need to configure the OWSM keystore. In the weblogic domain menu, go to the “Security/Security Provider Configuration”.  Here we specify the keystore location. Keep in mind the owsm-keystore is a different store than the weblogic Identity- or TrustStore and found in a different location <DOMAINHOME>/config/fmwconfig.

Here we also configure the identity certificates used to sign or encrypt messages. Even though we don’t use neither signing nor encryption, we need to specify them.  In this tutorial we use the same certificate everywhere.


2.     Configure IdentityAsserter for x509

The weblogic server needs to be configured to use certificates when doing the authorization. To enable the x509, we need to log in to the weblogic console and navigate to the “security realm/myrealm/providers” tab.



Go into  the DefaultIdentityAsserter.



Under the Active Types make sure the x509 is in the chosen column. If it is not there, move it there. Now open the Provider Specific tab.




Set  the “User Name Mapper Attribute Type” to  “CN”.

Now the server is enabled to use x509 certificates.

3.     Create OWSM Policy

Now we need to set up a OWSM policy. In itself x509 tokens are part of the ws-security specification.  Oracle build the OWSM around all the ws-* specs for the ease of (re)use.

In the Enterprise Manager , navigate back to the domain menu and chose “webservices/policies” from the drop down menu.



We adapt an existing x509 policy , to do that we look for 509 policies by typing “x509” in the name box and pressing the arrow behind it.


We will edit the “oracle/wss10_x509_token_with_message_protection_service_policy” by selecting it and pressing “create like”. This will create a copy of the policy and open it for editing.
Name it “oracle/wss10_x509_token_service _policy”.


On the request tab, deselect the “include entire body” underneath the “Message Signing Settings” and the “Message Encryption Settings”. Repeat that for the Response tab.


Now save the policy.

It is now easy to generate a client policy for this new policy . We repeat the same process but now on the “oracle/wss10_x509_token_with_message_protection_client_policy”.  To find it we need to make sure that the “applies to” field is set to “service clients”.





Select the “oracle/wss10_x509_token_with_message_protection_client_policy” and chose “create like. Name it “oracle/wss10_x509_token_client _policy”.  On the request tab, deselect the “include entire body” underneath the “Message Signing Settings” and the “Message Encryption Settings”. Repeat that for the Response tab. And save.

Now we are ready to start adding policies to an OSB proxy service.

4.     Attach policy to OSB proxy service

We are going to secure the HelloWorld application on the OSB with the just created policy. In the SBConsole navigate to the HelloWorld proxy service in the HelloWorld project. In the “policies” tab, select the “from OWSM Policy store” radio button and click the “add” button.


Select the previously created policy:


Chose to update.

5. Configure OSB access rules

Open the security tab. Here we will configure the Message Access Security configuration.



Click on the “hello” operation link under the PS_HelloWorld  next to Message Access Control. By clicking this link we configure the access control only for this operation in the service. We can also configure the access for the whole service by clicking the PS_HelloWorld link. The configuration in both cases is done exactly the same way.


Click “add conditions”.



In  the predicate list chose user. This user will be the CN name of the x509 certificate of the client. The CN name needs to be added to the user list in the OSB configuration. It would make sense to use a Group here instead of a user. In a situation where you would have more clients calling this service, this would mean adding the new user (CN) to a group. This would be easier than adding new users to the service method access list.

Type the CN name and press the “add” button followed by “finish”.


Save the new configuration and commit the edit session.

6)  User configuration

The final step is to add the user (CN) to the user list. In the SBConsole go to the Security Configuration to add a user by clicking the “add user” button.



In the add the CN name (client in this tutorial) as the user name. A password is required to add a user, but the password is not used in th x509 authorization. Save the new user.

7)    Testing the security

Now we are ready to test the security.  Unfortunately we cannot use SoapUI to test this security since SoapUI has a know bug around the usage of x509 tokens. SOAPSonar is capable of this test but security features are only available in the paid licenses. So we can create a web service proxy in Java or create a test service in another OSB instance.
When we send the following message:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp wsu:Id="Timestamp-vprs64r5JnEgvZxZDpBRTg22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2016-06-06T20:38:24Z</wsu:Created>
<wsu:Expires>2016-06-06T20:43:24Z</wsu:Expires>
</wsu:Timestamp>
<wsse:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsu:Id="BST-L3IG2qjmq8GONRHC1uoQpQ22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
MIIDVTCCAj2gAwIBAgIEa7Ms6zANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJOTDELMAkGA1UECBMCTkgxEjAQBgNVBAcTCUFtc3RlcmRhbTEMMAoGA1UEChMDY2FwMQwwCgYDVQQLEwNjYXAxDzANBgNVBAMTBnNlcnZlcjAeFw0xNjA2MDUxOTE3MzNaFw0xNzA1MzExOTE3MzNaMFsxCzAJBgNVBAYTAk5MMQswCQYDVQQIEwJOSDESMBAGA1UEBxMJQW1zdGVyZGFtMQwwCgYDVQQKEwNjYXAxDDAKBgNVBAsTA2NhcDEPMA0GA1UEAxMGc2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiv4F+IdoEhx9vCtzaZbhqRFHZ0DJ0t7yC5ciLKUfUGg0KLpM7eu/G4C+EgjW3Km1YgTxySSq7VTzfGAKkc3Zy3JSRhqWxdqcSASBkHw1P9sKoneub161n5AvQtMg3gnhqSmR5DDtQL1gGIaI9OcDPoAjawnXHTlXNh6PViE7Y+kn4l+2aGDtB6011bgnq4cy92g7qU3pYlPvXqprol93gc71rR3GBcLo68NVYmGXUV0fE4k40pbTU6WgPWNvj2GXJ6I1h8a8aLhCf3hiZxvHLwO+NLi5KyMlxkDNTYlfFMjWqY7H58zS6LF32oqeuGVGkhLwpJ4KY5qquq7djL0XcQIDAQABoyEwHzAdBgNVHQ4EFgQUdbuQdemGwR0W/hJx00qzzt8xo/AwDQYJKoZIhvcNAQELBQADggEBACMy2rSVtamGw+E7n85wk6mddu9HZUvflnxirqDkwIdRvgH99vjpCMHP/KezmtaMEBMttXEf6cl83gFTvIvHKNgG74Qj3o8yY3nPr6HE9XxYyEwDb0I1KS9AQWdfqsgHQZHiphdh6GGYiVbTFCirKm4YXIByA0QtG6mtpCg21SK0WxdpjudafiA6+Q1TciVj3DBt6gaVzCqPr0GkK/xnwVbQYK2t4/qGT+iq/ZgcgWebUusBP0XX+3HYBtoyYKsTcDsxy0IbFgQvXlTVy/45hYqj3zXC8hdY2wiqIMvbVBQ2XZwE+gwj+q3rU+DI+vaWFiQMZEZpGEJvRK2hYnCWybY=
</wsse:BinarySecurityToken>
<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<dsig:Reference URI="#BST-L3IG2qjmq8GONRHC1uoQpQ22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>qcZ/EnW9iZzk4n8E4/wiuI9cuts=</dsig:DigestValue>
</dsig:Reference>
<dsig:Reference URI="#Timestamp-vprs64r5JnEgvZxZDpBRTg22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>jYKOr+ylEKneUrHSlt7Ntkyw2b4=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>
aLhfEC4r4/CdYD3XTe8xEQn1J40gmB6KKxBtuu4XvsIFgDjbt6xgGIJG5A+AsefakDXz/lFRT1c628eomEsP/TOw/EPZRFi6Zkc38rCQV6nhSc5tyf4mRQ0Ac5FT0TPtUBnoX1Gl/8pN160GCqYwW7IJZUzUs3BvfS8qiFpKD/DLfU462jQJDvPFYBnw2fFyTtSBaOS2nNgO1JfFhuhVsIEI3aVnqrVPQ781zmcE+OKoF6iHzEUlEk4sMosYbFEYoe/gjX79+d1B6zzYCUs7PlCjZmFXaCehXur+TByNaeUCEgNJiFcA84IBxmcpcegco6wmppgVRS5erqBZNe9GtQ==
</dsig:SignatureValue>
<dsig:KeyInfo Id="KeyInfo-U1Ue0aPVWPgrEcxmeF5Iiw22">
<wsse:SecurityTokenReference>
<wsse:Reference URI="#BST-L3IG2qjmq8GONRHC1uoQpQ22" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</dsig:KeyInfo>
</dsig:Signature>
</wsse:Security>
</soap:Header>
<soapenv:Body>
<aw:hello xmlns:aw="http://aw.nl/">
<arg0>Alex</arg0>
</aw:hello>
</soapenv:Body>


We receive the following response:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp wsu:Id="Timestamp-yDK4jnuwrHcSFsZctrbm1A22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2016-06-06T20:38:24Z</wsu:Created>
<wsu:Expires>2016-06-06T20:43:24Z</wsu:Expires>
</wsu:Timestamp>
<wsse:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsu:Id="BST-A1IiFjRIt5Qz0NG9ZqM9DQ22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
MIIDVTCCAj2gAwIBAgIEa7Ms6zANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJOTDELMAkGA1UECBMCTkgxEjAQBgNVBAcTCUFtc3RlcmRhbTEMMAoGA1UEChMDY2FwMQwwCgYDVQQLEwNjYXAxDzANBgNVBAMTBnNlcnZlcjAeFw0xNjA2MDUxOTE3MzNaFw0xNzA1MzExOTE3MzNaMFsxCzAJBgNVBAYTAk5MMQswCQYDVQQIEwJOSDESMBAGA1UEBxMJQW1zdGVyZGFtMQwwCgYDVQQKEwNjYXAxDDAKBgNVBAsTA2NhcDEPMA0GA1UEAxMGc2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiv4F+IdoEhx9vCtzaZbhqRFHZ0DJ0t7yC5ciLKUfUGg0KLpM7eu/G4C+EgjW3Km1YgTxySSq7VTzfGAKkc3Zy3JSRhqWxdqcSASBkHw1P9sKoneub161n5AvQtMg3gnhqSmR5DDtQL1gGIaI9OcDPoAjawnXHTlXNh6PViE7Y+kn4l+2aGDtB6011bgnq4cy92g7qU3pYlPvXqprol93gc71rR3GBcLo68NVYmGXUV0fE4k40pbTU6WgPWNvj2GXJ6I1h8a8aLhCf3hiZxvHLwO+NLi5KyMlxkDNTYlfFMjWqY7H58zS6LF32oqeuGVGkhLwpJ4KY5qquq7djL0XcQIDAQABoyEwHzAdBgNVHQ4EFgQUdbuQdemGwR0W/hJx00qzzt8xo/AwDQYJKoZIhvcNAQELBQADggEBACMy2rSVtamGw+E7n85wk6mddu9HZUvflnxirqDkwIdRvgH99vjpCMHP/KezmtaMEBMttXEf6cl83gFTvIvHKNgG74Qj3o8yY3nPr6HE9XxYyEwDb0I1KS9AQWdfqsgHQZHiphdh6GGYiVbTFCirKm4YXIByA0QtG6mtpCg21SK0WxdpjudafiA6+Q1TciVj3DBt6gaVzCqPr0GkK/xnwVbQYK2t4/qGT+iq/ZgcgWebUusBP0XX+3HYBtoyYKsTcDsxy0IbFgQvXlTVy/45hYqj3zXC8hdY2wiqIMvbVBQ2XZwE+gwj+q3rU+DI+vaWFiQMZEZpGEJvRK2hYnCWybY=
</wsse:BinarySecurityToken>
<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<dsig:Reference URI="#BST-A1IiFjRIt5Qz0NG9ZqM9DQ22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>40CqPSxUPHjwg82/5w9OPU6aBFU=</dsig:DigestValue>
</dsig:Reference>
<dsig:Reference URI="#Timestamp-yDK4jnuwrHcSFsZctrbm1A22">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>DwAyt60T0b89M4SrgRywnJqYHLQ=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>
NQbToO8FYguXG+zc2m0BUnHdvIe8kdVfIJpgGRRjpdSu/Ujlog0e1AmGRxW8DEBdwkGuMIPQcAiRgFh/Nc83bdLWO/BpM2kQs/EHOHU4bOgyopgcBa1KskpibceDAgXl6OEWTB0yxZwE+l8fdnKCriOZzCLclh7xb0YjiMHUjT0GU68XrkGJ2RR+YSWSYK5rkauk9VcnxlMfxX2AOodVNsr46zMsLnAnRcd6cKUn5y9ByTmJ5e/lw8D92+xaUOXWK82g2AJ4dz3BjgytBFys8TLh6h8/cQdLawf8nobPLd+dKvHYhLLWrinQwH8zcvq00hEHpyINVEaG+JAMPGOLOA==
</dsig:SignatureValue>
<dsig:KeyInfo Id="KeyInfo-eH5r2CKJA2fRdnJVoPtZyg22">
<wsse:SecurityTokenReference>
<wsse:Reference URI="#BST-A1IiFjRIt5Qz0NG9ZqM9DQ22" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</dsig:KeyInfo>
</dsig:Signature>
</wsse:Security>
</soap:Header>
<soapenv:Body>
<helloResponse xmlns:aw="http://aw.nl/">
<return>OSB says : hello Alex</return>
</helloResponse>
</soapenv:Body>
</soapenv:Envelope>



The response indicates that the security criteria were met. To double check, remove the client from the OSB user list. We now get a security error, as expected:


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>
BEA-386200: General web service security error
</faultstring>
<detail>
<con:fault xmlns:con="http://www.bea.com/wli/sb/context">
<con:errorCode>BEA-386200</con:errorCode>
<con:reason>General web service security error</con:reason>
<con:location>
<con:path>request-pipeline</con:path>
</con:location>
</con:fault>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>

In the server log you will find the following :
javax.security.auth.login.LoginException: Cannot assert certificate. Reason oracle.security.jps.internal.api.jaas.AssertionException: javax.security.auth.login.FailedLoginException: [Security:090302]Authentication Failed: User server denied.


Conclusion

This is one way of granting access on a service method basis by the use of standard Oracle OSB and OWSM capabilities. With some thought the SOA landscape security can be easily fine tuned and thus optimizing the security of the SOA implementation.  Even though the explained security can be easily added in later stage of the project, the key in security remains  to  start thinking about the security architecture from the beginning to make it an integral part of the architecture . Since security usually is a cross cutting aspect, it is usually very hard and costly to start implementing it at the later stages of the project.

Thursday, December 1, 2016

Oracle ICS - Eloqua Adapter

In this post I would like to talk a little about the functionality of the Eloqua adapter.


The Eloqua adapter in ICS lets you synchronize several Business Objects to ICS and vice versa. The Business Objects Account is only available when using the Eloqua as a Trigger, so this can’t be sent from Eloqua to ICS in the current version, but only from ICS to Eloqua. The use of Custom Objects is fully supported. This means that, when you have a Custom Object in Eloqua, you are able to use this in your integration in ICS. ICS recognizes the Custom Objects and shows them in the wizard when creating an integration including all the created fields.

When you (i.e.) select the Business Object Contacts, the following screen will appear in the wizard. Here you can select all the available fields that you want to get from ICS, when this trigger is called from Eloqua. In the Response you can select the fields you want to use when sending data to Eloqua, since the Eloqua adapter is ALWAYS a two-way integration.

Once you created an integration you can now call this integration from Eloqua. For this you need to have the ICS App installed in Eloqua, you can get this app from the Oracle Marketplace (free).

Once this is installed & configured you can use ICS Action in a Campaign where you can call an integration.
Tip: when configuring the ICS App in Eloqua the format of the ICS URL should be:
https://<ics domain>:<port>/icsapis/v1/integrations


When you create an ICS Action you can select any of the ACTIVATED integrations in your ICS instance.
Now you’re done. When your Campaign hits the ICS Action, the trigger is called in ICS and you will see the selected fields corresponding to the data in the used Business Objects in Eloqua.


Monday, November 21, 2016

Oracle ICS - Basic connections

Oracle ICS - Basic connections

Oracle has been introducing numerous PaaS solutions in the last couple of years. And there’s one we’re really excited about: Integration Cloud Service. It’s the next generation PaaS solution for easy integration of your cloud or on premise silo’s! We’re going to try and keep you posted on the new features, possibilities and awesomeness that Oracle is aiming for with the new Cloud Middleware.
I really want to show everyone how easy it is to connect something with this new Cloud Solution. So I’ll start easy and set up a tutorial to walk you through your first integration in ICS.
We’re going to setup a basic request, where we want to retrieve information from a free weather service.
There’s an interface exposed, we can use for getting some information and what the input should be.
When we login to ICS you see the dashboard where we can define our integrations and connections. We want to setup a new integration. But before that, we’ll need a couple of connections.


1) First we’ll setup a new connection, by creating a new one:


2) Select the SOAP connection type and create it.


This message will inform you whether it was successful, topleft of your screen:

Now it’s time to configure your connection:



3) Upload the WSDL of the interface you’re trying to connect to.
Upload and Ok.


4) Configure the security by setting the security settings to ‘No Security Policy’.

Repeat steps 1 to 4 but your connection role is ‘Trigger’ instead of ‘Invoke’.
Make sure it has the same configuration, and remove any security policies.

5) Now we’re ready to make an integration:



Click New Integration. This opens your integration window, where you’ll be able to link to new endpoint.
Give it a nice name and click Create.

6) We now need a trigger, and an invoke. Which fortunately we just made!

Drag and drop your Trigger to the left side, and your Invoke to the right!






Don’t forget to give them a meaningfull name. Name the integrations something usefull,and stick to naming conventions you agreed upon.
We now should have a similar setup as below.

This is what your integration should look like:


- Left shows the information that triggers your integration.
- Right shows the interface that will be invoked (for instance your on premise application).
- The menu on the right (not on the picture above) shows the connections you have available, that you may want to invoke (inside your ICS environment)


7) All that’s left is map your input/output in both directions, and some tracking!


Now define some tracking items:


Now activate your integration! We can skip tracing.


You can now verify your integration by looking at the details (little information icon). It will give you the WSDL location and endpoint for your integration!


Now we’ll test the application using SOAP-UI. Integration Cloud requires you to use Timestamp, Username and Password, so be sure to add these to your request!

And we’ll have a response!

As you see you can click new connections and integrations together really quickly! Plenty of time left to get a beer!

Oracle ICS - Troubleshooting ICS-20575

####### 1 #######
Adapter: Eloqua
ErrorCode: ICS-20575
ErrorMessage: 
Integration "<INTEGRATION>" cannot be activated. Incident has been created with ID 27. [Cause: ICS-20575]: 
-  Integration "<INTEGRATION>" " cannot be activated because of an internal error. Incident has been created with ID: 27.
  -  com.bea.wli.sb.transports.TransportException: Failed to create inbound JCABindingService for wsdl: servicebus:/ "<INTEGRATION>_01/Resources/resources/application_901/outbound_302/resourcegroup_397/Eloq_REQUEST.wsdl, operation: execute, exception: BINDING.JCA-12600 Generic error. JCA binding runtime error. Cause: {0}. Please inspect the diagnostic log to determine the reason, and if possible...
   -  oracle.cloud.connector.api.CloudInvocationException: java.io.IOException: Message sending failed!!
    -  java.io.IOException: Message sending failed!!
     -  Message sending failed!!

Moment of Error: This error happened while activating an integration where the Eloqua adapter was configured as a Trigger. Integrations where the Eloqua adapter was configured as an Invoke seemed to work fine.

Solution: We didn’t find a solution for the problem. What we did find was that in the latest release of ICS this problem doesn’t occur.
The version that crashes: Version: 16.3.3.0.0 (160716.2301.0530)
The version that works: Version: 16.4.1.0.0 (160924.1456.0623)

Tuesday, November 8, 2016

Oracle ICS - An introduction


Introduction
In this post I would like to talk about ICS. ICS stands for Integration Cloud Service. ICS is a Cloud platform for integration Cloud-Based applications. You can create a Cloud to Cloud integration, as well as On Premise to Cloud, or vice versa. The platform was initially launched in 2015 where it would suit the “citizen developer” for integrating cloud based applications in a fast and easy way.
When working with ICS you notice that Oracle tried to make integration an easy thing. One of the main highlights of ICS are the adapters, and this is where ICS shines. Integrating all the Oracle SaaS products, together with third party applications as well as several Social Media adapters as Facebook, Twitter and Linkedin, is done very easily with ICS. Of course you have the possibility to use any SOAP or REST interface you like.



Integrating
As a developer you don’t need to write a single line of code for you to use these applications in your integration, this is all done by Oracle. You just select the adapter(s) you want to integrate and you’re set to create an integration.
In the image above you see an example of a (real time) integration between Sales Cloud & Service Cloud. Sales Cloud is configured to, when modifying a business object in the application, trigger a call to ICS sending the information concerning this particular business object. In ICS you map the data using several Xpath expressions from one data schema to another, and sent it to the receiving application, in this case Service Cloud. Your accounts are now synced real-time between the two applications. ICS also lets you do a call-back, sending whatever data back to the sending application, or any other application you configured. This of course opens up an endless amount of possibilities where you can share or synchronize your data with other applications.




Orchestration
Besides integration ICS also gives you the opportunity to do a little orchestration. I.e. while creating a contact, you first want to check if the contact doesn’t already exists in the target application. Creating an orchestration is as easy as the integration is. You drag an application to the Start node of the pallet, walk through the wizard which lets you select the business object you want to use, and you can create the orchestration you would like. Currently the functionality is limited to actions like Assigning, Mapping, Return and Switch and of course calling other applications via adapters. There is not scoping or error handling there, but Oracle promised they would add this soon.



Conclusion
At the moment Integration Cloud Service is the most promising cloud integration platform for basic integrating multiple SaaS application. The functionality for orchestrating your integrations is there, but currently this still lacks some form of maturity for it to be worthwhile switching from the obvious options as SOA Suite or Oracle Service Bus. If you just need to integrate two or more cloud applications ICS is the way to go.
We’ll be soon discussing an integration from an on premise to a cloud integration. Stay tuned.