The following has evaluated to null or missing: ==> FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) [in template "252001#252047#252845" at line 132, column 37] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: dMTJsonObject = FrontendService.media... [in template "252001#252047#252845" at line 132, column 21] ----
1<#-- used @ Veranstaltung-Detailseite Intro
2 used @ Publikation-Detailseite Intro
3-->
4
5<#--
6Web content templates to display teaser on thema detail page
7
8Generic template for detail pages Intro / Teaser element
9-->
10<#--
11Display the current page title
12-->
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" />
14<#include "${fullTemplatesPath}/macros/debugging.ftl" />
15
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" />
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" />
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" />
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" />
20
21
22<#--
23 renders the Intro for nearly all Pages
24 TODO: remove Share? (was in the designs, but not anymore?)
25 TODO: check if languageSelect/filter are working (js)
26
27 - portletId
28 - data = {
29 "media": string (src from image),
30 "category": string,
31 "title": string,
32 "author": string,
33 "subheadline": string,
34 "copy": string,
35 "filter": {
36 "id": string,
37 "name": string,
38 "entries": Array<Object> ({key:value}),
39 },
40 "languageSelect": {
41 "id": string,
42 "name": string,
43 "entries": Array<Object> ({key:value}),
44 },
45 "meta": {
46 "pos"; string (top/bottom)
47 "date": string,
48 "hash": string,
49 "info": string, (url)
50 },
51 "share" : {
52 "login": string,
53 "print": string,
54 "mail": string,
55 "multishare": string?? (tbd)
56 }
57 - AMMetadata: macro
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content
59 }
60-->
61
62<#assign
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
64
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService")
67
68 themeDisplay = ServiceContext.getThemeDisplay()
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay)
70
71 languageId = themeDisplay.getLocale()
72 groupId = themeDisplay.getScopeGroupId()
73 currentUrl = themeDisplay.getURLCurrent()
74
75 layout = themeDisplay.getLayout()
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id")
77/>
78
79<#setting locale="${languageId}">
80
81<#-- get article from url -->
82
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! >
84
85
86<#if entry?has_content>
87
88 <#if entry.resourcePrimKey??>
89 <#assign primaryKey = entry.resourcePrimKey?number >
90 <#elseif entry.classPK??>
91 <#assign primaryKey = entry.classPK?number >
92 </#if>
93
94 <#assign
95 jsonString = FrontendService.article.getWebcontent(primaryKey)
96 json = FrontendService.json.parseAsJson(jsonString)
97 availablelanguages = FrontendService.article.getAssetEntryToUrl(primaryKey).getAvailableLanguageIds()
98
99 title = entry.getTitle(languageId)
100 data = {
101 "title": title
102 }
103 />
104 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" />
105
106 <#if hasContent('untertitel', languageId, json)>
107 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } >
108 </#if>
109
110 <#if hasContent('detailsubtitle', languageId, json)>
111 <#assign data = data + { "detailsubtitle": getValueForLanguage('detailsubtitle', languageId, json, "first") } >
112 </#if>
113
114 <#if hasContent('beschreibung', languageId, json)>
115 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } >
116 </#if>
117
118 <#-- fill meta data -->
119 <#assign meta = {} />
120
121 <#-- PUBLIKATIONEN DETAIL -->
122 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")>
123
124 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)>
125 <#assign
126 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first")
127 />
128
129 <#if coverBildString?has_content>
130 <#assign
131 coverBild = FrontendService.json.parseAsJson(coverBildString)
132 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale )
133 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid )
134 data = data + { "media": linkToDMT, "meta" : dMTJsonObject }
135 />
136 <#if dMTJsonObject.altText?? >
137 <#assign data = data + {"alt" : dMTJsonObject.altText} />
138 </#if>
139 <#if dMTJsonObject.quelle??>
140 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } />
141 </#if>
142 </#if>
143 <#-- uncomment to display pdf cover as Intro Image
144 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)>
145 <#assign
146 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first")
147 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/>
148 <#if fileEntry?has_content>
149 <#assign
150 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay)
151 data = data + { "media": linkToThumbnail }
152 />
153 </#if>
154 -->
155 </#if>
156
157 <#assign
158 meta = meta + { "orderInfo": "true" }
159 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!""
160 />
161
162
163
164 <#if hasContent('erscheinungsdatum', languageId, json)>
165 <#assign
166 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
167 />
168 <#if erscheinungsdatum?has_content >
169 <#assign
170 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId )
171 meta = meta + { "date": erscheinungsdatumFormatted }
172 />
173 </#if>
174 </#if>
175
176 <#if verbundJournalArticle?has_content>
177 <#assign
178 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey)
179 verbundJson = FrontendService.json.parseAsJson(verbundJsonString)
180 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first")
181 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first")
182 />
183 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" />
184 <#assign meta = meta + { "laufendenummer": laufendenummer } >
185
186 <#if coverImg?has_content && coverImg.url?has_content >
187 <#assign meta = meta + { "coverImg": coverImg.url } >
188 </#if>
189 </#if>
190
191
192 <#if meta?has_content>
193 <#assign data = data + {"meta": meta } >
194 </#if>
195
196 </#if>
197 <#-- PUBLIKATIONEN DETAIL END -->
198
199
200 <#-- VERANSTALTUNGEN DETAIL -->
201 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")>
202 <#assign
203 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!""
204 links = []
205 />
206 <#if availablelanguages?has_content && friendlyUrl?has_content>
207 <#if (availablelanguages?size > 1) >
208 <#list availablelanguages as language>
209 <#assign
210 defaultLanguage = "de_DE"
211 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage)
212 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale
213 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId)
214
215 link = {
216 "key": language!defaultLanguage,
217 "value": linkLocale.getDisplayLanguage(languageId),
218 "url": "/c/portal/update_language?p_l_id=" +
219 layout.plid + "&redirect=" + langFriendlyUrl +
220 "&languageId=" + language
221 }
222 />
223 <#if language == languageId>
224 <#assign link = link + { "selected": "true" } >
225 </#if>
226 <#assign links = links + [link]>
227 </#list>
228 <#assign
229 data = data + {
230 "languageSelect": {
231 "id": "languageSelectRedirect",
232 "name": "languageselectRedirect",
233 "entries": links,
234 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar")
235 }
236 }
237 />
238 </#if>
239 </#if>
240 </#if>
241
242 <#if hasContent('erscheinungsdatum', languageId, json)>
243 <#assign
244 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
245 meta = meta + { "start": startdate?date.iso, "end": "" }
246 />
247 </#if>
248
249 <#if hasContent('startdatum', languageId, json)>
250 <#assign
251 startdate = getValueForLanguage('startdatum', languageId, json, "first")
252 meta = meta + { "start": startdate?date.iso, "end": "" }
253 />
254 </#if>
255
256 <#if hasValue('einfuehrungText', locale, json)>
257 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } >
258 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")>
259 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } >
260 </#if>
261
262 <#if hasContent('endedatum', languageId, json)>
263 <#assign
264 enddate = getValueForLanguage('endedatum', languageId, json, "first")
265 meta = meta + { "end": enddate?date.iso }
266 />
267 </#if>
268
269 <#if hasContent('startzeit', languageId, json)>
270 <#assign
271 startzeit = getValueForLanguage('startzeit', languageId, json, "first")
272 />
273 <#if startzeit?has_content >
274 <#assign meta = meta + { "startzeit": startzeit } />
275 </#if>
276 </#if>
277
278 <#if hasContent('endezeit', languageId, json)>
279 <#assign
280 endezeit = getValueForLanguage('endezeit', languageId, json, "first")
281 meta = meta + { "endezeit": endezeit }
282 />
283 </#if>
284
285 <#if hasContent('ortWCSKASDEORT', languageId, json)>
286 <#assign
287 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first"))
288 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number
289 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!""
290 />
291 <#if ortWCSKASDEORTWebContent?has_content >
292 <#assign
293 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!""
294 />
295 <#if ortWCSKASDEORTTitle?has_content >
296 <#assign
297 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle }
298 />
299 </#if>
300 </#if>
301 </#if>
302
303
304 <#if hasContent('veranstaltungsnummer', languageId, json)>
305 <#assign
306 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first")
307 meta = meta + { "verauuid": verauuid }
308 />
309 </#if>
310
311
312 <#if (data.meta)?has_content >
313 <#assign meta = data.meta />
314 </#if>
315
316 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)>
317 <#assign
318 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first")
319 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution")
320 />
321 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} >
322
323
324 <#if mediaData.meta?? && mediaData.meta.quelle??>
325 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } />
326 </#if>
327 </#if>
328
329
330 <#if meta?has_content>
331 <#assign data = data + {"meta": meta } >
332 </#if>
333
334 <#-- END fill meta data -->
335
336 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)>
337 <#assign
338 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json)
339 authors = []
340 />
341 <#list journalArticles as articleString>
342 <#assign article = FrontendService.json.parseAsJson(articleString) />
343 <#if article?has_content && article?is_hash && article.classPK??>
344 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" />
345 <#if articleDereferenced?has_content >
346 <#assign
347 author = ""
348 articlePrimaryKey = articleDereferenced.classPK?number
349 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey)
350 articleJson = FrontendService.json.parseAsJson(articleJsonString)
351 />
352 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" />
353 <#if hasValue('anredetitel', languageId, articleJson)>
354 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " ">
355 </#if>
356 <#if hasValue('vorname', languageId, articleJson)>
357 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " ">
358 </#if>
359 <#if hasValue('nachname', languageId, articleJson)>
360 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " ">
361 </#if>
362
363 <#attempt>
364 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" >
365 <#recover>
366 <#assign href = "#" >
367 </#attempt>
368 <#if href?has_content && href != "#" && href != "/_404">
369 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'>
370 </#if>
371
372 <#assign authors = authors + [author?trim]>
373 </#if>
374 </#if>
375 </#list>
376 <#if authors?has_content>
377 <#assign data = data + { "author": authors?join(", ") } >
378 </#if>
379 </#if>
380
381 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") >
382 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! >
383 <#if categories?has_content && categories[0]?has_content >
384 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
385 </#if>
386
387 <#if hasContent('ausgebucht', languageId, json)>
388 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }>
389 </#if>
390
391 <#if hasContent('storniert', languageId, json)>
392 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }>
393 </#if>
394
395 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") >
396 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! >
397 <#if categories?has_content && categories[0]?has_content >
398 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
399 </#if>
400 <#else>
401 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! >
402 <#if categories?has_content && categories[0]?has_content >
403 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
404 </#if>
405 </#if>
406
407
408 <#assign
409 languages = []
410 />
411
412 <#attempt>
413 <#if json["document_pdfDMTBASICDOCUMENT"]?? >
414 <#if availablelanguages?has_content>
415 <#list availablelanguages as pdf_language>
416 <#assign
417 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first")
418 docRef = FrontendService.json.parseAsJson(docRefJson)
419 />
420 <#if docRef?is_hash && pdf_language != languageId >
421 <#assign
422 lang = FrontendService.language.getLocaleByKey(pdf_language)!""
423 docGroupId = docRef["groupId"]?number
424 docUuid = docRef["uuid"]
425 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale )
426 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject )
427 />
428 <#if lang?has_content>
429 <#assign
430 languages = languages + [
431 {
432 "key": pdf_language,
433 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(),
434 "url": dMTLink
435 }]
436 />
437 </#if>
438 </#if>
439 </#list>
440 </#if>
441 </#if>
442 <#recover>
443 </#attempt>
444
445 <#if (languages?size > 0)>
446 <#attempt>
447 <#assign
448 data = data + { "languageSelect": {
449 "id": "languageSelect",
450 "name": "languageselect",
451 "entries": languages,
452 "documents": "",
453 "button": "true"
454 }}
455 />
456 <#recover>
457 </#attempt>
458 </#if>
459
460 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" />
461 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)}
462
463 <#if data.meta?has_content>
464 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()>
465 <div>
466 <div id="publicationVerbundPagination">
467 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg />
468 </div>
469 </div>
470 </#if>
471 </#if>
472
473<#elseif (editmode?? && editmode)>
474 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl />
475</#if>
The US Vice President’s trip to Southeast Asia should be interpreted as a sign of resolve and a commitment to Washington’s long-term involvement in the region. What’s more, it intends to diplomatically reinforce the strategic focus of the Indo-Pacific as well as imbuing President Joe Biden’s mantra “America is back”, with concrete initiatives. Besides reassuring the partners of the US, the trip served at least to the same degree as a foreign policy signal to the geopolitical competitor in Beijing. The rapid political, economic, and military rise of the People’s Republic of China and its increasingly expansive presence does not make itself more acutely felt than in this region of the world.
The fact that Kamala Harris’ trip between 25 and 26 August 2021 now took her, along with Singapore, to Vietnam, which is ruled by the Communist Party, illustrates the strategic importance that Washington now affords to its one-time rival in Hanoi.
Leaving the Past Behind, Looking to the Future
Unlike the first destination in Singapore, dramatic events at Kabul airport, which evoked many a memory in the West, did not play a role in Hanoi. Reports from international media attempting to create historic parallels were also blocked by government censorship in Vietnam using firewalls. The pictures from Kabul neither evoked insecurity (nor even malicious joy). The US’ decision to withdraw from Afghanistan is interpreted by Vietnam as a conscious decision to enable a stronger focus and expansion of American involvement in the Indo-Pacific.
The reality that Vietnam and the United States were once wartime enemies during the Cold War was only of minor importance during Harris’ visit to Hanoi. Hence, the US Vice President visited a memorial at the location where the late US Senator and presidential candidate John McCain was shot down in his fighter aircraft in 1967. In addition to this, a pledge was made for financial resources and projects for detecting and removing explosive remnants of war (UXO) from the Vietnam war, as well as for supporting people with disabilities owing to unexploded bombs and environmental toxins.
Vietnam as an Important Partner of the US in a Geopolitically Signifcant Region
Present and future bilateral relations as well as deeper cooperation based on shared strategic interests were the focus of the visit, however.
From the US American perspective, Vietnam now represents an even more important strategic component of its Indo-Pacific strategy than its traditional allies of the Philippines and Thailand or populous Indonesia. The relationship with the one-party state is not a partnership of values, but rather a cooperation based on Realpolitik calculations and an alignment of interests. This close relationship between both states is primarily due to the rise of China.
Besides Singapore, Vietnam was the only country in Southeast Asia to be explicitly mentioned in the “Interim National Security Strategy Guidance” (INSSG); the first foreign policy strategy document of the Biden Administration and published in March 2021. Even though classic visiting diplomacy is used to gauge relations, especially during times of a global pandemic, the importance of Vietnam for the pursuit of Washington’s foreign policy interests in the Indo-Pacific region is becoming clear. Even under the Trump Administration, in October and November of last year the US Secretary of State Mike Pompeo and the National Security Advisor Robert O´Brien had paid visits to Hanoi, while in July 2021 the Secretary of Defence Llody Austin was the first cabinet minister of the Biden Administration to visit Vietnam. And finally, Kamala Harris as the first US Vice President to visit Vietnam.
Some political observers had expressed the assumption – or hope – that Harris’ visit could lead to an upgrade of the partnership between the US and Vietnam. These expectations were only partially fulfilled. Harris had arrived with the mission of further deepening the existing “comprehensive partnership” between Vietnam and the US; as well as renewing the offer of a semantic upgrade to a “strategic partnership”.
According to Substance Already a Strategic Relationship
Vietnam maintains “strategic partnerships” with more than a dozen states – including with Germany since October 2011. Hanoi has formally taken the partnership to the highest level with three of those states: In 2012, the “strategic partnership” that has existed with Moscow since 2001 was upgraded to a “comprehensive strategic partnership”; in 2016, the partnership existing with New Delhi since 2007 was also upgraded. However, Beijing remains primus inter pares; it is connected to Vietnam through a “comprehensive, strategic, cooperative partnership” (2009). There can be no doubt about the strong political, economic, military, and historical reasons underpinning these particularly close relations with the three aforementioned partners.
However, the United States, which is Vietnam’s most important export partner and the second most significant trading partner after China, is officially still only connected to Vietnam through a “comprehensive partnership”.
Hence, for more than a decade Washington has endeavoured to elevate relations with their former rival, also regarding language used, to a strategic level. This has succeeded according to substance, too. The painful past, ideological differences and criticism levelled against the domestic policy situation in Vietnam did not prove to be obstacles here.
As early as 2010, the former US Secretary of State Hillary Clinton had offered Vietnam a “strategic partnership”. And it was in 2013 that the “comprehensive partnership” was finally announced. From that point onwards, relations gained momentum: Twenty years after establishing diplomatic relations, Nguyễn Phú Trọng was received at the White House as the first General Secretary of the Communist Party of Vietnam (CPV). The following year witnessed a return visit by President Barack Obama to Hanoi, during which the lifting of the US arms embargo was agreed. In 2017, a patrol vessel (cutter) of the United States Coast Guard was presented to Vietnam for the first time, and the following year, the USS Carl Vinson was the first American aircraft carrier to enter harbour in Da Nang for a port call; it was at this port city where the first US marines landed in 1965.
Over the past few years, relations have continually and substantially developed in many other relevant areas, too. Therefore, the US has long since risen to become Vietnam’s second most important partner. When it comes to issues of maritime security and the South China Sea (in Vietnam: Biển Đông, translated: East Sea), Washington is in fact the most important partner, given that they feel increasingly challenged by their heavyweight neighbour to the North. A commitment to the rules-based international order is the key link connecting American-Vietnamese strategic relationships.
Semantic Consideration
A semantic upgrading of the “comprehensive partnership” to a “strategic partnership” also failed to come to fruition during the most recent visit of the US Vice President Kamala Harris. The state media in Vietnam deliberately avoided the adjective “strategic” as far as possible, however emphasis was placed on the meaning and importance of the relations. Thus, State President Nguyễn Xuân Phúc described the United States as “a leading and important partner in foreign policy” and the central organ of the CPV on the occasion of Harris’ visit. The propaganda newspaper “The People” (Nhân Dân), wrote the same on 25 August:
“Vietnam invariably considers the United States to be one of the leading important partners and would like to continue to promote relations between Vietnam and the US, so that these relations substantially and effectively develop into a deep, long-term stability, and contribute towards building and strengthening trust, thereby creating a foundation for active exchange between both sides, and to reinforce and improve the efficiency of cooperation in future.”
At the same time, bolder tones were stuck at the lower media level. For instance, on 24 August VietNamNet (a news site under the control of the Ministry for Information and Communication) and Vietnam Investment Review (edited by the Ministry for Planning and Investments) published an interview with the former Vietnamese Ambassador to Washington, Phạm Quang Vinh, in which the necessity of upgrading the relationship semantically was expressed. Ambassador Vinh pointed out that the partnership is already both “comprehensive and strategic”.
In a press conference on 26 August with selected journalists, a question was authorised from the party’s youth newspaper, Tuổi Trẻ, to Vice President Harris, which explicitly enquired about the prospect of a “strategic partnership”. Harris responded with diplomacy, aware of Vietnamese sensitivities, and spoke of “understanding” as the basis for relations and a “strategic strengthening” of bilateral ties.
The fact that Hanoi does not (yet) promote a formal upgrading of the partnership with the United States is due to a consideration for sensitivities of the heavyweight neighbour in the North. There is no desire to unnecessarily anger China under any circumstances, especially as relations, also in the South China Sea, do not seem very stable at present. Likewise, the discussion of a “strategic partnership” in secondary media illustrates that this option will definitely be on the table in future if relations were to deteriorate and Beijing crosses a red line. They are showing how Hanoi also has other irons in the fire. President Phúc – also on behalf of General Secretary Trọng – extended an invitation to US President Biden to Vietnam during Harris’ visit.
Cornerstones of Vietnam’s Foreign Policy
Already at the outset of Harris’ arrival, a spokesperson for the Vietnamese government had indicated the constants of Vietnamese foreign policy, and made it clear that a semantic upgrading of Vietnamese-US relations is not to be expected at this time:
“Vietnam pursues a consistent foreign policy of independence, autonomy, multilateralism and diversification; to facilitate the deepening, efficiency, and sustainability of relations with partner countries, especially key partners. Vietnam does not ally with one country against another.”
However, that there is certainly room for manoeuvre regarding the constants, is proven by Vietnam’s Defence White Paper which was published in late 2019. This paper corroborated the “four nos”: No military alliances at the expense of third parties; no foreign military bases in Vietnam; and no force or threat of force in international relations. While at the same time it explicitly indicated that defence policy relations should be reinforced in order to enhance capacities for defending sovereignty and for resolving joint security challenges. The recipients are also likely to have understood this reference.
A significant departure from the cornerstones of its foreign policy would be risky for Vietnam, however, especially since there has (so far) been too little pressure to adapt.
The diversification and balancing of its relationship have proven a good strategy to date. It is less due to a Taoist aspiration of harmony, than to the geostrategic situation (and vulnerability), which is why a diversification of foreign relations is pursued, while maintaining good and, above all, well-balanced partnerships with all regions and superpowers. Hanoi is not ready for a unilateral shift towards the US, particularly in geopolitical competition between authoritarianism and democracy, as US President Biden characterised as a conflict of systems. So far, they have wanted to avoid choosing sides.
Outcomes of Harris’ Visit
Even if the visit of the US Vice President Kamala Harris in Hanoi does not result in upgrading the “comprehensive” partnership in to a “strategic one”, the recent agreements contribute towards a further substantial deepening of strategic relations between the US and Vietnam.
According to the current needs and priorities of Vietnam, which was strongly impacted by the COVID-19 pandemic in the course of the spread of the Delta variant, Harris’ visit is connected with the American announcement to supply over one million vaccine doses of the German-American vaccine BioNTech-Pfizer, in addition to the five million Moderna vaccine doses already provided through the COVAX international vaccine alliance. Much publicity surrounded Harris’ receipt of a partial delivery of vaccines and its presentation to the Vietnamese partners during her stay. In doing so, the US are spearheading vaccination diplomacy in Vietnam. That did not go unnoticed in Beijing either and thus shortly before the arrival of Harris the Chinese Ambassador pledged the delivery of two million Chinese vaccine doses at a meeting with the Vietnamese head of government, Prime Minister Phạm Minh Chính.
Besides supplying vaccines, Harris also pledged to increase financial aid for combating the pandemic in Vietnam. The opening of the Southeast Asian regional office of the U.S. Centers for Disease Control and Prevention (CDC) in Hanoi, also reinforced a long-term commitment to Vietnam and the region. Likewise, it was the signing of a 99-year lease agreement for a US embassy building to be newly erected, as well as – following 17 years of tough negotiations – the establishment of the Peace Corps, that strengthened the symbolism of America’s stronger, sustainable commitment to Vietnam. Further agreements were entered into during her visit with the aim of combating global climate change and its ramifications, as well as on the resilience of supply chains.
However, the statements on cooperation in maritime security are likely to attract the greatest interest: They made a joint commitment to high-level security cooperation, agreed to further port visits by American warships – including aircraft carriers – and announced, subject to US Congress approval, the supply of a (third) patrol vessel (cutter) for the Vietnamese Coast Guard.
The fact that bilateral relations between the United States and the one-party state do not represent a partnership of values, but instead are based on Realpolitik and an alignment of interests, became clear with Harris’ meeting with civil society representatives of Vietnam. Unlike during the visit by Barack Obama, which also included a meeting with activists for freedom of the press and expression, they did not want to risk any resentment by subjecting the domestic policy situation to various appraisals. Thus, selected civil society interlocutors are involved with less sensitive areas such as LGBTQ or advocate for the needs of disabled persons.
The fact that the US has imposed a certain self-restraint on the topic of civil society in Vietnam, demonstrates how characterising geopolitical competition as a values-based conflict of systems in Vietnam (and Southeast Asia on the whole), is only partially applicable. The strategic relations between Hanoi and Washington will decisively shape the geopolitical dynamic in South-East Asia beyond semantic issues over the coming years.
Topics
Doubling Down, not Backing Down
Bundestag election 2025: France hopes for policy change in Germany
The Value of Global Health
No clear winner in the parliamentary elections in Kosovo: Forming a government will be complicated
Canada faces the threat of a trade war with the U.S. in this election year!