Objective C, A Question about xpath - objective-c

<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>topic_id</name>
<value>
<string>102</string>
</value>
</member>
<member>
<name>topic_title</name>
<value>
<string>Login test</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
I have this xml.. How to get the value of topic_title using xpath?

/methodResponse
/params
/param
/value
/struct
/member[name='topic_title']
/value
/string

Related

Restcomm gmlc configuration issue no local SSN is present for primary Address

I'm facing an issue while trying to configure restcomm gmlc on windows server 2008 R2. I Get the this message
The picture bellow are the settings for HLR and the Windows server
And bellow are the settings
GmlcManagement_gmlcproperties.xml
<?xml version="1.0" encoding="UTF-8" ?>
<gmlcgt value="237694000089"/>
<gmlcssn value="145"/>
<hlrssn value="6"/>
<mscssn value="6"/>
<maxmapv value="3"/>
Mtp3UserPart_m3ua1.xml
<?xml version="1.0" encoding="UTF-8" ?>
<heartbeattime value="10000"/>
<aspFactoryList>
<aspFactory name="timbr_asp1" assocName="timbr_ass1" started="false" maxseqnumber="256" aspid="2" heartbeat="false"/>
</aspFactoryList>
<asList>
<as name="timbr_as1" minAspActiveForLb="1" functionality="IPSP" exchangeType="SE" ipspType="CLIENT">
<routingContext size="1">
<rc value="102"/>
</routingContext>
<networkAppearance value="8"/>
<trafficMode mode="2"/>
<defTrafficMode mode="2"/>
<asps>
<asp name="timbr_asp1"/>
</asps>
</as>
</asList>
<route>
<key value="89:42:3"/>
<routeAs trafficModeType="2" as="timbr_as1"/>
</route>
SccpStack_sccpresource2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<remoteSsns>
<id value="1"/>
<value remoteSpc="42" remoteSsn="6" remoteSsnFlag="0" markProhibitedWhenSpcResuming="false"/>
</remoteSsns>
<remoteSpcs>
<id value="1"/>
<value remoteSpc="42" remoteSpcFlag="0" mask="0"/>
</remoteSpcs>
<concernedSpcs/>
SccpStack_sccprouter2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<rule>
<id value="1"/>
<value ruleType="Solitary" loadSharingAlgo="Undefined" originatingType="RemoteOriginated" mask="K" paddress="1" saddress="-1" networkId="0">
<patternSccpAddress pc="42" ssn="6">
<ai value="18"/>
<gt type="GT0100" tt="0" es="2" np="1" nai="4" digits="237694000089"/>
</patternSccpAddress>
</value>
<id value="2"/>
<value ruleType="Solitary" loadSharingAlgo="Undefined" originatingType="LocalOriginated" mask="K" paddress="2" saddress="-1" networkId="0">
<patternSccpAddress pc="89" ssn="145">
<ai value="16"/>
<gt type="GT0100" tt="0" es="1" np="1" nai="4" digits="*"/>
</patternSccpAddress>
</value>
</rule>
<routingAddress>
<id value="1"/>
<sccpAddress pc="89" ssn="145">
<ai value="19"/>
<gt type="GT0100" tt="0" es="2" np="1" nai="4" digits="237694000089"/>
</sccpAddress>
<id value="2"/>
<sccpAddress pc="42" ssn="6">
<ai value="17"/>
<gt type="GT0100" tt="0" es="1" np="1" nai="4" digits="*"/>
</sccpAddress>
</routingAddress>
<longMessageRule/>
<sap>
<id value="1"/>
<value mtp3Id="1" opc="42" ni="2" networkId="1">
<mtp3DestinationMap>
<id value="1"/>
<value firstDpc="1" lastDpc="16384" firstSls="0" lastSls="255" slsMask="255"/>
</mtp3DestinationMap>
</value>
</sap>
SCTPManagement_sctp.xml
<?xml version="1.0" encoding="UTF-8" ?>
<connectdelay value="5000"/>
<servers/>
<associations>
<name value="timbr_ass1"/>
<association name="timbr_ass1" assoctype="CLIENT" hostAddress="172.22.118.131" hostPort="2609" peerAddress="192.168.212.185" peerPort="2609" serverName="" ipChannelType="0" extraHostAddresseSize="0"/>
</associations>
TcapStack_management.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dialogidletimeout value="60000"/>
<invoketimeout value="30000"/>
<maxdialogs value="5000"/>
<dialogidrangestart value="1"/>
<dialogidrangeend value="2147483647"/>
<donotsendprotocolversion value="false"/>
<statisticsenabled value="false"/>
I see quite a few issues in the raised question, albeit I think your problem is in jboss-beans.xml file (will get there later), it's important to clarify them as they could potentially be cause of problems.
1) SSN should be 145 as for specifications, and you got it right in Restcomm GMLC's configuration files, but in the image it appears as 147 (which is not appropriate, as that is the SSN for gsmSCF, not for GMLC). Are you sure the MNO has 145 and it's only a typo in the image?
2) MSC SSN is 8, not 6 as you put it in mscssn value at GmlcManagement_gmlcproperties.xml. Modify that to 8 please.
3) Are you sure about the routingContext and networkAppearance values or did you just copied them from the simulator profile?
Having that in mind, your main problem most likely reside at the following two configuration files:
1) Check $GMLC_HOME/jboss-5.1.0.GA/server/default/deploy/restcomm-gmlc-server/META-INF/jboss-beans.xml TCAP Service section... it should look like this:
<!-- ==================================================================== -->
<!-- TCAP Service -->
<!-- ==================================================================== -->
<bean name="GMLC_TcapStack" class="org.mobicents.protocols.ss7.tcap.TCAPStackImpl">
<constructor>
<parameter>TcapStack</parameter>
<parameter>
<inject bean="GMLC_SccpStack" property="sccpProvider" />
</parameter>
<parameter>145</parameter>
</constructor>
<property name="persistDir">${jboss.server.data.dir}</property>
<!--
<property name="dialogIdleTimeout">60000</property>
<property name="invokeTimeout">30000</property>
<property name="maxDialogs">25000</property >
-->
</bean>
First, are you sure 145 is there? Then and again, as pointed out in 1), are you sure the MNO and your configuration are concordant?
2) Your routing rule configuration at SccpStack_sccprouter2.xml might lead you to problems, set pc and ssn values to 0 in patternSccpAddress, like this:
<rule>
<id value="1"/>
<value ruleType="Solitary" loadSharingAlgo="Undefined" originatingType="RemoteOriginated" mask="K" paddress="1" saddress="-1" networkId="0">
<patternSccpAddress pc="0" ssn="0">
<ai value="18"/>
<gt type="GT0100" tt="0" es="2" np="1" nai="4" digits="237694000089"/>
</patternSccpAddress>
</value>
<id value="2"/>
<value ruleType="Solitary" loadSharingAlgo="Undefined" originatingType="LocalOriginated" mask="K" paddress="2" saddress="-1" networkId="0">
<patternSccpAddress pc="0" ssn="0">
<ai value="16"/>
<gt type="GT0100" tt="0" es="1" np="1" nai="4" digits="*"/>
</patternSccpAddress>
</value>
</rule>
Please keep us posted, good luck and best regards,
Fernando Mendioroz

TestNG - Run each instance from TestNG factory as separate test

I am using TestNG for test automation along with ReportNG for reporting. I use a TestNG factory class to provide different inputs for my tests. The problem which I face here is that all test instances supplied by the factory run under the same test, and the report generated displays all the scenarios under a single test.
I want to run each test instance supplied by the factory as a separate test. Is there any way to do this? PFB my xml configuration
<suite name="Default suite" parallel="classes">
<listeners>
<listener class-name="org.uncommons.reportng.HTMLReporter" />
</listeners>
<test verbose="2" name="Default test" group-by-instances="true">
<classes>
<class name="com.test.factory.RAExcelFactory"/>
</classes>
</test> <!-- Default test -->
</suite> <!-- Default suite -->
No this is not possible currently in TestNG.
Alternately you can consider doing the following instead of using a factory.
Upgrade to latest TestNG version
Build an implementation of org.testng.IAlterSuiteListener and within it include logic to construct multiple <test> tags by using whatever logic you have within your Factory (am guessing it leverages a data driven mechanism)
Something like below
Test Class
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class StudentTest {
private int age;
#BeforeClass
#Parameters("age")
public void setup(int age) {
this.age = age;
}
#Test
public void firstTest() {
Assert.assertTrue(age >=0);
}
#Test(dependsOnMethods = "firstTest")
public void secondTest() {
Assert.assertTrue(age <= 125);
}
}
An IAlterSuiteListener implementation
import org.testng.IAlterSuiteListener;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import java.util.ArrayList;
import java.util.List;
public class SuiteAlteringListener implements IAlterSuiteListener {
#Override
public void alter(List<XmlSuite> suites) {
for (XmlSuite suite : suites) {
List<XmlTest> tests = new ArrayList<>();
Integer[] datum = getData();
for (Integer data : datum) {
XmlTest test = new XmlTest(suite);
test.setName("test_" + data);
test.addParameter("age", Integer.toString(data));
test.getClasses().add(new XmlClass(StudentTest.class));
}
}
}
private Integer[] getData() {
//Change this to your data provider implementation
return new Integer[]{
1, 2, 3
};
}
}
The suite xml file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="my_suite" parallel="false" verbose="3">
<listeners>
<listener class-name="com.rationaleemotions.stackoverflow.SuiteAlteringListener"/>
</listeners>
</suite>
and here's how the testng-results.xml looks like (The other reports would have similar details as well). I am just choosing to attach the easiest representation.
<?xml version="1.0" encoding="UTF-8"?>
<testng-results skipped="0" failed="0" ignored="0" total="6" passed="6">
<reporter-output>
</reporter-output>
<suite name="my_suite" duration-ms="10077" started-at="2017-05-27T07:49:36Z" finished-at="2017-05-27T07:49:46Z">
<groups>
</groups>
<test name="test_1" duration-ms="24" started-at="2017-05-27T07:49:36Z" finished-at="2017-05-27T07:49:36Z">
<class name="com.rationaleemotions.stackoverflow.StudentTest">
<test-method status="PASS" signature="setup(int)[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#61dc03ce]" name="setup" is-config="true" duration-ms="8" started-at="2017-05-27T13:19:36Z" finished-at="2017-05-27T13:19:36Z">
<params>
<param index="0">
<value>
<![CDATA[1]]>
</value>
</param>
</params>
<reporter-output>
</reporter-output>
</test-method> <!-- setup -->
<test-method status="PASS" signature="firstTest()[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#61dc03ce]" name="firstTest" duration-ms="2" started-at="2017-05-27T13:19:36Z" finished-at="2017-05-27T13:19:36Z">
<reporter-output>
</reporter-output>
</test-method> <!-- firstTest -->
<test-method status="PASS" signature="secondTest()[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#61dc03ce]" name="secondTest" duration-ms="1" started-at="2017-05-27T13:19:36Z" depends-on-methods="com.rationaleemotions.stackoverflow.StudentTest.firstTest" finished-at="2017-05-27T13:19:36Z">
<reporter-output>
</reporter-output>
</test-method> <!-- secondTest -->
</class> <!-- com.rationaleemotions.stackoverflow.StudentTest -->
</test> <!-- test_1 -->
<test name="test_2" duration-ms="2" started-at="2017-05-27T07:49:41Z" finished-at="2017-05-27T07:49:41Z">
<class name="com.rationaleemotions.stackoverflow.StudentTest">
<test-method status="PASS" signature="setup(int)[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#458ad742]" name="setup" is-config="true" duration-ms="0" started-at="2017-05-27T13:19:41Z" finished-at="2017-05-27T13:19:41Z">
<params>
<param index="0">
<value>
<![CDATA[2]]>
</value>
</param>
</params>
<reporter-output>
</reporter-output>
</test-method> <!-- setup -->
<test-method status="PASS" signature="firstTest()[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#458ad742]" name="firstTest" duration-ms="0" started-at="2017-05-27T13:19:41Z" finished-at="2017-05-27T13:19:41Z">
<reporter-output>
</reporter-output>
</test-method> <!-- firstTest -->
<test-method status="PASS" signature="secondTest()[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#458ad742]" name="secondTest" duration-ms="0" started-at="2017-05-27T13:19:41Z" depends-on-methods="com.rationaleemotions.stackoverflow.StudentTest.firstTest" finished-at="2017-05-27T13:19:41Z">
<reporter-output>
</reporter-output>
</test-method> <!-- secondTest -->
</class> <!-- com.rationaleemotions.stackoverflow.StudentTest -->
</test> <!-- test_2 -->
<test name="test_3" duration-ms="2" started-at="2017-05-27T07:49:46Z" finished-at="2017-05-27T07:49:46Z">
<class name="com.rationaleemotions.stackoverflow.StudentTest">
<test-method status="PASS" signature="setup(int)[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#66d2e7d9]" name="setup" is-config="true" duration-ms="0" started-at="2017-05-27T13:19:46Z" finished-at="2017-05-27T13:19:46Z">
<params>
<param index="0">
<value>
<![CDATA[3]]>
</value>
</param>
</params>
<reporter-output>
</reporter-output>
</test-method> <!-- setup -->
<test-method status="PASS" signature="firstTest()[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#66d2e7d9]" name="firstTest" duration-ms="0" started-at="2017-05-27T13:19:46Z" finished-at="2017-05-27T13:19:46Z">
<reporter-output>
</reporter-output>
</test-method> <!-- firstTest -->
<test-method status="PASS" signature="secondTest()[pri:0, instance:com.rationaleemotions.stackoverflow.StudentTest#66d2e7d9]" name="secondTest" duration-ms="0" started-at="2017-05-27T13:19:46Z" depends-on-methods="com.rationaleemotions.stackoverflow.StudentTest.firstTest" finished-at="2017-05-27T13:19:46Z">
<reporter-output>
</reporter-output>
</test-method> <!-- secondTest -->
</class> <!-- com.rationaleemotions.stackoverflow.StudentTest -->
</test> <!-- test_3 -->
</suite> <!-- my_suite -->
</testng-results>
Would this work for you ?

WSO2 ESB Smooks - XML to CSV Conversion

I have a simple proxy service which is required to convert an XML payload into a CSV message. For this purpose I'm using smooks mediator. Following is my proxy service.
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="TestProxy" startOnLoad="true" trace="disable"
transports="http https" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<log level="custom">
<property name="STATUS" value="TESTING PROXY SERVICE"/>
</log>
<payloadFactory media-type="xml">
<format>
<csv-set>
<csv-record number="2">
<Name>Jhone</Name>
<City>Colombo</City>
<Age>32</Age>
</csv-record>
<csv-record number="3">
<Name>Doe</Name>
<City>Jaffna</City>
<Age>32</Age>
</csv-record>
</csv-set>
</format>
<args/>
</payloadFactory>
<log level="full"/>
<smooks config-key="gov:Test/smooks/TestSmooksConfig.xml">
<input type="xml"/>
<output type="text"/>
</smooks>
<log level="custom">
<property name="STATUS" value="PROCESSED MSG******"/>
</log>
<log level="full"/>
</inSequence>
<outSequence/>
<faultSequence/>
</target>
</proxy>
Following is my Smooks configuration.
<?xml version="1.0" encoding="UTF-8"?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.2.xsd" xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<params>
<param name="inputType">input.xml</param>
<param name="stream.filter.type">SAX</param>
<param name="input.xml" type="input.type.actived">File:/F:\Practicals\WSO2\vfs_file_listening\input-csv\b.xml</param>
</params>
<ftl:freemarker applyOnElement="#document">
<ftl:template><![CDATA["Name","City","Age"
<#list .vars["csv-set"]["csv-record"] as csv_record>
"${.vars["csv_record"]["Name"]}","${.vars["csv_record"]["City"]}","${.vars["csv_record"]["Age"]}"
</#list>]]></ftl:template>
<param name="includeFieldNames">true</param>
<param name="seperator">,</param>
<param name="quote">"</param>
<param name="csvFields">Name,City,Age</param>
<param name="messageType">CSV</param>
<param name="templateDataProvider">input</param>
</ftl:freemarker>
<resource-config selector="#document">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
</smooks-resource-list>
The output message only prints the following.
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ax:text xmlns:ax="http://ws.apache.org/commons/ns/payload">"Name","City","Age"</ax:text>
</soapenv:Body>
</soapenv:Envelope>
Not with the data in the input XML tags, Can anyone point out what I'm doing wrong?
Thanks in advance.
I was able to achieve this by the following Smooks configuration. (with the help of wso2 dev support, thanks Evanthika).
<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<params>
<param name="stream.filter.type">SAX</param>
<param name="inputType">input.xml</param>
<param name="input.xml" type="input.type.actived">File:/C:\Work\2016\09_ESB_Auto_Mail_rpts\TestFiles\TestFileXMLCSVMap.xml
</param>
<param name="default.serialization.on">true</param>
</params>
<resource-config selector="csv-set,csv-record">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
<ftl:freemarker applyOnElement="csv-record">
<ftl:template>
<!-- <#ftl ns_prefixes={"D":"http://ws.apache.org/ns/synapse"}> ${.vars["csv-record"].Name},${.vars["csv-record"].City},${.vars["csv-record"].Age} -->
</ftl:template>
<param name="quote">"</param>
<param name="includeFieldNames">true</param>
<param name="csvFields">Name,City,Age</param>
<param name="seperator">,</param>
<param name="messageType">CSV</param>
<param name="templateDataProvider">input</param>
</ftl:freemarker>
</smooks-resource-list>
Changes that have been done are,
<ftl:template> with xml namespace. (In my case it comes from a dataservice, hence the http://ws.apache.org/ns/synapse namespace in the <#ftl ns_prefixes> tag).
<resource-config selector="csv-set,csv-record"> and
<ftl:freemarker applyOnElement="csv-record"> to point out the
elements for smooks to work on.
Hope this helps as reference to anyone.

How do you run Multiple XMLA Alter Commands at the same time?

I have the following two XMLA alter commands that individually work fine. I would like to run them at the same time in SQL Management studio. I have tried wrapping them in command, batch, and a number of other elements. I can't seem to get anything to work correctly.
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>DB1</DatabaseID>
<RoleID>Role</RoleID>
</Object>
<ObjectDefinition>
<Role xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400">
<ID>Role</ID>
<Name>ReadersRole</Name>
<Members>
<Member>
<Name>Domain\ReaderUserName</Name>
</Member>
</Members>
</Role>
</ObjectDefinition>
</Alter>
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>DB2</DatabaseID>
<RoleID>Role</RoleID>
</Object>
<ObjectDefinition>
<Role xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400">
<ID>Role</ID>
<Name>ReadersRole</Name>
<Members>
<Member>
<Name>Domain\ReaderUserName</Name>
</Member>
</Members>
</Role>
</ObjectDefinition>
</Alter>
Can you try just putting a
<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine"></Batch>
tag around them?

Is it possible to invoke a antscript in postdst and presrc call in MQFTE?

Is it possible to invoke a antscript in postdst and presrc call in MQFTE??
Here's an example:
<request version="4.00" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FileTransfer.xsd">
<managedTransfer>
<originator>
<hostName>$hostName</hostName>
<userID>$userID</userID>
</originator>
<sourceAgent QMgr="$sourceQM" agent="$sourceAgent"/>
<destinationAgent QMgr="$destQM" agent="$destAgent"/>
<transferSet priority="5">
<metaDataSet>
<metaData key="some_key">Some value</metaData>
</metaDataSet>
<postSourceCall>
<command name="example.xml" retryCount="0" retryWait="0" successRC="0" type="antscript">
<property name="ant.FILEPATH" value="$filepath"/>
<property name="antSrcAgent" value="$sourceAgent"/>
</command>
</postSourceCall>
<item checksumMethod="MD5" mode="binary">
<source disposition="delete" recursive="false">
<file>$filepath</file>
</source>
<destination exist="error" type="directory">
<file>$destFile</file>
</destination>
</item>
</transferSet>
<job>
<name>Example FTE job</name>
</job>
</managedTransfer>
</request>
The properties passed to the ant script are arbitrary names. You could pass any properties in that way. I used postSourceCall but you can change that to postDest, preSource, etc.