Hello Everyone,
Recently i came across with a requirement to make an integration with GEMS (Some 3rd party tool) and Microsoft share point(Referred as team share in this blog).
Both systems are different with each other in terms of security protocols,message handling. Me & my team spent quiet long time over it so we can easily complete this integration in SOA or OSB but lot's of efforts bring us to always 0 due to many limitations in both platforms and in SOA too.
After wasting more then one month we decided to involve JAVA for making back-end API calls and other integration will be done using SOA, So let me tell you first what all challenges we faced for this integration.
System's over view:
1.https://www.cgs-gems.com/#overview, It's a tool to keep track of some legal processes (No more information available to me over it).
2.Micro-soft share point.
End Req:
1.We will be having few schedulers which will run once/twice in a day and check for new/updated data in GEMS and based on that data will be populated in share point.
Sounds quiet simple but it's not, Let me tell you know few technical points about both.
Solution: We choossed to design JAVA ,PFX JAVA Client
Microsoft share point uses NTLM authentication which again not working in SOA, ohhh yes again SOA 12c provide support for it but again it's not working and same with it too, ORACLE team is working over it.
Solution:We choossed to design JAVA Team Share REST API JAVA
Gems have REST API and based on report JSON response elements will be different, you have to use single adapter for all invocations but response will be different, Again we can't use standard NXSD for JSON to XML.
Solution: Complete process is large, in short we used XSLT & Xquery for doing this part, A separate blog is available here JSON Buildup XQUERY SOA
Team share REST API don't support non-English char's so you have to find some other way for JSON processing.
Solution: In Team Share REST API JAVA i added some piece of code which convert JSON String into BYTE[] with UTF-8 CHAR SET, Before it question came why we needed extra piece of code, In Team share it support below JSON header as content- type "application/json;odata=verbose", due to verbose you can't send charset headers.
Solution: We load daily report and compare all data with complete data and get latest updated records from final report and based on some unique ID from GEMS, delete existing all records and re-create them.
Recently i came across with a requirement to make an integration with GEMS (Some 3rd party tool) and Microsoft share point(Referred as team share in this blog).
Both systems are different with each other in terms of security protocols,message handling. Me & my team spent quiet long time over it so we can easily complete this integration in SOA or OSB but lot's of efforts bring us to always 0 due to many limitations in both platforms and in SOA too.
After wasting more then one month we decided to involve JAVA for making back-end API calls and other integration will be done using SOA, So let me tell you first what all challenges we faced for this integration.
System's over view:
1.https://www.cgs-gems.com/#overview, It's a tool to keep track of some legal processes (No more information available to me over it).
2.Micro-soft share point.
End Req:
1.We will be having few schedulers which will run once/twice in a day and check for new/updated data in GEMS and based on that data will be populated in share point.
Sounds quiet simple but it's not, Let me tell you know few technical points about both.
- Gems system provide us REST API which support all possible HTTP method with a dynamic token for every request.
- This GEMS token generated with another REST API which is a PFX based secured API, now SOA don't have any direct support for PFX, Ohhh yes we spent so many days over it even involved ORACLE support team but out put is zero (Even today we are in process of same with team).
- Microsoft share point uses NTLM authentication which again not working in SOA, ohhh yes again SOA 12c provide support for it but again it's not working and same with it too, ORACLE team is working over it.
- Gems have REST API and based on report JSON response elements will be different, you have to use single adapter for all invocations but response will be different, Again we can't use standard NXSD for JSON to XML.
- Team share REST API don't support non-English char's so you have to find some other way for JSON processing.
- In gems system we don't have any direct way by which can get to know that an existing record is modified or newly created.
Ahhh!!!! Long list of issue.............................................
To over-come technical issues which were point 2 and point 3 we choossed to write some generic piece of code in JAVA, ohhh yes JAVA but we are not using JAVA directly into SOA we have separate JAVA projects which are used inside OSB. Here OSB work's as a wrapper for all GEMS & SHARE POINT JAVA implementation.
Earlier i shared a blog over PFX stuff, Which is generic and any one can use it.
Blog is available here,
For Team share before REST API we choosed to work with SOAP but due to limited operation provided in SOAP we choosed to go REST.
Team share SOAP implementation is available here,
But we have to go with team share REST API, You can find java implementation here.
Let me talk now one by one for all issues:
Gems system provide us REST API which support all possible HTTP method with a dynamic token for every request.
Gems system provide us REST API which support all possible HTTP method with a dynamic token for every request.
Solution: We designed REST adapter in SOA with all basic input/output, Req/headers which are different for different req's, We kept it as Dynamic.
This GEMS token generated with another REST API which is a PFX based secured API, now SOA don't have any direct support for PFX, Ohhh yes we spent so many days over it even involved ORACLE support team but out put is zero (Even today we are in process of same with team).
This GEMS token generated with another REST API which is a PFX based secured API, now SOA don't have any direct support for PFX, Ohhh yes we spent so many days over it even involved ORACLE support team but out put is zero (Even today we are in process of same with team).
Solution: We choossed to design JAVA ,PFX JAVA Client
Microsoft share point uses NTLM authentication which again not working in SOA, ohhh yes again SOA 12c provide support for it but again it's not working and same with it too, ORACLE team is working over it.
Solution:We choossed to design JAVA Team Share REST API JAVA
Gems have REST API and based on report JSON response elements will be different, you have to use single adapter for all invocations but response will be different, Again we can't use standard NXSD for JSON to XML.
Solution: Complete process is large, in short we used XSLT & Xquery for doing this part, A separate blog is available here JSON Buildup XQUERY SOA
Team share REST API don't support non-English char's so you have to find some other way for JSON processing.
Solution: In Team Share REST API JAVA i added some piece of code which convert JSON String into BYTE[] with UTF-8 CHAR SET, Before it question came why we needed extra piece of code, In Team share it support below JSON header as content- type "application/json;odata=verbose", due to verbose you can't send charset headers.
We added below piece of code into JAVA team share implementation.
if (JSONRequest != null && JSONRequest != "") {
byte[] byteData = JSONRequest.getBytes(Charset.forName("UTF-8"));
RequestEntity requestEntity = new ByteArrayRequestEntity(byteData,
"application/json");
postMethod.setRequestEntity(requestEntity);
}
In gems system we don't have any direct way by which can get to know that an existing record is modified or newly created.
In gems system we don't have any direct way by which can get to know that an existing record is modified or newly created.
Solution: We load daily report and compare all data with complete data and get latest updated records from final report and based on some unique ID from GEMS, delete existing all records and re-create them.
It took us more then 3 months to complete this integration, Integration was quiet simple but due to non-supportive technical protocols and behavior of systems it took us long enough time to complete it, Right now it's in UAT & in coming 1-2 week we will be live with it.
I discovered many new things during this integration, Hope it will help you!!! If you want to know more about this integration, Post your question( Still lots of implementation points are hiding in this blog)
Its an amazing blog.
ReplyDeleteOracle Integration Cloud Service Online Training