VS Tools for Cordova overrides Android Icons - visual-studio-cordova

Every time I change a setting in the config.xml wizard, my Android Icons in the config.xml file get erased.
This is the entry in the config.xml file that sets the icons for android:
<platform name="android">
<splash density="land-hdpi" src="res/screens/android/screen-hdpi-landscape.png" />
<splash density="land-ldpi" src="res/screens/android/screen-ldpi-landscape.png" />
<splash density="land-mdpi" src="res/screens/android/screen-mdpi-landscape.png" />
<splash density="land-xhdpi" src="res/screens/android/screen-xhdpi-landscape.png" />
<splash density="port-hdpi" src="res/screens/android/screen-hdpi-portrait.png" />
<splash density="port-ldpi" src="res/screens/android/screen-ldpi-portrait.png" />
<splash density="port-mdpi" src="res/screens/android/screen-mdpi-portrait.png" />
<splash density="port-xhdpi" src="res/screens/android/screen-xhdpi-portrait.png" />
</platform>
<platform name="android">
<icon density="ldpi" src="res/icons/android/mipmap-ldpi/ic_launcher.png" />
<icon density="mdpi" src="res/icons/android/mipmap-mdpi/ic_launcher.png" />
<icon density="hdpi" src="res/icons/android/mipmap-hdpi/ic_launcher.png" />
<icon density="xhdpi" src="res/icons/android/mipmap-xhdpi/ic_launcher.png" />
<icon density="xxhdpi" src="res/icons/android/mipmap-xxhdpi/ic_launcher.png" />
<icon density="xxxhdpi" src="res/icons/android/mipmap-xxxhdpi/ic_launcher.png" />
</platform>
After I change something in the wizard (like the version code), the icons are gone. My iOS Icons are still there, though.

Related

Ionic Firebase Google Login Error 10 in Capacitor Project

I know that this famous problem was covered by several forums and topics, and believe me I tried their solutions, but the famous error 10 from the Google Login is still there.
I will explain it the clearest way I can.
This is an Ionic project integrated with Capacitor using the "cordova-plugin-googleplus" plugin. I installed both cordova and ionic/native packages
I went to Google Cloud Platform and set the Web Client ID and Secret Key for Firebase Authentication
I have generate a keystore (the androiddebugkey example)
Then, I built the apk key from Android Studio (I also tried to generate it from the terminal) with V1 and V2 signatures, for debug and release apks and after that I signed them by terminal
After, I registered the SHA1 key in Firebase Project
I took the code example of the plugin documentation for the project and then tried to login in my device.
Ok, I get the google login screen but after that the error 10 comes along.
Solutions with no results:
I created a debug-signing.properties with the keystore and key info. I wrote the path to the debug-signing.properties in the gradle.properties. The three in the android folder.
keyAlias=androiddebugkey
keyPassword=android
storeFile=<PATH-TO-KEYSTORE>
storePassword=android
I added the cordova plugin variables in config.xml
<variable name="WEB_APPLICATION_CLIENT_ID" value="XXXXX.apps.googleusercontent.com" />
<variable name="REVERSED_CLIENT_ID" value="XXXX.apps.googleusercontent.com" />
</plugin>
I tried the google.login() function with different parameters
if (this.platform.is('capacitor'))
{
const googleAuth = await this.google.login({});
console.log(googleAuth);
const googleCredential = googleAuth.accessToken ?
firebase.auth.GoogleAuthProvider.credential
(
googleAuth.idToken,
googleAuth.accessToken
) :
firebase.auth.GoogleAuthProvider.credential(googleAuth.idToken);
console.log(googleCredential);
credential = await this.afAuth.signInWithCredential(googleCredential);
}
if (this.platform.is('capacitor'))
{
const googleAuth = await this.google.login({ 'webClientId': environment.webGoogleId,
'offline': true, 'scope': 'profile email' });
console.log(googleAuth);
const googleCredential = googleAuth.accessToken ?
firebase.auth.GoogleAuthProvider.credential
(
googleAuth.idToken,
googleAuth.accessToken
) :
firebase.auth.GoogleAuthProvider.credential(googleAuth.idToken);
console.log(googleCredential);
credential = await this.afAuth.signInWithCredential(googleCredential);
}
I checked the issue with android-client-id and web-client-id from google cloud OAuth to use web-client-id in the app, not android, with no results.
So finally I got no solutions
gradle.properties :
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
cdvDebugSigningPropertiesFile=debug-signing.properties
cdvReleaseSigningPropertiesFile=release-signing.properties
config.xml:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.company.comanda" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Comandera</name>
<description>Aplicacion para restaurantes</description>
<author email="hi#ionicframework.com" href="http://ionicframework.com/">Los movimentarios</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<preference name="ScrollEnabled" value="false" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashShowOnlyFirstTime" value="true" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="1000" />
<preference name="ShowSplashScreen" value="false" />
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="#xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
<allow-intent href="market:*" />
<splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
<icon background="resources/android/icon/ldpi-background.png" density="ldpi" foreground="resources/android/icon/ldpi-foreground.png" />
<icon background="resources/android/icon/mdpi-background.png" density="mdpi" foreground="resources/android/icon/mdpi-foreground.png" />
<icon background="resources/android/icon/hdpi-background.png" density="hdpi" foreground="resources/android/icon/hdpi-foreground.png" />
<icon background="resources/android/icon/xhdpi-background.png" density="xhdpi" foreground="resources/android/icon/xhdpi-foreground.png" />
<icon background="resources/android/icon/xxhdpi-background.png" density="xxhdpi" foreground="resources/android/icon/xxhdpi-foreground.png" />
<icon background="resources/android/icon/xxxhdpi-background.png" density="xxxhdpi" foreground="resources/android/icon/xxxhdpi-foreground.png" />
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
<icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<icon height="57" src="resources/ios/icon/icon.png" width="57" />
<icon height="114" src="resources/ios/icon/icon#2x.png" width="114" />
<icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
<icon height="58" src="resources/ios/icon/icon-small#2x.png" width="58" />
<icon height="87" src="resources/ios/icon/icon-small#3x.png" width="87" />
<icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
<icon height="40" src="resources/ios/icon/icon-20#2x.png" width="40" />
<icon height="60" src="resources/ios/icon/icon-20#3x.png" width="60" />
<icon height="48" src="resources/ios/icon/icon-24#2x.png" width="48" />
<icon height="55" src="resources/ios/icon/icon-27.5#2x.png" width="55" />
<icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
<icon height="58" src="resources/ios/icon/icon-29#2x.png" width="58" />
<icon height="87" src="resources/ios/icon/icon-29#3x.png" width="87" />
<icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
<icon height="80" src="resources/ios/icon/icon-40#2x.png" width="80" />
<icon height="120" src="resources/ios/icon/icon-40#3x.png" width="120" />
<icon height="88" src="resources/ios/icon/icon-44#2x.png" width="88" />
<icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
<icon height="100" src="resources/ios/icon/icon-50#2x.png" width="100" />
<icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
<icon height="120" src="resources/ios/icon/icon-60#2x.png" width="120" />
<icon height="180" src="resources/ios/icon/icon-60#3x.png" width="180" />
<icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
<icon height="144" src="resources/ios/icon/icon-72#2x.png" width="144" />
<icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
<icon height="152" src="resources/ios/icon/icon-76#2x.png" width="152" />
<icon height="167" src="resources/ios/icon/icon-83.5#2x.png" width="167" />
<icon height="172" src="resources/ios/icon/icon-86#2x.png" width="172" />
<icon height="196" src="resources/ios/icon/icon-98#2x.png" width="196" />
<icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
<splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
<splash height="960" src="resources/ios/splash/Default#2x~iphone.png" width="640" />
<splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
<splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
<splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
<splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
<splash height="2048" src="resources/ios/splash/Default-Portrait#2x~ipad.png" width="1536" />
<splash height="1536" src="resources/ios/splash/Default-Landscape#2x~ipad.png" width="2048" />
<splash height="2732" src="resources/ios/splash/Default-Portrait#~ipadpro.png" width="2048" />
<splash height="2048" src="resources/ios/splash/Default-Landscape#~ipadpro.png" width="2732" />
<splash height="1136" src="resources/ios/splash/Default-568h#2x~iphone.png" width="640" />
<splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
<splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
<splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
<splash height="2732" src="resources/ios/splash/Default#2x~universal~anyany.png" width="2732" />
</platform>
<plugin name="cordova-plugin-whitelist" spec="1.3.3" />
<plugin name="cordova-plugin-statusbar" spec="2.4.2" />
<plugin name="cordova-plugin-device" spec="2.0.2" />
<plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
<plugin name="cordova-plugin-ionic-webview" spec="^4.0.0" />
<plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
<plugin name="cordova-plugin-googleplus" source="npm">
<variable name="WEB_APPLICATION_CLIENT_ID" value="XXX.apps.googleusercontent.com" />
<variable name="REVERSED_CLIENT_ID" value="XXX.apps.googleusercontent.com" />
</plugin>
<allow-navigation href="http://localhost:8100" sessionid="15afd298" />
</widget>
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "com.company.comanda"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
flatDir{
dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
implementation project(':capacitor-android')
testImplementation "junit:junit:$junitVersion"
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
implementation project(':capacitor-cordova-android-plugins')
}
apply from: 'capacitor.build.gradle'
try {
def servicesJSON = file('google-services.json')
if (servicesJSON.text) {
apply plugin: 'com.google.gms.google-services'
}
} catch(Exception e) {
logger.warn("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
}
Please if you can guide me somehow I will be very thankful.

Removing parent nodes from xml file in r

I have xml output below. I am trying to remove parents using XML or xml2 library from R. I found a similar post here but those functions somehow gave me an error. I am trying to remove those parents until analysisdata parent. That is what I am going to parse.
<assessment>
<itembank />
<instrument id="797393 ">
<form id="Math G3">
<formitem id="8243" position="0" />
</form>
</instrument>
<admin id="797393 " instrument="797393 ">
<genatt name="adminperiod" value="SP19" />
<responseanalyses>
<responsebankref id="3M" />
<analysisdefs>
<analysisoption name="mark" value="no" />
<analysisoption name="notreached" value="ASNOTPRESENTED" />
<statentity type="item" id="8243" varname="I_8243">
<genatt name="type" value="CR" />
<genatt name="codestart" value="0" />
<genatt name="validcodes" value="2" />
<genatt name="omitcode" value="9" />
<genatt name="notpresentedcode" value="8" />
<statentity code="0.000000" id="0.000000" type="itemscorept" />
<statentity code="1.000000" id="1.000000" type="itemscorept" />
<statentity code="9" id="omit" type="itemscorept" />
</statentity>
<genatt name="type" value="CR" />
<genatt name="codestart" value="0" />
<genatt name="validcodes" value="2" />
<genatt name="omitcode" value="9" />
<genatt name="notpresentedcode" value="8" />
<statentity code="0.000000" id="0.000000" type="itemscorept" />
<statentity code="1.000000" id="1.000000" type="itemscorept" />
<statentity code="9" id="omit" type="itemscorept" />
</statentity>
<statentity id="DIFGROUP_TTS" varname="DIFGROUP_TTS" type="popgroup" description="DIFGROUP_TTS">
<statentity code="0.000000" id="0.000000" description="0.000000" samplesize="40501" type="popsubgroup" />
<statentity code="1.000000" id="1.000000" description="1.000000" samplesize="5532" type="popsubgroup" />
</statentity>
</analysisdefs>
<genatt name="xmloutputfile" value="J:\out.xml" />
<analysis creator="ST" description="" level="form" type="classical">
<analysisdata formid="Math G3">
<statentityref id="8243" type="item">
<statval type="OmitCount" value="0.000000" />
<statval type="NotReachedCount" value="43.000000" />
<statval type="PolyserialCorrelation" value="0.644181" />
<statval type="AdjustedPolyserial" value="0.644181" />
<statval type="AverageScore" value="0.223074" se="0.011957" />
<statval type="NCount" value="2609.000000" />
<statval type="StdevItemScore" value="0.416308" />
</statentityref>
</statentityref>
</statentityref>
</analysisdata>
</analysis>
</responseanalyses>
<responsebank findin="J:\outAM.am" sourcetype="AM" id="3M" />
</admin>
</assessment>
I tried
library(xml2)
library(XML)
newdoc <- xpathApply(doc, "/assessment/admin/responseanalyses") I get this error after running this: Error in UseMethod("xpathApply") :
no applicable method for 'xpathApply' applied to an object of class "c('xml_document', 'xml_node')". THis solution was suggested here.
After removing those parent nodes, I would like to have analysisdata node only after removing the assessment/admin/responseanalyses parent node. Desired out is like this below:
<analysisdata formid="Math G3">
<statentityref id="8243" type="item">
<statval type="OmitCount" value="0.000000" />
<statval type="NotReachedCount" value="43.000000" />
<statval type="PolyserialCorrelation" value="0.644181" />
<statval type="AdjustedPolyserial" value="0.644181" />
<statval type="AverageScore" value="0.223074" se="0.011957" />
<statval type="NCount" value="2609.000000" />
<statval type="StdevItemScore" value="0.416308" />
</statentityref>
</statentityref>
</statentityref>
</analysisdata>
Any thoughts?
Thanks!
You could use html_node from rvest library
rvest::html_node(doc, 'analysisdata')

Visual Studio Extension with custom command and subcommands

I'm trying to create a simple Visual Studio Extension using Visual Studio 2017 that adds commands to the project context menu in the Solution Explorer. I'd like to add my commands grouped together in a main option and then from that main option I would like my commands to be accessible, just like how the Add->New item, Add->Existing item, Add->Class etc. works for in the context menu of the project.
After going through the documentation here's what I have come up with so far for my vsct file:
<Commands package="guidMainItemPackage">
<Groups>
<Group guid="guidMainItemPackageCmdSet" id="MyMenuGroup" priority="0x0600" />
<Group guid="guidMainItemPackageCmdSet" id="SubMenuGroup" priority="0x0601" />
</Groups>
<Buttons>
<Button guid="guidMainItemPackageCmdSet" id="MainItemId" priority="0x0100" type="Button">
<Parent guid="guidMainItemPackageCmdSet" id="MyMenuGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<ButtonText>Invoke MainItem</ButtonText>
</Strings>
</Button>
<Button guid="guidMainItemPackageCmdSet" id="cmdidSubItem" priority="0x0101" type="Button">
<Parent guid="guidMainItemPackageCmdSet" id="SubMenuGroup" />
<Icon guid="guidImages1" id="bmpPic1" />
<Strings>
<ButtonText>Invoke SubItem</ButtonText>
</Strings>
</Button>
</Buttons>
<Bitmaps>
<Bitmap guid="guidImages" href="Resources\MainItem.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows, bmpPicStrikethrough" />
<Bitmap guid="guidImages1" href="Resources\SubItem.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows, bmpPicStrikethrough" />
</Bitmaps>
</Commands>
<CommandPlacements>
<CommandPlacement guid="guidMainItemPackageCmdSet" id="MyMenuGroup" priority="0xFFFF">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE" />
</CommandPlacement>
<CommandPlacement guid="guidMainItemPackageCmdSet" id="SubMenuGroup" priority="0xFFFE">
<Parent guid="guidMainItemPackageCmdSet" id="MyMenuGroup" />
</CommandPlacement>
</CommandPlacements>
<Symbols>
<GuidSymbol name="guidMainItemPackage" value="{30f66380-eeeb-48bf-8554-0d63d87194af}" />
<GuidSymbol name="guidMainItemPackageCmdSet" value="{98ee7e8f-c421-4f0e-a9e9-86eab5141563}">
<IDSymbol name="MyMenuGroup" value="0x1020" />
<IDSymbol name="SubMenuGroup" value="0x1028" />
<IDSymbol name="MainItemId" value="0x0100" />
<IDSymbol value="4129" name="cmdidSubItem" />
</GuidSymbol>
<GuidSymbol name="guidImages" value="{b3c2dfad-df35-4e6b-880e-8018ce6c3d0f}">
<IDSymbol name="bmpPic1" value="1" />
<IDSymbol name="bmpPic2" value="2" />
<IDSymbol name="bmpPicSearch" value="3" />
<IDSymbol name="bmpPicX" value="4" />
<IDSymbol name="bmpPicArrows" value="5" />
<IDSymbol name="bmpPicStrikethrough" value="6" />
</GuidSymbol>
<GuidSymbol value="{93d3ad22-fe33-40da-b85f-a926952e3914}" name="guidImages1">
<IDSymbol name="bmpPic1" value="1" />
<IDSymbol name="bmpPic2" value="2" />
<IDSymbol name="bmpPicSearch" value="3" />
<IDSymbol name="bmpPicX" value="4" />
<IDSymbol name="bmpPicArrows" value="5" />
<IDSymbol name="bmpPicStrikethrough" value="6" />
</GuidSymbol>
</Symbols>
So basically I have created added two Custom commands to my project, a button for each of the commands, a group for each of the buttons and a commandplacement for each of the groups (everything else is just the default generated vsct template).
My problem is that using the code above, on the first command is displayed and it has no subitems. What would be the correct vsct content to achieve the desired layout?
After some more trial and error (mostly error), I decided to go through the command definitions of Visual Studio itself to find a similar group of commands, and I've finally came up with the answer. Here's the steps you need to take to realize this structure:
Create a group and set the parent of this group to the Visual Studio projects context menu.
Create a menu, whose parent is the group created in step 1.
Create a second group, whose parent is the menu created in step 2.
Create buttons for only the subitems.
Create commandplacements for the subitems created in step 4 where you place each button in the group created in step 3.

status="NotProcessed" for EnhancedAirBookRQ API

Can anyone help me in this regard, checking with Sabre Soap API's for booking flow. I am getting the failure in EnhancedAirBookRQ response.
I am getting the below response :
<ApplicationResults status="NotProcessed" xmlns="http://services.sabre.com/STL_Payload/v02_01">
<Error type="BusinessLogic" timeStamp="2018-10-01T05:38:45.063-05:00">
<SystemSpecificResults>
<Message code="ERR.SWS.HOST.ERROR_IN_RESPONSE">*NO FARES/RBD/CARRIER</Message>
<Message code="146">*NO FARES/RBD/CARRIER</Message>
</SystemSpecificResults>
</Error>
</ApplicationResults>
Request:
<v3:EnhancedAirBookRQ version="3.2.0" HaltOnError="true" IgnoreOnError="true">
<v3:OTA_AirBookRQ>
<v3:OriginDestinationInformation>
<v3:FlightSegment ArrivalDateTime="2018-11-11T07:38:00" DepartureDateTime="2018-11-11T06:31:00" FlightNumber="6384" NumberInParty="1" ResBookDesigCode="K" Status="NN">
<v3:DestinationLocation LocationCode="BOS" />
<v3:Equipment AirEquipType="E90" />
<v3:MarketingAirline Code="TP" FlightNumber="6384" />
<v3:MarriageGrp Ind="false" />
<v3:OperatingAirline Code="B6" />
<v3:OriginLocation LocationCode="JFK" />
</v3:FlightSegment>
<v3:FlightSegment ArrivalDateTime="2018-11-12T06:00:00" DepartureDateTime="2018-11-11T18:40:00" FlightNumber="218" NumberInParty="1" ResBookDesigCode="K" Status="NN">
<v3:DestinationLocation LocationCode="LIS" />
<v3:Equipment AirEquipType="332" />
<v3:MarketingAirline Code="TP" FlightNumber="218" />
<v3:MarriageGrp Ind="true" />
<v3:OperatingAirline Code="TP" />
<v3:OriginLocation LocationCode="BOS" />
</v3:FlightSegment>
<v3:FlightSegment ArrivalDateTime="2018-11-12T12:20:00" DepartureDateTime="2018-11-12T08:40:00" FlightNumber="6791" NumberInParty="1" ResBookDesigCode="K" Status="NN">
<v3:DestinationLocation LocationCode="LUX" />
<v3:Equipment AirEquipType="73H" />
<v3:MarketingAirline Code="TP" FlightNumber="6791" />
<v3:MarriageGrp Ind="true" />
<v3:OperatingAirline Code="LG" />
<v3:OriginLocation LocationCode="LIS" />
</v3:FlightSegment>
<v3:FlightSegment ArrivalDateTime="2018-11-15T12:25:00" DepartureDateTime="2018-11-15T10:55:00" FlightNumber="3761" NumberInParty="1" ResBookDesigCode="X" Status="NN">
<v3:DestinationLocation LocationCode="OPO" />
<v3:Equipment AirEquipType="73W" />
<v3:MarketingAirline Code="LG" FlightNumber="3761" />
<v3:MarriageGrp Ind="false" />
<v3:OperatingAirline Code="LG" />
<v3:OriginLocation LocationCode="LUX" />
</v3:FlightSegment>
<v3:FlightSegment ArrivalDateTime="2018-11-15T15:30:00" DepartureDateTime="2018-11-15T14:30:00" FlightNumber="1947" NumberInParty="1" ResBookDesigCode="W" Status="NN">
<v3:DestinationLocation LocationCode="LIS" />
<v3:Equipment AirEquipType="AT7" />
<v3:MarketingAirline Code="TP" FlightNumber="1947" />
<v3:MarriageGrp Ind="false" />
<v3:OperatingAirline Code="WI" />
<v3:OriginLocation LocationCode="OPO" />
</v3:FlightSegment>
<v3:FlightSegment ArrivalDateTime="2018-11-15T20:00:00" DepartureDateTime="2018-11-15T17:00:00" FlightNumber="209" NumberInParty="1" ResBookDesigCode="W" Status="NN">
<v3:DestinationLocation LocationCode="JFK" />
<v3:Equipment AirEquipType="332" />
<v3:MarketingAirline Code="TP" FlightNumber="209" />
<v3:MarriageGrp Ind="true" />
<v3:OperatingAirline Code="TP" />
<v3:OriginLocation LocationCode="LIS" />
</v3:FlightSegment>
</v3:OriginDestinationInformation>
</v3:OTA_AirBookRQ>
<v3:OTA_AirPriceRQ>
<!--v3:PriceComparison /-->
<v3:PriceRequestInformation Retain="true">
<v3:OptionalQualifiers>
<v3:PricingQualifiers>
<v3:PassengerType Code="ADT" Quantity="1" />
</v3:PricingQualifiers>
</v3:OptionalQualifiers>
</v3:PriceRequestInformation>
</v3:OTA_AirPriceRQ>
<v3:PostProcessing IgnoreAfter="false" />
<v3:PreProcessing IgnoreBefore="false" />
</v3:EnhancedAirBookRQ>
Checking this test step in soap ui project given by Sabre on their developer portal. Before this, checked for test-steps for create session and low fare search for flights.
Can anyone tell any way to resolve on this. Thanks for any help.
EnhancedAirBookRQ flight details are not correct. Please verify or use search API again to fetch correct details

WHy is awesome_print gem showing <br /> in rspec output

I'm getting this output from ap, in my rspec test
"line1"<br />
"line2"<br />
"city"<br />
"state"<br />
"zip"<br />
"country"<br />
It is not because of the :html option, because when that's on it looks like:
<pre><kbd style="color:brown">"line1"</kbd></pre><br />
<pre><kbd style="color:brown">"line2"</kbd></pre><br />
<pre><kbd style="color:brown">"city"</kbd></pre><br />
<pre><kbd style="color:brown">"state"</kbd></pre><br />
<pre><kbd style="color:brown">"zip"</kbd></pre><br />
<pre><kbd style="color:brown">"country"</kbd></pre><br />

Resources