Mapping File for the Federation TQL Query Is not Well Formed

Error Message

There are cases where the mapping file for a federation TQL query is not well formed. For example, target_mapping_name “priority” in the following example federation mapping file specifies a wrong Groovy function name (SMFederationFunctions.getEnumValue1):

<?xml version="1.0" encoding="UTF-8"?>
<integration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../mappings_schema.xsd">
    <info>
        <source name="SM"         version="9.40"    vendor="HP"/>
        <target name="UCMDB"    version="10.20"    vendor="HP"/>
    </info>
    <import>
        <scriptFile path="mappings.scripts.SMFederationFunctions"/>
    </import>
    <target_entities>
        <source_instance query-name="SM Incident 2.0" root-element-name="ucmdbIncident">
            <target_entity name="incident">
                <target_mapping name="reference_number"     datatype="STRING"     value="ucmdbIncident['IncidentID']"/>
                <target_mapping name="name"                 datatype="STRING"     value="ucmdbIncident['BriefDescription']"/>
                <target_mapping name="priority"             datatype="STRING"     value="SMFederationFunctions.getEnumValue1(ucmdbIncident['PriorityCode'],'Priority')"/>                
                <target_mapping name="incident_status"         datatype="STRING"     value="SMFederationFunctions.firstLetterToLowerAndReplaceSpaceWithUnderscore(ucmdbIncident['IMTicketStatus'])"/>
                <target_mapping name="category"             datatype="STRING"     value="SMFederationFunctions.replaceSpaceWithUnderscore(ucmdbIncident['Category'])"/>
                <target_mapping name="closed_time"             datatype="DATE"     value="SMFederationFunctions.convertDate(ucmdbIncident['ClosedTime'])"/>
                <target_mapping name="create_time"             datatype="DATE"     value="SMFederationFunctions.convertDate(ucmdbIncident['OpenTime'])"/>
                <target_mapping name="last_modified_time"     datatype="DATE"     value="SMFederationFunctions.convertDate(ucmdbIncident['UpdatedTime'])"/>
                <target_mapping name="impact_scope"         datatype="STRING"     value="SMFederationFunctions.getEnumValue(ucmdbIncident['ImpactScope'],'ImpactScope')"/>
                <target_mapping name="urgency"                 datatype="STRING"     value="SMFederationFunctions.getEnumValue(ucmdbIncident['Urgency'],'Urgency')"/>
            </target_entity>
        </source_instance>
    </target_entities>
</integration>

When you try to federate incidents, no records are retrieved from Service Manager. If you check the fcmdb.push.all.log file, you can find a detailed error message that resembles the following for the federation query:

2014-11-20 14:09:58,670 [AdHoc:AD_HOC_TASK_PATTERN_ID-66-1416463796366] ERROR -  >> Failed executing value [SMFederationFunctions.getEnumValue1(ucmdbIncident['PriorityCode'],'Priority')] of mapping <target_mapping name="priority">  <target_ci_type name="incident"> , Root cmdbId [null]
groovy.lang.MissingMethodException: No signature of method: static mappings.scripts.SMFederationFunctions.getEnumValue1() is applicable for argument types: (java.lang.String, java.lang.String) values: [1, Priority]
Possible solutions: getEnumValue(java.lang.String, java.lang.String)
	at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1359)
	at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1345)
	at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:50)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
	at Mapping_4a8761e7adc009e8a7d268c2f1349ab4.run(Mapping_4a8761e7adc009e8a7d268c2f1349ab4.groovy:1)
	at com.hp.ucmdb.adapters.instance.mapping.AbstractResultTreeNodeMapper.calculateProperties(AbstractResultTreeNodeMapper.java:231)
	at com.hp.ucmdb.adapters.instance.mapping.AbstractResultTreeNodeMapper.processTargetEntity(AbstractResultTreeNodeMapper.java:301)
	at com.hp.ucmdb.adapters.instance.mapping.RtnToRtnMapper.processTargetEntities(RtnToRtnMapper.java:214)
	at com.hp.ucmdb.adapters.instance.mapping.RtnToRtnMapper.processSourceInstanceWrapper(RtnToRtnMapper.java:101)
	at com.hp.ucmdb.adapters.instance.mapping.RtnToRtnMapper.buildResultTreeNode(RtnToRtnMapper.java:76)
	at com.hp.ucmdb.adapters.GenericAdapter$PopulationFederationChunkProcessor.invoke(GenericAdapter.java:1213)
	at com.hp.ucmdb.adapters.GenericAdapter.getDataResult(GenericAdapter.java:743)
	at com.hp.ucmdb.discovery.probe.processor.FederationTopologyGetDataResultProbeRequestProcessor.processRequest(FederationTopologyGetDataResultProbeRequestProcessor.java:40)
	at com.hp.ucmdb.discovery.probe.processor.FederationTopologyGetDataResultProbeRequestProcessor.processRequest(FederationTopologyGetDataResultProbeRequestProcessor.java:26)
	at com.hp.ucmdb.discovery.probe.processor.AbstractProbeProcessor.process(AbstractProbeProcessor.java:56)
	at com.hp.ucmdb.discovery.probe.processor.AbstractProbeProcessor.process(AbstractProbeProcessor.java:19)
	at com.hp.ucmdb.discovery.probe.agents.probemgr.adhoctasks.AdHocProbeRequestOperation.performAction(AdHocProbeRequestOperation.java:63)
	at com.hp.ucmdb.discovery.probe.agents.probemgr.taskdispatcher.AdHocTaskDispatcher.dispatchTask(AdHocTaskDispatcher.java:70)
	at sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:111)
	at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:45)
	at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:235)
	at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
	at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
	at javax.management.StandardMBean.invoke(StandardMBean.java:405)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:792)
	at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:305)
	at org.springframework.jmx.access.MBeanClientInterceptor.doInvoke(MBeanClientInterceptor.java:405)
	at org.springframework.jmx.access.MBeanClientInterceptor.invoke(MBeanClientInterceptor.java:353)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	at com.sun.proxy.$Proxy51.dispatchTask(Unknown Source)
	at com.hp.ucmdb.discovery.probe.agents.probegw.managementtasks.adhoctasks.AdhocThread.run(AdhocThread.java:54)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
	at java.lang.Thread.run(Thread.java:722)

Solution

Search for word "Exception" in the fcmdb.push.all.log file to find the wrong method name, and then correct it in the corresponding federation mapping file.