You are on page 1of 21

Informatica MDM Multidomain (Version 9.0.

1)





SIF SDK Usage and Enabling SOA Guide
(Siperian Hub XU SP2)


2 SIF SDK Usage and Enabling SOA
Informatica MDM Multidomain Hub - Version 9.0.1 - September 2010

Copyright (c) 2010 Informatica. All rights reserved.

This software and documentation contain proprietary information of Informatica Corporation and are provided under a license agreement
containing restrictions on use and disclosure and are also protected by copyright law. Reverse engineering of the software is prohibited.
No part of this document may be reproduced or transmitted in any form, by any means (electronic, photocopying, recording or otherwise)
without prior consent of Informatica Corporation. This Software is be protected by U.S. and/or international Patents and other Patents
Pending.
Use, duplication, or disclosure of the Software by the U.S. Government is subject to the restrictions set forth in the applicable software
license agreement and as provided in DFARS 227.7202-1(a) and 227.7702-3(a) (1995), DFARS 252.227-7013(1)(ii) (OCT 1988), FAR
12.212(a) (1995), FAR 52.227-19, or FAR 52.227-14 (ALT III), as applicable.
The information in this product or documentation is subject to change without notice. If you find any problems in this product or
documentation, please report them to us in writing.
Informatica, Informatica Platform, Informatica Data Services, PowerCenter, PowerCenterRT, PowerCenter Connect, PowerCenter Data
Analyzer, PowerExchange, PowerMart, Metadata Manager, Informatica Data Quality, Informatica Data Explorer, Informatica B2B Data
Transformation, Informatica B2B Data Exchange, Informatica On Demand and Siperian are trademarks or registered trademarks of Informatica
Corporation in the United States and in jurisdictions throughout the world. All other company and product names may be trade names or
trademarks of their respective owners.
Portions of this software and/or documentation are subject to copyright held by third parties, including without limitation: Copyright
DataDirect Technologies. All rights reserved. Copyright Sun Microsystems. All rights reserved.
This product includes software developed by the Apache Software Foundation (http://www.apache.org/), and other software which is
licensed under the Apache License, Version 2.0 (the "License"). You may obtain a copy of the License at http://www.apache.org/licenses/
LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS
IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.
This product includes software which is licensed under the GNU Lesser General Public License Agreement, which may be found at
http://www.gnu.org/licenses/lgpl.html. The materials are provided free of charge by Informatica, "as-is", without warranty of any kind, either express or
implied, including but not limited to the implied warranties of merchantability and fitness for a particular purpose.
This product includes software which is licensed under the CDDL (the "License"). You may obtain a copy of the License at
http://www.sun.com/cddl/cddl.html. The materials are provided free of charge by Informatica, "as-is", without warranty of any kind, either express or implied,
including but not limited to the implied warranties of merchantability and fitness for a particular purpose. See the License for the specific language
governing permissions and limitations under the License.
This product includes software which is licensed under the BSD License (the "License"). You may obtain a copy of the License at
http://www.opensource.org/licenses/bsd-license.php. The materials are provided free of charge by Informatica, "as-is", without warranty of any kind, either
express or implied, including but not limited to the implied warranties of merchantability and fitness for a particular purpose. See the License for the
specific language governing permissions and limitations under the License.
This product includes software Copyright (c) 2003-2008, Terence Parr, all rights reserved which is licensed under the BSD License (the "License"). You
may obtain a copy of the License at http://www.antlr.org/license.html. The materials are provided free of charge by Informatica, "as-is", without warranty of
any kind, either express or implied, including but not limited to the implied warranties of merchantability and fitness for a particular purpose. See the License
for the specific language governing permissions and limitations under the License.
This product includes software Copyright (c) 2000 - 2009 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) which is licensed
under a form of the MIT License (the "License"). You may obtain a copy of the License at http://www.bouncycastle.org/licence.html. The
materials are provided free of charge by Informatica, "as-is", without warranty of any kind, either express or implied, including but not limited to
the implied warranties of merchantability and fitness for a particular purpose. See the License for the specific language governing permissions
and limitations under the License.
DISCLAIMER: Informatica Corporation provides this documentation "as is" without warranty of any kind, either express or implied,
including, but not limited to, the implied warranties of non-infringement, merchantability, or use for a particular purpose. Informatica
Corporation does not warrant that this software or documentation is error free. The information provided in this software or documentation
may include technical inaccuracies or typographical errors. The information in this software and documentation is subject to change at
any time without notice.
NOTICES
This Informatica product (the Software) may include certain drivers (the DataDirect Drivers) from DataDirect Technologies, an operating company of Progress Software
Corporation (DataDirect) which are subject to the following terms and conditions:
1. THE DATADIRECT DRIVERS ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOTLIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
2. IN NO EVENT WILL DATADIRECT OR ITS THIRD PARTY SUPPLIERS BE LIABLE TO THE END-USER CUSTOMER FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, CONSEQUENTIAL OR OTHER DAMAGES ARISING OUT OF THE USE OF THE ODBC DRIVERS, WHETHER OR NOT INFORMED OF THE POSSIBILITIES OF
DAMAGES IN ADVANCE. THESE LIMITATIONS APPLY TO ALL CAUSES OF ACTION, INCLUDING, WITHOUT LIMITATION, BREACH OF CONTRACT, BREACH OF
WARRANTY, NEGLIGENCE, STRICT LIABILITY, MISREPRESENTATION AND OTHER TORTS.
SIF SDK Usage and Enabling SOA 3
Informatica Resources
Informatica Customer Portal
As an Informatica customer, you can access the Informatica Customer Portal site at http://my.informatica.com. The site contains
product information, user group information, newsletters, access to the Informatica customer support case management system
(ATLAS), the Informatica How-To Library, the Informatica Knowledge Base, the Informatica Multimedia Knowledge Base,
Informatica Documentation Center, and access to the Informatica user community.

Informatica Documentation
The Informatica Documentation team takes every effort to create accurate, usable documentation. If you have questions,
comments, or ideas about this documentation, contact the Informatica Documentation team through email at
infa_documentation@informatica.com. We will use your feedback to improve our documentation. Let us know if we can contact
you regarding your comments.
The Documentation team updates documentation as needed. To get the latest documentation for your product, navigate to the
Informatica Documentation Center from http://my.informatica.com.

Informatica Web Site
You can access the Informatica corporate web site at http://www.informatica.com. The site contains information about
Informatica, its background, upcoming events, and sales offices. You will also find product and partner information. The services
area of the site includes important information about technical support, training and education, and implementation services.

Informatica How-To Library
As an Informatica customer, you can access the Informatica How-To Library at http://my.informatica.com. The How-
To Library is a collection of resources to help you learn more about Informatica products and features. It includes articles and
interactive demonstrations that provide solutions to common problems, compare features and behaviors, and guide you through
performing specific real-world tasks.

Informatica Knowledge Base
As an Informatica customer, you can access the Informatica Knowledge Base at http://my.informatica.com. Use the Knowledge
Base to search for documented solutions to known technical issues about Informatica products. You can also find answers to
frequently asked questions, technical white papers, and technical tips. If you have questions, comments, or ideas about the
Knowledge Base, contact the Informatica Knowledge Base team through email at KB_Feedback@informatica.com.

Informatica Multimedia Knowledge Base
As an Informatica customer, you can access the Informatica Multimedia Knowledge Base at
http://my.informatica.com. The Multimedia Knowledge Base is a collection of instructional multimedia files that help you learn
about common concepts and guide you through performing specific tasks. If you have questions, comments, or ideas about the
Multimedia Knowledge Base, contact the Informatica Knowledge Base team through email at KB_Feedback@informatica.com.

4 SIF SDK Usage and Enabling SOA

Informatica Global Customer Support
You can contact a Customer Support Center by telephone or through the WebSupport Service. WebSupport requires a user name
and password. You can request a user name and password at http://my.informatica.com.
Use the following telephone numbers to contact Informatica Global Customer Support:
North America / South America Europe / Middle East / Africa Asia / Australia

Toll Free
+1 877 463 2435

Standard Rate
Brazil: +55 11 3523 7761
Mexico: +52 55 1168 9763
United States: +1 650 385 5800

Toll Free
00 800 4632 4357

Standard Rate
Belgium: +32 15 281 702
France: +33 1 41 38 92 26
Germany: +49 1805 702 702
Netherlands: +31 306 022 797
Spain and Portugal: +34 93 480 3760
United Kingdom: +44 1628 511 445

Toll Free
Australia: 1 800 151 830
Singapore: 001 800 4632 4357

Standard Rate
India: +91 80 4112 5738

SIF SDK Usage and Enabling SOA 5
Contents
1 Introduction ............................................................................................................................. 6
1.1 Prerequisites .................................................................................................................... 6
1.2 System Configuration ..................................................................................................... 7
2 Description of Web Service Examples ................................................................................... 7
2.1 PartyWebServiceExample .............................................................................................. 7
2.2 LookupWebServiceExample .......................................................................................... 7
2.2.1 Lookup Code Services ............................................................................................ 7
2.2.2 Cross-reference Service .......................................................................................... 8
3 Informatica MDM Sample ORS Configuration ...................................................................... 8
3.1 Source Systems ............................................................................................................... 8
3.2 Data Model...................................................................................................................... 8
3.3 Base Objects.................................................................................................................... 9
3.4 Packages and Queries ................................................................................................... 10
4 PartyWebServiceExample .................................................................................................... 12
5 Lookup Web Service Example ............................................................................................. 14
5.1 Lookup Code Services .................................................................................................. 14
5.2 Cross-reference Lookup Service ................................................................................... 16
6 Using and Testing Web Services .......................................................................................... 18
6.1 Testing Web Services with a Web Browser ................................................................. 18
6.2 Testing Web Services with SoapUI .............................................................................. 18
7 Creating a Web Service ........................................................................................................ 19

6 SIF SDK Usage and Enabling SOA
1 Introduction

The purpose of this document is to provide a general guide for developers using the
Informatica MDM SIF API to create Web Services to access, update, or distribute data stored
in an Informatica MDM Hub. This guide has been written for application developers,
database administrators, system administrators, and other technical members of an
Informatica MDM Hub implementation team.

Two Web Service examples have been included with the Informatica MDM Resource Kit
sample applications. This document describes those examples in detail including specific
methods for testing Web Services, and a step-by-step guide for creating your own custom
Web Services. The examples are a good starting point for creating Web Service elements
that can be incorporated into the SOA infrastructure of your organization.

The following topics are covered in this document:

Description of Web Service examples
PartyWebServiceExample
LookupWebServiceExample
Informatica MDM sample ORS configuration
Brief overview of the Resource Kit sample ORS
Configuration components relevant to the Web Service examples
Party Web Service example
Composite services for complex data objects
Party services
Sample request/response XML
Lookup Web Service example
Lookup code services
Code translation services
Cross-reference service
Sample request/response XML
Using and testing Web Services
Test cases for Web Service examples
Using SoapUI to test Web Services
Creating your own Web Service
Guidelines for code developers

It is recommended that developers use the code examples in conjunction with this
document to develop their own Web Services. The source code for the examples can be
copied and edited as needed to create new Web Services.

1.1 Prerequisites
The developer should already have a basic understanding of the following software and
technologies:
Java
Web Services
Informatica MDM Hub XU SP2

SIF SDK Usage and Enabling SOA 7
1.2 System Configuration
Make sure that you fulfill the following software requirements. To learn more about these
requirements, see the Informatica MDM (Siperian) Hub XU SP2 Release Notes.

Application Server - the examples use JBoss-4.0.3SP1
Eclipse IDE
Sun JDK 1.5.0
Informatica MDM (Siperian) Hub XU SP2
2 Description of Web Service Examples

This section describes two composite Web Service examples:
PartyWebServiceExample
LookupWebServiceExample

2.1 PartyWebServiceExample

PartyWebServiceExample is a composite Web Service that provides several services for
managing Party data. Similar composite Web Services can be used to make Master Data
stored in the Informatica MDM Hub available to consuming applications across the
enterprise. The example includes services to search for Party data, get Party data, and
maintain Party data.

The Party data structure is a complex object that consists of the main base object (Party)
with a child base object (Party Phone) and two base objects (Account and Address) related
to Party by relationship base objects (Party Account Relationship and Party Address
Relationship).

The initial version of the source code for this example was created using the WSCodeGen
plug-in for Eclipse. The code was then modified to add the necessary business logic to
complete the Web Service. The WSCodeGen plug-in is distributed as part of the Informatica
MDM Resource Kit and its use should be reviewed along with the code from this example to
learn how developers can quickly create a skeleton Web Service project in Eclipse using
the supplied wizard.

2.2 LookupWebServiceExample

LookupWebServiceExample is also a composite Web Service that provides two sets of Web
Services:
Lookup code services
A cross-reference service

2.2.1 Lookup Code Services

The Lookup Code Services are simple services that get code descriptions for the given key,
and validate a code value or translate a code value from one system to the code value for
8 SIF SDK Usage and Enabling SOA
another system. Also provided are services that return an entire code set or translate an
entire set between two systems.

These services can be used in a typical scenario where multiple enterprise applications are
being integrated, yet they do not have a unified set of reference code values. A Lookup
Service similar to this example can resolve the different lookup values in a complex data
orchestration touching multiple systems. Such a service can be used by composite
applications that bring data together from multiple sources.

2.2.2 Cross-reference Service

The Cross-reference Service is a simple service that is essential to complex integration of
multiple enterprise systems. The service uses the cross-reference table in the Informatica
MDM Hub to provide the set of all source system keys for a particular base object record.
The input is a unique key value from either the Hub or from one of the sources paired with
the source system name. This service can be used to provide all consuming applications
with the correct set of unique identifiers for a particular base object record. This is
necessary when publishing data updates from the Hub to downstream systems after data
consolidation in the Hub.
3 Informatica MDM Sample ORS Configuration

The SIF SDK Web Service examples are based on the Informatica MDM Sample ORS which
is installed as part of the Resource Kit. This sample Informatica MDM Hub implementation
integrates three primary source applications, one data augmentation source, and a
reference system. These sources provide the data for Party, Address, Household, and
Product information.

The sample Web Services rely on configured components in the ORS. This section identifies
the components used by these services. The components are necessary for the examples to
function properly. Any modification to them may change the functionality of the services,
change the results of the services or cause the services to fail.

For more information on the configuration of the Sample ORS refer to the Sample Schema
Guide.
3.1 Source Systems

Here are the data sources used by the Web Service examples:
SFA A Sales Force Automation system providing party, address, household, and
account data.
Legacy A legacy system providing party, address, household, and relationship
data.
Lookups A source system providing reference table data for lookups.
3.2 Data Model
A Party data model has been defined to address the Master Data needs for Individual,
Organization, and their relationship to Account data. The data model also contains a Product
data model to address product Master Data.
SIF SDK Usage and Enabling SOA 9

The diagram below, generated by the Informatica MDM Schema Viewer, depicts the data
model configured in the sample ORS.


Figure 1 Informatica MDM Sample Data Model as shown in the Schema Viewer tool

3.3 Base Objects

The following Base Objects from the Informatica MDM Sample ORS are used by the Web
Service examples:

Party Data Model Base Objects
Display Name Table Name Description
Account C_ACCOUNT
Accounts held by a Party. Includes credit cards, debit
cards, store accounts, and so on.
Address C_ADDRESS Consolidated Addresses per Customer.
Party C_PARTY
Party Base Object with Individual and Organization
data:
- Tax Id Can be organizations Tax Id or Individuals
Social Security Number.
- Status Cd Used to support workflow (Pending,
Active, Deleted).
- DNB Level A cleanse function within the schema
will determine this based on the data from DNB.
- Display Name Name to be displayed in the Hub
console.
Party Account
Relationship
C_REL_PARTY_ACCOUNT Accounts held by a specific Party.
Party Address Rel C_RL_PARTY_ADDRESS Party to Address relationship.
10 SIF SDK Usage and Enabling SOA
Party Data Model Base Objects
Display Name Table Name Description
Party Phone C_PARTY_PHONE
Phone numbers of Parties:
- Valid Ind For US phone numbers. If anyone
creates validation for International numbers, please
send to SDC to update this model.
- Do Not Call May be set to Yes for work and No for
Home (if an Individual states that they do not wish to
be disturbed at work).

Lookup Base Objects
Display Name Table Name Description
LU Country C_LU_COUNTRY
Lookup table for Country Codes. Different systems may
use different values for county code (for example, ISO
2, ISO 3, Country Name).
LU State C_LU_STATE Lookup table for state codes.

3.4 Packages and Queries

The PartyWebServiceExample application uses the following packages:

PartyWebServiceExample Packages
Display Name Physical Name Query
PKG WS Party Account Put PKG_WS_PTY_ACCOUNT_PUT QRY WS PTY Account
PKG WS Party Address Put PKG_WS_PTY_ADDRESS_PUT QRY WS PTY Address
PKG WS Party Party Put PKG_WS_PTY_PARTY_PUT QRY WS PTY Party
PKG WS Party Phone Put PKG_WS_PTY_PHONE_PUT QRY WS PTY Phone
PKG WS Party Account Rel Put PKG_WS_PTY_ACCT_REL_PUT QRY WS PTY Account Rel
PKG WS Party Address Rel Put PKG_WS_PTY_ADDR_REL_PUT QRY WS PTY Address Rel

The PartyWebServiceExample application uses the following queries:

PartyWebServiceExample Queries
Query SQL
QRY WS PTY Account
SELECT C_ACCOUNT.ROWID_OBJECT, C_ACCOUNT.ACCOUNT_NUMBER,
C_ACCOUNT.CARDHOLDER_NAME, C_ACCOUNT.STREET_NAME,
C_ACCOUNT.CITY, C_ACCOUNT.STATE_PROVINCE, C_ACCOUNT.POSTAL_CODE,
C_ACCOUNT.EXPIRATION_MONTH, C_ACCOUNT.EXPIRATION_YEAR,
C_ACCOUNT.ISSUING_COMPANY, C_ACCOUNT.SECURITY_CODE,
C_ACCOUNT.ACCOUNT_TYPE, C_ACCOUNT.HUB_STATE_IND FROM C_ACCOUNT
QRY WS PTY Address
SELECT C_ADDRESS.ROWID_OBJECT, C_ADDRESS.ADDRESS_LINE_1,
C_ADDRESS.ADDRESS_LINE_2, C_ADDRESS.ADDRESS_LINE_3,
C_ADDRESS.CITY_NAME, C_ADDRESS.STATE_CD, C_ADDRESS.POSTAL_CD,
C_ADDRESS.POSTAL_EXT_CD, C_ADDRESS.IS_VALID_IND,
C_ADDRESS.CARE_OF_ADDRESS, C_ADDRESS.PO_BOX,
C_ADDRESS.MAIL_BOX_NUMBER, C_ADDRESS.BLDG_NAME,
C_ADDRESS.DEPT_NAME, C_ADDRESS.FLOOR_NUMBER,
C_ADDRESS.UNIT_NUMBER, C_ADDRESS.STREET_NUMBER,
C_ADDRESS.STREET_TYPE, C_ADDRESS.STREET_NAME,
C_ADDRESS.COUNTY_NAME, C_ADDRESS.COUNTRY_CODE,
C_ADDRESS.LATITUDE, C_ADDRESS.LONGITUDE, C_ADDRESS.EFF_START_DATE,
C_ADDRESS.EFF_END_DATE, C_ADDRESS.POSTAL_SUB3 FROM C_ADDRESS
SIF SDK Usage and Enabling SOA 11
PartyWebServiceExample Queries
Query SQL
QRY WS PTY Party
SELECT C_PARTY.ROWID_OBJECT, C_PARTY.NAME_PREFIX_CD,
C_PARTY.FIRST_NAME, C_PARTY.LAST_NAME, C_PARTY.MIDDLE_NAME,
C_PARTY.GENERATION_SUFFIX_CD, C_PARTY.ORGANIZATION_NAME,
C_PARTY.DUNS_NUMBER, C_PARTY.TAX_ID, C_PARTY.BIRTHDATE,
C_PARTY.GENDER_CD, C_PARTY.STATUS_CD, C_PARTY.DNB_LEVEL,
C_PARTY.DISPLAY_NAME, C_PARTY.HM_DISPLAY, C_PARTY.PARTY_TYPE,
C_PARTY.HUB_STATE_IND FROM C_PARTY
QRY WS PTY Phone
SELECT C_PARTY_PHONE.ROWID_OBJECT,
C_PARTY_PHONE.PHONE_COUNTRY_CD, C_PARTY_PHONE.PHONE_NUM,
C_PARTY_PHONE.PHONE_EXT_NUM, C_PARTY_PHONE.IS_VALID_IND,
C_PARTY_PHONE.EFF_START_DATE, C_PARTY_PHONE.EFF_END_DATE,
C_PARTY_PHONE.DO_NOT_CALL_IND, C_PARTY_PHONE.PHONE_TYPE_CD,
C_PARTY_PHONE.PARTY_ID FROM C_PARTY_PHONE
QRY WS PTY Account Rel
SELECT C_REL_PARTY_ACCOUNT.ROWID_OBJECT,
C_REL_PARTY_ACCOUNT.ROWID_HIERARCHY,
C_REL_PARTY_ACCOUNT.ROWID_REL_TYPE,
C_REL_PARTY_ACCOUNT.PARTY_ID, C_REL_PARTY_ACCOUNT.ACCOUNT_ID,
C_REL_PARTY_ACCOUNT.REL_START_DATE,
C_REL_PARTY_ACCOUNT.REL_END_DATE,
C_REL_PARTY_ACCOUNT.DEFAULT_PAYMENT_ACCOUNT,
C_REL_PARTY_ACCOUNT.HUB_STATE_IND FROM C_REL_PARTY_ACCOUNT
QRY WS PTY Address Rel
SELECT C_RL_PARTY_ADDRESS.ROWID_OBJECT,
C_RL_PARTY_ADDRESS.PARTY_ID, C_RL_PARTY_ADDRESS.ADDRESS_ID,
C_RL_PARTY_ADDRESS.ADDRESS_TYPE,
C_RL_PARTY_ADDRESS.EFF_START_DATE,
C_RL_PARTY_ADDRESS.EFF_END_DATE, C_RL_PARTY_ADDRESS.STATUS_CD,
C_RL_PARTY_ADDRESS.PREFERRED_IND, C_RL_PARTY_ADDRESS.OPT_IN_IND
FROM C_RL_PARTY_ADDRESS

The LookupWebServiceExample application uses the following packages:

LookupWebServiceExample Packages
Display Name Physical Name Query
PKG WS Lookup Country Code Xref PKG_WS_LKP_COUNTRY_XREF QRY WS LKP Country Code Xref
PKG WS Lookup Legacy Party Xref PKG_WS_LKP_LGC_PARTY_XREF QRY WS LKP LGC Party Xref
PKG WS Lookup SFA Party Xref PKG_WS_LKP_SFA_PARTY_XREF QRY WS LKP SFA Party Xref
PKG WS Lookup State Code Xref PKG_WS_LKP_STATE_XREF QRY WS LKP State Code Xref
PKG MRM System lookup PKG_MRM_SYSTEM_LOOKUP QRY MRM System

The LookupWebServiceExample application uses the following queries:

LookupWebServiceExample Queries
Query SQL
QRY WS LKP Country Code Xref
SELECT C_REPOS_SYSTEM.ROWID_SYSTEM, C_REPOS_SYSTEM.CREATE_DATE,
C_REPOS_SYSTEM.CREATOR, C_REPOS_SYSTEM.LAST_UPDATE_DATE,
C_REPOS_SYSTEM.UPDATED_BY, C_REPOS_SYSTEM.SYSTEM_NAME,
C_REPOS_SYSTEM.DESCRIPTION, C_REPOS_SYSTEM.LAST_LOAD_DATE,
C_REPOS_SYSTEM.ADMIN_IND, C_REPOS_SYSTEM.SEQ FROM C_REPOS_SYSTEM
12 SIF SDK Usage and Enabling SOA
LookupWebServiceExample Queries
Query SQL
QRY WS LKP LGC Party Xref
SELECT C_PARTY_XREF.PKEY_SRC_OBJECT AS PARTY_PKEY_SRC,
C_PARTY_XREF.ROWID_OBJECT AS ROWID_OBJECT,
C_ADDRESS_XREF.PKEY_SRC_OBJECT AS ADDRESS_PKEY_SRC,
C_PARTY_XREF.ROWID_SYSTEM AS ROWID_SYSTEM,
C_ADDRESS_XREF.ADDRESS_LINE_1 AS ADDRESS_LINE_1,
C_RL_PARTY_ADDRESS_XREF.S_PARTY_ID AS S_ROWID_PARTY,
C_RL_PARTY_ADDRESS_XREF.ADDRESS_TYPE AS S_ROWID_ADDR_TYPE FROM
C_RL_PARTY_ADDRESS_XREF INNER JOIN C_PARTY_XREF ON
C_RL_PARTY_ADDRESS_XREF.PARTY_ID = C_PARTY_XREF.ROWID_OBJECT
INNER JOIN C_ADDRESS_XREF ON C_RL_PARTY_ADDRESS_XREF.ADDRESS_ID =
C_ADDRESS_XREF.ROWID_OBJECT WHERE
C_RL_PARTY_ADDRESS_XREF.ROWID_SYSTEM = 'Legacy' AND
C_PARTY_XREF.ROWID_SYSTEM = 'Legacy' AND
C_ADDRESS_XREF.ROWID_SYSTEM = 'Legacy'
QRY WS LKP SFA Party Xref
SELECT C_PARTY_XREF.PKEY_SRC_OBJECT AS PARTY_PKEY_SRC,
C_PARTY_XREF.ROWID_OBJECT AS ROWID_OBJECT,
C_ADDRESS_XREF.PKEY_SRC_OBJECT AS ADDRESS_PKEY_SRC,
C_ADDRESS_XREF.ADDRESS_LINE_1 AS ADDRESS_LINE_1,
C_ADDRESS_XREF.CITY_NAME AS CITY, C_ADDRESS_XREF.STATE_CD AS STATE,
C_PARTY_XREF.DISPLAY_NAME AS PARTY_FULL_NAME FROM
C_RL_PARTY_ADDRESS_XREF INNER JOIN C_PARTY_XREF ON
C_RL_PARTY_ADDRESS_XREF.PARTY_ID = C_PARTY_XREF.ROWID_OBJECT
INNER JOIN C_ADDRESS_XREF ON C_RL_PARTY_ADDRESS_XREF.ADDRESS_ID =
C_ADDRESS_XREF.ROWID_OBJECT WHERE
C_RL_PARTY_ADDRESS_XREF.ROWID_SYSTEM = 'SFA' AND
C_PARTY_XREF.ROWID_SYSTEM = 'SFA' AND C_ADDRESS_XREF.ROWID_SYSTEM
= 'SFA'
QRY WS LKP State Code Xref
SELECT C_LU_STATE_XREF.PKEY_SRC_OBJECT,
C_LU_STATE_XREF.ROWID_OBJECT, C_LU_STATE_XREF.ROWID_SYSTEM,
C_LU_STATE_XREF.STATE_ABBREVIATION,
C_LU_STATE_XREF.STATE_NAME_DISP AS CD_DSC FROM C_LU_STATE_XREF
QRY MRM System
SELECT C_REPOS_SYSTEM.ROWID_SYSTEM, C_REPOS_SYSTEM.CREATE_DATE,
C_REPOS_SYSTEM.CREATOR, C_REPOS_SYSTEM.LAST_UPDATE_DATE,
C_REPOS_SYSTEM.UPDATED_BY, C_REPOS_SYSTEM.SYSTEM_NAME,
C_REPOS_SYSTEM.DESCRIPTION, C_REPOS_SYSTEM.LAST_LOAD_DATE,
C_REPOS_SYSTEM.ADMIN_IND, C_REPOS_SYSTEM.SEQ FROM C_REPOS_SYSTEM


4 PartyWebServiceExample

PartyWebServiceExample is a composite service created to manage Party data in the
Informatica MDM Hub. This example combines the underlying granular Informatica MDM SIF
APIs into a cohesive service that can be exposed to a SOA infrastructure for use within
complex enterprise system integrations.

PartyWebServiceExample shows how a complex data object can be translated into the
underlying base object relational structure of the Informatica MDM Hub. The structure of the
Party data object is built into the logic of the Party Web Service code for getting the Party
data and for inserting or updating Party data.

Note: The initial code skeleton for this example Web Service was created using the Web
Service Code Generation Plug-in (WsCodeGen) utility for Eclipse. This plug-in is distributed
as part of the Informatica MDM Resource Kit. Developers reviewing the Party Web Service
example should also become familiar with the plug-in and the code components generated
by the plug-in as a starting point for building complex composite services.

The following services were created for the Party data object:
SIF SDK Usage and Enabling SOA 13

getParty - Retrieves a single Party profile using a record key. A record key can
either be the Party Rowid Object or Source System and Pkey Src Object.
findParty - Searches for a Party profile based on attributes entered for Party and/or
Address. This search uses the fuzzy match capabilities of the Informatica MDM Hub.
maintainParty - Maintains the composite Party data object comprising of Party,
Account, Address, and Telecom entities as well as the relation tables between
Account and Address. When doing a put either the object is created (with the Rowid
Object auto-generated) or the matching object is updated.

Here is an example of a request and response XML for the PartyWebServiceExample, using
the getParty service. The request is to get the entire party data object for the Party with
Pkey Src Object value of 90000045 in the SFA system.

Request XML for the getParty Service:

<urn:getPartyRequest>
<urn:rowid></urn:rowid>
<urn:sourceKey>90000045</urn:sourceKey>
<urn:systemKey>SFA</urn:systemKey>
</urn:getPartyRequest>

Response XML from the composite get service (note this Party only has a Party record, it
does not have Address, Phone or Account records. See Test Cases for more complex
examples):

<getPartyRequestReturn xmlns="urn:sif.siperian.com">
- <party>
- <accountList xsi:nil="true" >
- <addressList xsi:nil="true" >
<birthdate xsi:nil="true" />
<displayName>KISMAT PREFERRED, LLC</displayName>
<addressLine1>1616 BAYO VISTA AVE</addressLine1>
<dnbLevel xsi:nil="true" />
<dunsNumber xsi:nil="true" />
<firstName xsi:nil="true" />
<genderCd xsi:nil="true" />
<generationSuffixCd xsi:nil="true" />
<hmDisplay>KISMAT PREFERRED, LLC (, )</ hmDisplay >
<hubStateInd xsi:nil="true" />
<lastName xsi:nil="true" />
<middleName xsi:nil="true" />
<namePrefixCd xsi:nil="true" />
<organizationName>KISMAT PREFERRED, LLC</organizationName>
<partyPhoneList xsi:nil="true" />
<partyType>Organization</partyType>
<pkeySrcObject xsi:nil="true" />
<rowidObject>242</rowidObject>
<source xsi:nil="true" />
<statusCd xsi:nil="true" />
<taxId xsi:nil="true" />
</party>
</getPartyRequestReturn>

You can try invoking the sample PartyWebServiceExample at the following location in your
sample ORS environment after replacing the hostname and port-number parameters to
match your environment -
http://hostname:port/PartyWebServiceExample/services/SiperianWebServices?wsdl

14 SIF SDK Usage and Enabling SOA
There is an Excel file provided in the PartyWebServiceExample folders that has a number of
test cases that you can run in SoapUI. For more details, see Using and Testing Web
Services in this document.

5 Lookup Web Service Example

This section describes the following topics:
Lookup code services
Cross-reference lookup service

5.1 Lookup Code Services

Reference data management, or lookup code management, is a typical problem of data
integration and MDM, especially in heterogeneous environments. While reference data can
be complex, the lookup code Web Service shows a simple example using State and Country
codes coming from two source systems.

The sample ORS contains a number of base objects that hold lookup type reference data.
These base objects are used to restrict and validate data in related fields in other base
objects. For example, the Address base object has a field called Country Code. This field has
a foreign key relationship to the LU Country base object to ensure that the Country Code
value in the Address record is one of the values in the Country Code field on the LU Country
reference data base object.

The Informatica MDM Hub manages reference data or lookup codes from different systems
using built-in cross-referencing capabilities. Reference data from multiple systems can be
brought into the Hub, merged into a canonical or Best Version of the Truth record, and then
managed as the master reference value for use across all enterprise systems.

The tables below show examples of the LU Country base object records and cross-reference
records for two country codes originating from two source systems. The Lookup Web
Services example provides services to access the base object code value and the cross-
reference code values depending on the input parameters and the service requested.

BASE OBJECT
Rowid
Object
Country
Code
Country
Code - ISO3
Country
Code - Num
Code
Description
1 CI CIV 384 Cte dIvoire
2 US USA 840 United States

CROSS-REFERENCE
Rowid
Xref
Pkey Src
Object
Source
System
Rowid
Object
Country
Code
Country
Code - ISO3
Country
Code - Num
Code
Description
1 CI Lookups 1 CI CIV 384 Cte dIvoire
2 44 SFA 1 44 Cte dIvoire
3 US Lookups 2 US USA 840 United States
4 230 SFA 2 230 United States

SIF SDK Usage and Enabling SOA 15
The Lookup Web Service example will work on any base object with the same basic
structure as the country code table; however it only accesses the code and description field.
The test cases provided with the example code use the LU Country base object as well as
the LU State base objects. Other LU base objects can be added by modifying the properties
file and creating the associated package in the Hub.

Here are the benefits provided by the Lookup service:
Retrieves and manages centralized MDM reference/lookup data from the Hub.
Maps lookup codes between systems for use in downstream system data
orchestration scenarios.
Provides values for a unified data management UI that spans systems, and uses the
centralized MDM lookup codes in drop-down lists or other UI aids.

LookupWebServiceExample includes the following services:

getCodeDescription - Retrieves the description for a given a code and code type.
translateCode - Translates a code value from one system to the code value of
another system.
isValidCodeValue - Determines if a given code value for a code type is valid.
getCodeSet - Retrieves the entire code set (code value and description) for a given
code type and system.
getCodeTranslationSet - Retrieves the entire code translation set (code value for
one system and its equivalent in another system).
xrefLookup - Given a Party key (Rowid Object or Source System & Pkey Src
Object), retrieves the primary keys for the given Party in other systems. Note that
this service is described in detail in the Cross-reference Lookup Service section.

Here is an example of a request and response XML for the translateCode service. The
request is to translate the COUNTRY code value of 230 in the SFA system to the value in
the Lookups system.

Here is the request XML for the translateCode service:

<urn:translateCodeService>
<urn:CodeType>COUNTRY</urn:CodeType>
<urn:CodeValue>230</urn:CodeValue>
<urn:FromSystem>SFA</urn:FromSystem>
<urn:ToSystem>Lookups</urn:ToSystem>
</urn:translateCodeService>

Here is the response XML from the service:

<TranslateCodeReturn xmlns="urn:ss_ns">
<CodeInfo isValue="true">
<CD>US</CD>
<Desc>United States</Desc>
</CodeInfo>
</TranslateCodeReturn>

You can try invoking the sample LookupWebServiceExample at the following location in your
sample ORS environment after replacing the hostname and port-number parameters to
match your environment: http://hostname:port/LookupWebServiceExample/wsdl

16 SIF SDK Usage and Enabling SOA
Note: There is an Excel file provided in the LookupWebServiceExample folders that has a
number of test cases that you can run in SoapUI. For more details, see Using and Testing
Web Services.
5.2 Cross-reference Lookup Service

The LookupWebServiceExample also provides a service that shows how cross-reference data
can be exposed through Web Services. The service is called xrefLookup. This service
allows users to find the unique key attributes for a specific entity for a given system.

For example, the sample ORS stores Party data originating in two source systems: SFA and
Legacy. Each system uses a unique key to identify the Party and another key to identify the
child base objects such as Address. These unique keys can be retrieved using a lookup on
the cross-reference tables of different base objects, in this case Party and its Address
children.

xrefLookup provides the following functionality:
1. Input is a Party key from the hub (Rowid Object) or source system (System and
Pkey Src Object).
2. Output is a list of the keys for all Party cross-reference records, including the input,
and the cross-reference keys for the Addresses of that Party.
3. The HUB_KEY is the Rowid Object from the Party base object.
4. The SFA system key is the Pkey Src Object of the Party cross-reference table where
the system is SFA.
5. The Legacy system key is a composite key that is built using the address city, state,
and zip details from the address package.

xrefLookup provides the following benefits:
It avoids the impact of Extended Keys in the Hub.
Theres no deconstruction of the concatenated keys for downstream synchronization.
Provides downstream applications with keys relevant to those systems.
Allows storage of granular data elements in the Hub.
The service can be utilized as an independent SOA component to enable data
integration across complex enterprise systems integrations.

Here is an example of a request and response XML for the xrefLookup service. The request
is to get the set of attributes to uniquely identify the Party record for Rowid Object 809 in
each source system.

Request XML for the xrefLookup service:
<urn:xrefLookupService>
<urn:HUB_KEY>809</urn:HUB_KEY>
<urn:PKEY_SRC></urn:PKEY_SRC>
<urn:SOURCE></urn:SOURCE>
</urn:xrefLookupService>

Response XML from the xrefLookup service (notice that the Address Pkey Src is a
concatenated key, but the relevant elements are also available as granular attributes so
that a downstream system is not required to deconstruct the key attributes from a
concatenated string value):

SIF SDK Usage and Enabling SOA 17
<XrefLookupServiceReturn xmlns="urn:ss_ns">
<HUB_KEY>809</HUB_KEY>
- <ns1:XrefKeyList xmlns:ns1="urn:siperian.api">
- <ns1:field>
<ns1:stringValue>SLS2031</ns1:stringValue>
<ns1:name>PARTY_PKEY_SRC</ns1:name>
</ns1:field>
- <ns1:field>
<ns1:stringValue>809</ns1:stringValue>
<ns1:name>ROWID_OBJECT</ns1:name>
</ns1:field>
- <ns1:field>
<ns1:stringValue>SLS2031 |Billing</ns1:stringValue>
<ns1:name>ADDRESS_PKEY_SRC</ns1:name>
</ns1:field>
- <ns1:field>
<ns1:stringValue>Legacy</ns1:stringValue>
<ns1:name>ROWID_SYSTEM</ns1:name>
</ns1:field>
- <ns1:field>
<ns1:stringValue>11390 HARTMAN CIR</ns1:stringValue>
<ns1:name>ADDRESS_LINE_1</ns1:name>
</ns1:field>
- <ns1:field>
<ns1:stringValue>SLS2031</ns1:stringValue>
<ns1:name>S_ROWID_PARTY</ns1:name>
</ns1:field>
- <ns1:field>
<ns1:stringValue>BILL</ns1:stringValue>
<ns1:name>S_ROWID_ADDR_TYPE</ns1:name>
</ns1:field>
<ns1:siperianObjectUid>PACKAGE.PKG_WS_LKP_LGC_PARTY_XREF</ns1:siperianObjectUid>
</ns1:XrefKeyList>
- <ns2:XrefKeyList xmlns:ns2="urn:siperian.api">
- <ns2:field>
<ns2:stringValue>CST2042</ns2:stringValue>
<ns2:name>PARTY_PKEY_SRC</ns2:name>
</ns2:field>
- <ns2:field>
<ns2:stringValue>809</ns2:stringValue>
<ns2:name>ROWID_OBJECT</ns2:name>
</ns2:field>
- <ns2:field>
<ns2:stringValue>CST2042|999</ns2:stringValue>
<ns2:name>ADDRESS_PKEY_SRC</ns2:name>
</ns2:field>
- <ns2:field>
<ns2:stringValue>11390 HARTMAN CIR</ns2:stringValue>
<ns2:name>ADDRESS_LINE_1</ns2:name>
</ns2:field>
- <ns2:field>
<ns2:stringValue>BELLEVUE</ns2:stringValue>
<ns2:name>CITY</ns2:name>
</ns2:field>
- <ns2:field>
<ns2:stringValue>NE</ns2:stringValue>
<ns2:name>STATE</ns2:name>
</ns2:field>
- <ns2:field>
<ns2:stringValue>BILL BRUCE</ns2:stringValue>
<ns2:name>PARTY_FULL_NAME</ns2:name>
</ns2:field>
<ns2:siperianObjectUid>PACKAGE.PKG_WS_LKP_SFA_PARTY_XREF</ns2:siperianObjectUid>
</ns2:XrefKeyList>
</XrefLookupServiceReturn>
18 SIF SDK Usage and Enabling SOA

You can try invoking the sample LookupWebServiceExample at the following location in your
sample ORS environment after replacing the hostname and port-number parameters to
match your environment - http://hostname:port/LookupWebServiceExample/wsdl

There is an excel file provided in the LookupWebServiceExample folders that has a number
of test cases that can be run in SoapUI. See the section below on testing Web Services for
more details.
6 Using and Testing Web Services

There are a number of tools available to test Web Services. Browsers can display the URL of
the Web Service, while tools such as Eclipse and SoapUI can send requests and receive
responses. There are test cases for each of the sample Web Services in the Excel files
distributed with the Resource Kit. You can use these text cases in SoapUI, or modify them
for use within Eclipse as needed.

6.1 Testing Web Services with a Web Browser
The quick and simple way to test that your Web Service is available is to enter the URL to
the WSDL page into a browser.

1. Open a web browser such as Internet Explorer or Mozilla Firefox.
2. Enter: http://localhost:8080/LookupWebServiceExample/wsdl.
3. You should see an XML structure with definitions for the requests and responses for
the LookupWebServiceExample.
4. For the PartyWebServiceExample enter:
http://localhost:8080/PartyWebServiceExample/services/SiperianWebServices?wsdl

6.2 Testing Web Services with SoapUI
SoapUI is the leading tool for Web Service Testing. You can download SoapUI from:
http://www.soapui.org.

1. Create a new WSDL project in SoapUI. For Initial WSDL enter the WSDL URL for the
LookupWebServiceExample or the PartyWebServiceExample. These are the same as
the URLs shown for a web browser above. Allow sample requests to be created.
2. Open one of the sample requests and replace the XML within the Envelop tags with
the XML in the test case excel file for that request.
3. Click the green run button to submit the request.
4. The Response window should have the same text as in the response column in the
spreadsheet.
5. Run each test case for each sample Web Service. You can add the WSDL for the
other example Web Service to the existing project or create a new project for the
other example.
SIF SDK Usage and Enabling SOA 19
7 Creating a Web Service
This section describes the steps for creating your own Web Service that leverages the
Informatica MDM SIF API. For reference, refer to the sample applications
(PartyWebServiceExample and LookupWebServiceExample) while going through the steps.

In the source code you will need to reference the following files:
source\resources\properties\mapping.xml Maps your Java classes to your WSDL
declarations.
source\resources\properties\server-config.wsdd Declares your Web Service to
axis.
source\resources\properties\siperianConnection.properties A properties files
used to initialize your application. Recommended for initializing SipClient.
source\resources\properties\lookupServices.wsdl Declares the input and output
objects used in your webs service.
build.xml - Used to compile your Java code.

1) Set up your Eclipse environment to include all necessary JAR files:
a) Make sure you have all the necessary JAR files for your project. Take a look at the lib
directory of one of the sample applications for an idea of what JAR files are needed.
The lib directory will be in the root directory of the sample application.
b) Its probably easiest to put all the JAR files needed in a lib directory relative to your
project. Edit your build.xml script accordingly. (See the build.xml file included with
the examples.)
c) Use the build.xml script in Eclipse (ant window) to quickly build your code. Make sure
to modify this build script to reference your code.

2) Create the following java objects. These objects do not need to have any functionality at
this point and are just place holders. Later you can add the business logic. Note that you
should repeat these steps (except for Step c.) for each service in the composite service.
a) Input class object. This is the container for the input to your Web Service.
b) Output class object. This is the container for the output of your service. Note that
this can contain the data of base objects.
c) An entry point class. This is the first java class that is executed when the Web
Service is first accessed. This class contains all your different service methods. (For
more information, see com.siperian.partyservice.WebServices.)
d) A service processor class. This class encapsulates all of the logic for your service. It
should only have one main access method (typically process).
e) A service method for each Web Service in your entry point class defined in Step c.
This service method uses the input class from Step a, and the output class from Step
b. This service method should call the main processor method from Step d. At this
point you may just want to have this method set a hard-coded string in your output
class.

20 SIF SDK Usage and Enabling SOA
3) Decide which Axis framework to use:
a) Axis framework alone which autogenerates the WSDL and mapping files.
Notes:
i) Faster and less work involved.
ii) Less flexibility in controlling XML input and output.
iii) All the settings are set in the WSDD.
iv) See PartyWebServiceExample.
Next: go to Step 7.

b) Axis framework with Castor, which requires manually creating the WSDL and
mapping files.
Notes:
i) Axis framework with Castor requires more work.
ii) More flexibility in controlling XML input and output. This method may be needed
when the XML out put needs to be in a specific format.
iii) See LookupWebServiceExample.
4) Copy the Castor package from the LookupWebServiceExample.

5) Define the WSDL file:
a) Suffix must be .wsdl.
b) Make sure to define in WSDD (see Step 7).
c) Define the Input class as complex type (note that you can name the fields anything
you want)
d) Define an element (right after Input complexType) for the input and set the name to
the name of your service (for example, lookupService). Note: This is not the name
of the Input class
e) Define the Output class as a complex type (note that you can name fields anything
you want)
f) Define an element (right after Output complexType) for the output and set all values
to output type.
g) Define Message for Input.
h) Define Message for Output.
i) Add an operation for your service with Input and Output into the portType section.
j) Add an operation for your service with Input and Output into the binding section.

6) Define mapping.xml file
a) Make sure to define this fine in the WSDD (step 7).
b) Set up the mapping of the Input class from WSDL to your java class (that is,
XrefLookupRequest). Make sure to map to your service (that is,
xrefLookupService)
c) Set up mapping of Output class from WSDL to your java class (that is,
XrefLookupResponse). Make sure to map to your service (that is,
xrefLookupService)

7) Create the server-config.wsdd file. The contents will vary depending on which Axis
framework you chose in Step 3. See the corresponding server-config.wsdd in the
corresponding sample application. This file should include the following:
a) The service name section. This should point to your entry point class (see Step 2c).
b) Add your input and output class objects to this service name section.
c) Ensure that the WSDL and mapping.xml file are defined here.
SIF SDK Usage and Enabling SOA 21
8) Copy and modify the build.xml file in the sample code to build your project. You can
build your project in Eclipse by dragging the build.xml file into the ant window.

9) Deploy your Web Service and test it using Web Services Explorer in Eclipse. At this point
the Web Service will not have any logic. Hard-code the output to a string as you only
need to see if it can be accessed. In Eclipse use the following steps to access your Web
Service:
a. Run
b. Launch the Web Services explorer
c. WSDL page (top-right icon)
d. WSDL Main
e. Enter the URL for your webservice, depending on your configuration it should
something like http://localhost:8080/LookupWebServiceExample/wsdl
As long as you can see the string you hard-coded in your output, you are fine at this
point.

10) Create the SiperianConnection.properties file.
a) Store the settings for connecting your application to the Informatica MDM Hub.
b) This file is used to initialize the SipClient (Step 11).
c) You can also create a second properties file for settings particular to your application
(see LookupWebServiceExample.properties).
d) There can be local versions of the property files which can be modified at runtime.
This is convenient as the application need not be redeployed if the user wishes to
modify behavior that is based on those property files.

11) Initialize the SipClient (see com.siperian.partyservice.processor.WebServiceProcessor).
This Siperian-defined java object is needed to make SIF API calls. It is recommended
that a properties file (Step 10) is used to initialize the SipClient.

12) This SipClient object should be made available to classes that will be making SIF API
calls.

13) Add logic to your java classes. You will be using the SipClient class created in Step 11 to
make SIF API calls. To get more information on what API classes are available, and how
to use them use the following resources:
a. Take a look at the SIF WSDL using Eclipses WSDL editor or SoapUI. The steps
are the same as in Step 6, except that the URL is
http://localhost:8080/cmx/request/wsdl (note that this may be different
depending on how your configured your Informatica MDM Hub). You will want to
experiment with the input and observe what output you will be getting.
b. Take a look at the Informatica MDM SIF javadoc. This documentation provides
more detailed information on the input and output from SIF.
Under your Informatica MDM Resource Kit installation folder there is a folder
called sifsdk, this folder contains the SIF SDK as well as the associated SIF
javadoc.
c. The code examples from the samples section of the Informatica MDM Resource
Kit.

You might also like