diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/impl/RPDMessageParsingTest.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/impl/RPDMessageParsingTest.java
index 5b29f1da512..d09fe4dc6c0 100755
--- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/impl/RPDMessageParsingTest.java
+++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/impl/RPDMessageParsingTest.java
@@ -22,6 +22,17 @@ public class RPDMessageParsingTest {
@Test
public void parseRPDMessage() throws InterruptedException, ParseException, UnknownHostException, IOException {
final String rpdMessage = "RPD|8aaa6db1-2084-4067-bf0b-2c24481b42da|2,|2018-09-13T15:06:39+09:00|14:50:00|00:16:39|2|315|97|03a52cb2-8a24-49d7-aebb-7e760be763a3;5;0;35.284932;139.516334;0.0;;;270;;;;;|0a66267e-3551-48e8-9872-adee288ceea4;5;229;35.287947;139.524639;0.8;;;312;;;;;|0b9e8236-f163-478e-8db9-67a4439db253;5;0;35.242476;139.5462;0.2;;;90;;;;;|0f06f40f-09de-49f6-9024-69aca52e387b;5;0;35.250663;139.556997;0.2;;;39;;;;;|0f1a7451-d242-4e8f-90b1-b00585356c0e;3;0;35.240411;139.546359;0.0;;;203;;;;;|0f519aeb-fb96-422b-83c9-6018dead3d22;3;0;35.247031;139.512632;0.4;;;296;;;;;|118d1ea9-ff87-4591-89d9-6cc58a5251d1;3;0;35.286932;139.511812;0.8;;;306;;;;;|152ae7ba-930a-43d2-a1dd-89e6ff60a3d0;3;0;35.241575;139.537837;0.2;;;158;;;;;|16fa57f0-10f4-4ac8-8fc0-4b8c875ebd33;5;0;35.256665;139.519313;1.0;;;64;;;;;|1db8195b-f5e2-4df1-af6d-e87386d224b9;5;0;35.290532;139.517897;0.6;;;270;;;;;|1ebbc2d1-78ed-420f-beec-9fad8fd5daa4;5;0;35.293927;139.511108;0.6;;;337;;;;;|1f32b277-ad3a-4ca7-9323-bc4458b971b7;5;0;35.28621;139.517586;0.6;;;291;;;;;|23fe9e60-7a93-4d58-b5a0-b73e51fff893;3;0;35.291366;139.495241;0.0;;;124;;;;;|244c5fc7-bf67-46e0-a6f1-d4d052c873be;5;0;35.243593;139.537314;0.4;;;360;;;;;|26229b56-4775-4a96-a611-a7e1de9781fd;5;0;35.299624;139.483962;0.0;;;219;;;;;|32f27c17-4c23-4770-973f-190cf08d6aa8;5;0;35.248049;139.54433;3.9;;;231;;;;;|35e389df-91df-4002-831b-7687d53e0ae5;5;0;35.274886;139.537612;2.1;;;123;;;;;|39217d61-9712-4e2b-b273-46cb3dfe67b9;5;0;35.290478;139.517889;0.6;;;287;;;;;|3ab16d2e-3913-4eee-94d7-ba0b5ea6ba6e;5;0;35.288054;139.512915;0.2;;;248;;;;;|3b1d3b5e-6076-48d4-ac25-6af78653d25c;5;;;;;;;;;;;;|3d1dae40-7b67-4c91-b96b-cd64323e7729;3;0;35.270134;139.529297;0.0;;;138;;;;;|3ffa6395-9c48-4778-8435-23941f1468b5;3;0;35.271402;139.528498;2.1;;;75;;;;;|43c0afca-4541-407e-a838-62b0b9c6107a;5;0;35.243898;139.536739;0.4;;;203;;;;;|4949c1bc-1a64-41e7-aac0-1755e1475654;5;0;35.259178;139.493608;0.4;;;301;;;;;|4fea8d8c-7f82-480c-9be6-54b156835be3;3;57;35.255563;139.48385;0.0;;;141;;;;;|5221ccc9-a2c6-488e-a997-14b3011ea690;5;0;35.270109;139.529213;0.0;;;202;;;;;|5ab4c57a-8f62-49da-98f7-1a3b55d3aef4;3;82;35.287856;139.495553;0.0;;;90;;;;;|5edd2a5c-60dc-452d-8531-351b28c9da47;5;0;35.259076;139.493317;2.7;;;112;;;;;|5f2be0cf-c409-4cd5-8c6f-73ec04c74cec;5;0;35.288788;139.496593;0.4;;;300;;;;;|61510f24-5a80-4495-aade-6e6dfb97cff0;5;618;35.261148;139.494548;1.4;;;226;;;;;|64bc1273-8aab-4ef1-8bf9-748ccc40f2d5;5;0;35.256647;139.519281;1.2;;;68;;;;;|65fa9055-0e4f-406b-8cdb-9da6a31fbfef;5;0;35.287871;139.523833;0.6;;;248;;;;;|66733af1-355b-4b2d-863d-3cbcae89cb22;5;0;35.290807;139.507125;0.4;;;90;;;;;|6a52394f-3f3f-4a36-98ef-bbcdf623c0e1;5;0;35.250647;139.556728;0.4;;;270;;;;;|6ee5589d-79ce-4a39-93fe-6571d68a94fd;5;9042;35.252182;139.546278;11.7;;;130;;;;;|7721940e-6ae6-4157-8c42-8eb22b5ae58f;3;0;35.255564;139.483859;0.2;;;90;;;;;|81de4f19-0e37-419e-82eb-d369a040ee7c;5;0;35.284915;139.516334;0.0;;;90;;;;;|844cc0c6-e73d-41f6-9d80-5151f6878cde;5;0;35.284906;139.516346;0.0;;;270;;;;;|85fadddc-983c-4254-9273-4a1ad73b5731;5;0;35.288784;139.49661;0.4;;;270;;;;;|8b892963-e078-40ff-b6a4-67b87bdc4855;5;0;35.253099;139.51882;0.2;;;360;;;;;|922f94be-7724-4004-9d24-6a5eb7286099;5;83;35.287871;139.524114;0.6;;;238;;;;;|93926478-f928-432c-901d-431003ef0f18;5;0;35.290555;139.517883;0.6;;;270;;;;;|98e428d2-a181-4162-9060-ebdb4313cb2a;5;0;35.28807;139.512915;0.2;;;239;;;;;|9a3298d4-b405-429e-8170-9dacada0bfba;5;0;35.271545;139.529741;0.2;;;360;;;;;|9cc93765-02c2-4f5f-ad9f-14e469d4874d;3;0;35.247147;139.513394;0.0;;;321;;;;;|9d4263f5-52e6-4dcd-94c6-9ae841d06c76;3;0;35.286935;139.511785;0.6;;;270;;;;;|a03b195b-cf20-4e52-8d05-68717adea11e;3;0;35.284925;139.516377;0.0;;;90;;;;;|a3005701-0870-45cc-84db-3b678afc3a23;3;0;35.287403;139.515162;0.0;;;90;;;;;|a3269b48-739c-497e-846a-3be163457320;3;0;35.270132;139.529265;0.0;;;143;;;;;|a46cc3c5-a142-424e-9b0a-e8bdcb82f813;3;0;35.247431;139.5111;0.4;;;339;;;;;|b2ec920a-8192-4c4b-a58c-0b2e43f6e9f4;3;0;35.254888;139.484122;0.2;;;90;;;;;|b55cc804-3a74-4db4-9ed0-b0b2e931b24f;5;0;35.271023;139.530127;0.2;;;90;;;;;|c1515836-34e1-4ba6-b3bd-1edda4659d3b;5;0;35.299634;139.483991;0.0;;;360;;;;;|c4e9491d-aa36-4e20-aacf-9b4cfa3df61d;5;0;35.248233;139.512246;0.6;;;90;;;;;|ca028761-bec6-4513-9f00-e0fef2b3d606;3;273;35.271139;139.528568;0.6;;;321;;;;;|ca84e3c3-b991-4025-a24f-903135d4a7e5;3;0;35.245991;139.548126;2.5;;;222;;;;;|cf5af8a8-fe68-48b8-9dde-29b5ba8dc073;5;0;35.286219;139.517599;0.6;;;292;;;;;|cf76e9a5-8244-41f3-987a-bef529c48a74;5;0;35.250647;139.557105;0.2;;;270;;;;;|d37712aa-62b8-498d-8970-ea9a8e859ab1;3;12;35.285947;139.496245;1.2;;;81;;;;;|d4348384-01fc-40ed-818d-f7375a187e4f;5;0;35.248715;139.511822;0.0;;;244;;;;;|de02144b-771e-49ea-bc2f-f52d3d22a3dd;3;0;35.254877;139.484061;0.2;;;270;;;;;|df78084b-e9bc-475c-a418-48a5cc4d992f;5;0;35.277041;139.540017;0.6;;;143;;;;;|dfa00db0-3fa0-4524-a468-2d9d7b45a150;5;0;35.290436;139.507;0.6;;;22;;;;;|e1dbea90-bc68-4798-b3d6-c7d3bbc8bbd0;3;0;35.241517;139.53718;1.2;;;338;;;;;|e2fab779-542b-43e9-89fe-1481c0475aaa;5;0;35.252376;139.547022;0.6;;;90;;;;;|e4a75785-61c6-4d4f-bf17-45981e82191b;5;0;35.299626;139.483976;0.0;;;90;;;;;|eb9f7c73-b570-4182-b618-a5d134c5082e;3;0;35.286174;139.496824;1.7;;;49;;;;;|f46926c8-5572-4784-83a3-3092ea48730e;5;0;35.29966;139.484017;0.0;;;270;;;;;|f5882727-5f43-4c36-bf60-78ba45cfbe3b;3;0;35.247174;139.513385;0.2;;;338;;;;;|f61891e5-89e5-47eb-bf22-ac469bdd0ede;5;0;35.255676;139.484818;0.4;;;165;;;;;|f6c78cda-d1c1-4add-8d18-b6320be9226f;5;0;35.242038;139.546602;0.4;;;219;;;;;|fb9dcc99-1fb9-4cff-b377-9e9b2ccc4c7a;5;0;35.256585;139.484501;0.6;;;239;;;;;|dc5f272b-c041-4595-8cb9-a9559f551048;1;0;35.27271;139.535808;5.4;3.9;3.2;191;2;4;214;529;|e0d78e51-e427-4751-8663-dbaae6990545;1;0;35.276309;139.533649;5.4;4.7;3.0;206;2;9;281;596;|8f470978-cfdc-4324-83f6-2df14be53090;1;0;35.274263;139.534595;5.4;4.8;3.1;208;2;5;220;535;|e87efa8a-b97b-40eb-8923-46993ae78075;1;0;35.268715;139.540604;5.2;3.4;4.3;185;2;16;401;715;|ffc6c67d-45f5-4f46-9bdb-a49abb873c31;1;0;35.299348;139.484229;0.0;0.0;0.0;39;2;21;3358;3673;|4ed73356-2a9a-4749-a5f9-ef7e5969bc97;1;0;35.271586;139.538937;5.8;3.2;4.0;291;2;14;376;691;|d96f6bf5-5d50-4695-adfd-addbafad6783;1;;;;;;;;;;;;DNC|ceb4f079-d696-4fad-b548-196e8ae42e2b;1;113;35.273095;139.539657;9.1;2.3;0.0;160;2;17;526;841;|52123e7c-6eee-4ca3-bc04-a3291adbb8a2;1;3809;35.277406;139.541492;8.7;;0.0;91;2;;;1251;|c6ee3315-a57b-43fc-addd-3fe38b19f801;1;;;;;;;;;;;;DNC|375cb959-da8a-40a9-8fdd-c2d95f6c026f;1;6949;35.2718;139.542195;6.4;;0.0;95;2;;;948;|a838c98f-6743-4b59-8b03-812c5117090e;1;0;35.299318;139.484233;0.0;0.0;0.0;90;2;18;3356;3671;|31fc4551-b5b0-4181-8df0-52129d2a124d;1;0;35.269058;139.539401;4.1;3.5;3.2;205;2;11;319;634;|f33df1df-7037-4625-8823-234cc1ef5013;1;0;35.272408;139.538294;6.2;2.4;3.7;302;2;15;381;695;|3a317d5d-4a33-4f09-8e7a-dcb4524831f1;1;0;35.273539;139.53592;5.1;2.6;3.0;294;2;8;275;590;|5c122375-4b15-4f82-8cdf-846e24a02ad5;1;0;35.273925;139.533292;5.4;4.9;3.0;210;2;2;102;417;|00774596-7fd5-4170-9e85-16b649b5c120;1;0;35.275801;139.533777;6.2;5.6;3.2;209;2;6;258;573;|d812c7f4-383a-4860-bdd4-4d21c141f3e8;1;0;35.299366;139.484266;0.0;0.0;0.0;119;2;20;3357;3672;|9a8770e5-9c2b-48ad-8510-3aac3f016060;1;0;35.26867;139.539802;4.7;2.7;4.2;180;2;12;352;667;|2c11cbe3-ef91-4daa-b50d-1da68820e450;1;0;35.272456;139.53706;4.7;1.7;3.3;304;2;10;291;606;|8a02c1e8-e1a7-4562-b3d9-baa8c602f319;1;0;35.2729;139.536282;5.8;3.7;3.5;185;2;7;261;576;|316b9ee6-5a6c-4a8d-8bbb-33e6e1123d68;1;0;35.273131;139.532612;5.4;5.1;3.1;213;2;1;0;315;|2210628b-8e79-4059-9afb-3ab937e89f2c;1;0;35.269445;139.540216;4.1;1.9;3.5;173;2;13;362;677;|12fd9883-b95e-4a15-ae66-8994cd487eac;1;0;35.299323;139.484234;0.0;0.0;0.0;222;2;19;3357;3672;|9bcee4ee-9cee-4658-9800-415e1eb6518b;1;0;35.27481;139.533061;5.8;5.5;3.1;215;2;3;142;457;";
+ assertRPDMessageCanBeParsed(rpdMessage);
+ }
+
+ @Test
+ public void parseRPDWithEmptyStringsMessage() throws InterruptedException, ParseException, UnknownHostException, IOException {
+ final String rpdMessage = "RPD|005ec96a-9751-45d5-b77a-4ff2db19702f|,|2018-09-14T05:25:27+00:00|||||1|457898af-5af3-441e-9a80-bbc09379855c;;;35.299492;139.484399;0.0;;;33;;;;;";
+ assertRPDMessageCanBeParsed(rpdMessage);
+ }
+
+ private void assertRPDMessageCanBeParsed(final String rpdMessage)
+ throws InterruptedException, ParseException, IOException {
final SailMasterMessage message = new SailMasterMessageImpl(rpdMessage);
final SailMasterConnectorImpl connector = new SailMasterConnectorImpl(/* host */ "8.8.8.8", /* port */ 443, /* raceId */ null, /* raceName */ null, /* raceDescription */ null, /* boatClass */ null);
final boolean[] receivedPositionData = new boolean[1];
diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SailMasterConnectorImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SailMasterConnectorImpl.java
index ba14085368f..dd44a0b5a6e 100755
--- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SailMasterConnectorImpl.java
+++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SailMasterConnectorImpl.java
@@ -361,16 +361,16 @@ public class SailMasterConnectorImpl extends SailMasterTransceiverImpl implement
assert message.getType() == MessageType.RPD;
String[] sections = message.getSections();
String raceID = sections[1];
- final RaceStatus raceStatus;
- final RacingStatus racingStatus;
final String[] raceStatusIntAndRacingStatusInt = sections[2].split(",");
+ final String raceStatusAsString = raceStatusIntAndRacingStatusInt.length > 0 ? raceStatusIntAndRacingStatusInt[0] : null;
+ final RaceStatus raceStatus = raceStatusAsString == null || raceStatusAsString.trim().isEmpty() ? null : RaceStatus.values()[Integer.valueOf(raceStatusAsString)];
+ final String racingStatusAsString;
if (raceStatusIntAndRacingStatusInt.length > 1) {
- raceStatus = RaceStatus.values()[Integer.valueOf(raceStatusIntAndRacingStatusInt[0])];
- racingStatus = RacingStatus.values()[Integer.valueOf(raceStatusIntAndRacingStatusInt[1])];
+ racingStatusAsString = raceStatusIntAndRacingStatusInt[1];
} else {
- raceStatus = RaceStatus.values()[Integer.valueOf(raceStatusIntAndRacingStatusInt[0])];
- racingStatus = null;
+ racingStatusAsString = null;
}
+ final RacingStatus racingStatus = racingStatusAsString == null || racingStatusAsString.trim().isEmpty() ? null : RacingStatus.values()[Integer.valueOf(racingStatusAsString)];
TimePoint timePoint = new MillisecondsTimePoint(parseTimeAndDateISO(sections[3], raceID));
lastRPDMessageTimePoint = timePoint;
String dateISO = sections[3].substring(0, sections[3].indexOf('T'));
@@ -392,7 +392,8 @@ public class SailMasterConnectorImpl extends SailMasterTransceiverImpl implement
if (fixSections.length > 2) {
final String trackedObjectIdAsString = fixSections[fixDetailIndex++].trim();
if (trackedObjectIdAsString != null && !trackedObjectIdAsString.trim().isEmpty()) {
- final TrackerType trackerType = TrackerType.values()[Integer.valueOf(fixSections[fixDetailIndex++])];
+ final String trackerTypeAsString = fixSections[fixDetailIndex++];
+ final TrackerType trackerType = trackerTypeAsString == null || trackerTypeAsString.trim().isEmpty() ? null : TrackerType.values()[Integer.valueOf(trackerTypeAsString)];
final String ageOfDataInMillisAsString = fixSections[fixDetailIndex++];
final Long ageOfDataInMilliseconds = ageOfDataInMillisAsString==null || ageOfDataInMillisAsString.trim().isEmpty() ? null : (1000l * Long.valueOf(ageOfDataInMillisAsString));
final String latDegAsString = fixSections[fixDetailIndex++];
diff --git a/java/com.sap.sse.security.ui/GWT Security SDM.launch b/java/com.sap.sse.security.ui/GWT Security SDM.launch
index c8b77e31b45..9f8f649e5d0 100644
--- a/java/com.sap.sse.security.ui/GWT Security SDM.launch
+++ b/java/com.sap.sse.security.ui/GWT Security SDM.launch
@@ -38,7 +38,6 @@
-