From e77232e7fa16a72d263d8605375685dcb4bb08c5 Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Fri, 21 Jun 2019 16:24:41 +0900 Subject: [PATCH 01/12] for v1.7.16 --- pom.xml | 2 +- src/main/resources/personium-unit-config-default.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3a5d4475c..0a1fb7ae5 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.personium personium-core war - 1.7.15_es6.6.1 + 1.7.16_es6.6.1-SNAPSHOT personium-core Maven Webapp http://maven.apache.org diff --git a/src/main/resources/personium-unit-config-default.properties b/src/main/resources/personium-unit-config-default.properties index e48b39444..506eef17f 100644 --- a/src/main/resources/personium-unit-config-default.properties +++ b/src/main/resources/personium-unit-config-default.properties @@ -23,7 +23,7 @@ ################################################# # core version -io.personium.core.version=1.7.15 +io.personium.core.version=1.7.16 # thread pool num. io.personium.core.thread.pool.num.io.cell=10 From 19ba2b67d61c58359f51050ca4661e52c31b7533 Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Tue, 23 Jul 2019 13:39:15 +0900 Subject: [PATCH 02/12] Modify crossdomain.xml dtd URL Fix #444 --- src/main/resources/crossdomain.xml | 2 +- src/test/java/io/personium/test/jersey/CrossDomainTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/crossdomain.xml b/src/main/resources/crossdomain.xml index 71d710939..056484ddd 100644 --- a/src/main/resources/crossdomain.xml +++ b/src/main/resources/crossdomain.xml @@ -18,7 +18,7 @@ --> - + diff --git a/src/test/java/io/personium/test/jersey/CrossDomainTest.java b/src/test/java/io/personium/test/jersey/CrossDomainTest.java index f021cb840..f4584c07e 100644 --- a/src/test/java/io/personium/test/jersey/CrossDomainTest.java +++ b/src/test/java/io/personium/test/jersey/CrossDomainTest.java @@ -50,7 +50,7 @@ public class CrossDomainTest extends PersoniumTest { static final String TEST_CELL1 = "testcell1"; static final String ODATA_COL = "odatacol"; static final String CROSSDOMAIN_XML = "" - + "" + + "" + " " + " " + " " From 10915f43f87eee0d7b725b8e87adcc4b5e2fdd05 Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Tue, 23 Jul 2019 13:52:44 +0900 Subject: [PATCH 03/12] Modify indents --- src/main/resources/crossdomain.xml | 2 +- src/test/java/io/personium/test/jersey/CrossDomainTest.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/crossdomain.xml b/src/main/resources/crossdomain.xml index 056484ddd..4d34f6c0e 100644 --- a/src/main/resources/crossdomain.xml +++ b/src/main/resources/crossdomain.xml @@ -20,7 +20,7 @@ - + diff --git a/src/test/java/io/personium/test/jersey/CrossDomainTest.java b/src/test/java/io/personium/test/jersey/CrossDomainTest.java index f4584c07e..ef16e0e31 100644 --- a/src/test/java/io/personium/test/jersey/CrossDomainTest.java +++ b/src/test/java/io/personium/test/jersey/CrossDomainTest.java @@ -51,9 +51,9 @@ public class CrossDomainTest extends PersoniumTest { static final String ODATA_COL = "odatacol"; static final String CROSSDOMAIN_XML = "" + "" - + " " - + " " - + " " + + "" + + " " + + " " + " " + ""; From de1398424856e6419a2c0f56bbed8800a53309ff Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Wed, 24 Jul 2019 18:51:36 +0900 Subject: [PATCH 04/12] Fix Content-Type check Fix #435 --- .../core/rs/odata/AbstractODataResource.java | 33 +++++++------------ .../core/rs/odata/DecideOutputFormatTest.java | 23 ++++++++----- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java index 0055c9557..879c463a2 100644 --- a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java +++ b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java @@ -26,10 +26,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.StringTokenizer; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Stream; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -191,21 +191,16 @@ private MediaType decideOutputFormatFromQueryValue(String format) { * @return output format ("application / json" or "application / atom + xml") */ private MediaType decideOutputFormatFromHeaderValues(String acceptHeaderValue) { - MediaType mediaType = null; - StringTokenizer st = new StringTokenizer(acceptHeaderValue, ","); - while (st.hasMoreTokens()) { - String accept = truncateAfterSemicolon(st.nextToken()); - if (isAcceptXml(accept)) { - mediaType = MediaType.APPLICATION_ATOM_XML_TYPE; - } else if (isAcceptJson(accept)) { - if (mediaType == null) { - mediaType = MediaType.APPLICATION_JSON_TYPE; - } - } else { - throw PersoniumCoreException.OData.UNSUPPORTED_MEDIA_TYPE.params(acceptHeaderValue); - } + String[] types = Stream.of(acceptHeaderValue.split(",")) + .map(this::truncateAfterSemicolon) + .toArray(String[]::new); + if (Stream.of(types).anyMatch(this::isAcceptXml)) { + return MediaType.APPLICATION_ATOM_XML_TYPE; + } else if (Stream.of(types).anyMatch(this::isAcceptJson)) { + return MediaType.APPLICATION_JSON_TYPE; + } else { + throw PersoniumCoreException.OData.UNSUPPORTED_MEDIA_TYPE.params(acceptHeaderValue); } - return mediaType; } /** @@ -214,12 +209,8 @@ private MediaType decideOutputFormatFromHeaderValues(String acceptHeaderValue) { * @return String up to semicolon */ private String truncateAfterSemicolon(String source) { - String result = source; - int index = source.indexOf(";"); - if (index >= 0) { - result = source.substring(0, index); - } - return result; + String[] splited = source.split(";"); + return splited[0]; } private boolean isAcceptXml(String accept) { diff --git a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java index 679e37a5a..564d948f5 100644 --- a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java +++ b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java @@ -157,18 +157,23 @@ public class DecideOutputFormatTest { * format指定なしでacceptにxmlと未サポートの値を指定した場合415エラーが返却されること. */ @Test - public final void format指定なしでacceptにxmlと未サポートの値を指定した場合415エラーが返却されること() { + public final void format指定なしでacceptにxmlと未サポートの値を指定した場合xmlが返却されること() { ODataEntityResource odataEntityResource = new ODataEntityResource(); - try { - odataEntityResource.decideOutputFormat( + MediaType type = odataEntityResource.decideOutputFormat( MediaType.APPLICATION_ATOM_XML + "," + "INVALID_VALUE", null); - fail(); - } catch (PersoniumCoreException e) { - assertEquals("PR415-OD-0001", e.getCode()); - } catch (Exception e) { - fail(); - } + assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); + } + + /** + * format指定なしでacceptにjsonとtext/plainと*を指定した場合jsonが返却されること. + */ + @Test + public final void format指定なしでacceptにjsonとtextとアスタリスクを指定した場合xmlが返却されること() { + ODataEntityResource odataEntityResource = new ODataEntityResource(); + MediaType type = odataEntityResource.decideOutputFormat( + MediaType.APPLICATION_JSON + "," + MediaType.TEXT_PLAIN_TYPE + "," + MediaType.WILDCARD, null); + assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); } /** From 89c9520819eca88ccffd0b7cf30f61863a973e84 Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Thu, 25 Jul 2019 10:30:19 +0900 Subject: [PATCH 05/12] Modify content-type check --- .../personium/core/rs/odata/AbstractODataResource.java | 9 +++++++-- .../test/unit/core/rs/odata/DecideOutputFormatTest.java | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java index 879c463a2..0be636664 100644 --- a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java +++ b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java @@ -198,6 +198,8 @@ private MediaType decideOutputFormatFromHeaderValues(String acceptHeaderValue) { return MediaType.APPLICATION_ATOM_XML_TYPE; } else if (Stream.of(types).anyMatch(this::isAcceptJson)) { return MediaType.APPLICATION_JSON_TYPE; + } else if (Stream.of(types).anyMatch(this::isAcceptWildcard)) { + return MediaType.APPLICATION_ATOM_XML_TYPE; } else { throw PersoniumCoreException.OData.UNSUPPORTED_MEDIA_TYPE.params(acceptHeaderValue); } @@ -215,14 +217,17 @@ private String truncateAfterSemicolon(String source) { private boolean isAcceptXml(String accept) { return accept.equals(MediaType.APPLICATION_ATOM_XML) - || accept.equals(MediaType.APPLICATION_XML) - || accept.equals(MediaType.WILDCARD); + || accept.equals(MediaType.APPLICATION_XML); } private boolean isAcceptJson(String accept) { return accept.equals(MediaType.APPLICATION_JSON); } + private boolean isAcceptWildcard(String accept) { + return accept.equals(MediaType.WILDCARD); + } + /** * Ask Producer to create Entity. * @param reader request body diff --git a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java index 564d948f5..46eb7601c 100644 --- a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java +++ b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java @@ -169,11 +169,11 @@ public class DecideOutputFormatTest { * format指定なしでacceptにjsonとtext/plainと*を指定した場合jsonが返却されること. */ @Test - public final void format指定なしでacceptにjsonとtextとアスタリスクを指定した場合xmlが返却されること() { + public final void format指定なしでacceptにjsonとtextとアスタリスクを指定した場合jsonが返却されること() { ODataEntityResource odataEntityResource = new ODataEntityResource(); MediaType type = odataEntityResource.decideOutputFormat( MediaType.APPLICATION_JSON + "," + MediaType.TEXT_PLAIN_TYPE + "," + MediaType.WILDCARD, null); - assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); + assertEquals(MediaType.APPLICATION_JSON_TYPE, type); } /** From 0f45cebbf1c6f073c3c112c6afc87cacee3d764b Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Thu, 25 Jul 2019 12:00:22 +0900 Subject: [PATCH 06/12] Fix getting snapshot list with depth 1 Fix #439 --- .../core/model/CellSnapshotCellRsCmp.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/io/personium/core/model/CellSnapshotCellRsCmp.java b/src/main/java/io/personium/core/model/CellSnapshotCellRsCmp.java index a0168338a..050feb188 100644 --- a/src/main/java/io/personium/core/model/CellSnapshotCellRsCmp.java +++ b/src/main/java/io/personium/core/model/CellSnapshotCellRsCmp.java @@ -16,6 +16,12 @@ */ package io.personium.core.model; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.wink.webdav.model.Propfind; + import io.personium.core.auth.AccessContext; /** @@ -49,4 +55,18 @@ public String getUrl() { } return cellUrl + "/" + SNAPSHOT_ENDPOINT; } + + /** + * {@inheritDoc} + */ + protected List createChildrenDavResponseList(String reqUri, + Propfind propfind, boolean canAclRead) { + List resList = new ArrayList<>(); + Map childrenMap = this.davCmp.getChildren(); + for (String childName : childrenMap.keySet()) { + DavCmp child = childrenMap.get(childName); + resList.add(createDavResponse(childName, reqUri + "/" + child.getName(), child, propfind, canAclRead)); + } + return resList; + } } From c97b132105c64b6aaa306f52d48ce1fd88b7b377 Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Thu, 25 Jul 2019 16:05:24 +0900 Subject: [PATCH 07/12] Support space and tab for Accept value --- .../core/rs/odata/AbstractODataResource.java | 4 +- .../core/rs/odata/DecideOutputFormatTest.java | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java index 0be636664..82dee0476 100644 --- a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java +++ b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java @@ -191,7 +191,7 @@ private MediaType decideOutputFormatFromQueryValue(String format) { * @return output format ("application / json" or "application / atom + xml") */ private MediaType decideOutputFormatFromHeaderValues(String acceptHeaderValue) { - String[] types = Stream.of(acceptHeaderValue.split(",")) + String[] types = Stream.of(acceptHeaderValue.split("[ \t]*,[ \t]*")) .map(this::truncateAfterSemicolon) .toArray(String[]::new); if (Stream.of(types).anyMatch(this::isAcceptXml)) { @@ -211,7 +211,7 @@ private MediaType decideOutputFormatFromHeaderValues(String acceptHeaderValue) { * @return String up to semicolon */ private String truncateAfterSemicolon(String source) { - String[] splited = source.split(";"); + String[] splited = source.split("[ \\t]*;", 2); return splited[0]; } diff --git a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java index 46eb7601c..43b8f2a5c 100644 --- a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java +++ b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java @@ -100,6 +100,30 @@ public class DecideOutputFormatTest { assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); } + /** + * format指定なしでacceptにJSONとATOM_XMLを空白ありで指定した場合XMLが返却されること. + */ + @Test + public final void format指定なしでacceptにJSONとATOM_XMLを空白ありで指定した場合XMLが返却されること() { + ODataEntityResource odataEntityResource = new ODataEntityResource(); + + MediaType type = odataEntityResource.decideOutputFormat( + MediaType.APPLICATION_JSON + " , " + MediaType.APPLICATION_ATOM_XML, null); + assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); + } + + /** + * format指定なしでacceptにJSONとATOM_XMLをタブありで指定した場合XMLが返却されること. + */ + @Test + public final void format指定なしでacceptにJSONとATOM_XMLをタブありで指定した場合XMLが返却されること() { + ODataEntityResource odataEntityResource = new ODataEntityResource(); + + MediaType type = odataEntityResource.decideOutputFormat( + MediaType.APPLICATION_JSON + "\t,\t" + MediaType.APPLICATION_ATOM_XML, null); + assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); + } + /** * acceptのセミコロン以降を無視すること. */ @@ -112,6 +136,30 @@ public class DecideOutputFormatTest { assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); } + /** + * acceptの空白とセミコロン以降を無視すること. + */ + @Test + public final void acceptの空白とセミコロン以降を無視すること() { + ODataEntityResource odataEntityResource = new ODataEntityResource(); + + MediaType type = odataEntityResource.decideOutputFormat( + "application/xml ;q=0.9,*/* ;q=0.8", null); + assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); + } + + /** + * acceptのタブとセミコロン以降を無視すること. + */ + @Test + public final void acceptのタブとセミコロン以降を無視すること() { + ODataEntityResource odataEntityResource = new ODataEntityResource(); + + MediaType type = odataEntityResource.decideOutputFormat( + "application/xml\t;q=0.9,*/\t;q=0.8", null); + assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); + } + /** * format指定なしでacceptに未サポートの値を指定した場合415エラーが返却されること. */ From e2fa14608417dd9c05d49f1b1048dbfc1441dbab Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Thu, 25 Jul 2019 16:56:47 +0900 Subject: [PATCH 08/12] Add comment about quality values --- .../java/io/personium/core/rs/odata/AbstractODataResource.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java index 82dee0476..5bf12e35d 100644 --- a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java +++ b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java @@ -147,7 +147,8 @@ public String getEntitySetName() { /** * Determine the ContentType to return. - * @param accept Content of the Accept header + * @param accept Content of the Accept header; + * Note that quality values like 'q=0.9' are ignored to determine. * @param format $ format parameter * @return Content-Type to return */ From b37c391dc16add87b24f5f34c3c395ce4c7d5743 Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Thu, 25 Jul 2019 17:05:58 +0900 Subject: [PATCH 09/12] Response XML when accept value is empty --- .../java/io/personium/core/rs/odata/AbstractODataResource.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java index 5bf12e35d..ca13b86a8 100644 --- a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java +++ b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java @@ -37,6 +37,7 @@ import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.UriInfo; +import org.apache.commons.lang.StringUtils; import org.apache.http.HttpStatus; import org.odata4j.core.NamedValue; import org.odata4j.core.NamespacedAnnotation; @@ -156,7 +157,7 @@ public final MediaType decideOutputFormat(final String accept, final String form MediaType mediaType = null; if (format != null) { mediaType = decideOutputFormatFromQueryValue(format); - } else if (accept != null) { + } else if (!StringUtils.isEmpty(accept)) { mediaType = decideOutputFormatFromHeaderValues(accept); } if (mediaType == null) { From 7b46609ff78446b805b8ba256d3d563c80122ca1 Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Thu, 25 Jul 2019 17:11:12 +0900 Subject: [PATCH 10/12] Fix --- .../java/io/personium/core/rs/odata/AbstractODataResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java index ca13b86a8..04dd4f55d 100644 --- a/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java +++ b/src/main/java/io/personium/core/rs/odata/AbstractODataResource.java @@ -213,7 +213,7 @@ private MediaType decideOutputFormatFromHeaderValues(String acceptHeaderValue) { * @return String up to semicolon */ private String truncateAfterSemicolon(String source) { - String[] splited = source.split("[ \\t]*;", 2); + String[] splited = source.split("[ \t]*;", 2); return splited[0]; } From de90c2644cd389c62d8dfa3c8261072fb44c4adc Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Thu, 25 Jul 2019 18:57:01 +0900 Subject: [PATCH 11/12] Release v1.7.16 --- CHANGELOG.md | 8 ++++++++ pom.xml | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9eb502aa7..35e39590a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.7.16 +BUG FIXES: +* Even if Depth:1 is specified in "Retrieve cell snapshot file setting" API, it is ignored. ([#439](https://github.com/personium/personium-core/issues/439)) +* If Accept request header contains extra values, 409 is returned ([#435](https://github.com/personium/personium-core/issues/435)) + +IMPROVEMENTS: +* Fix crossdomain.xml error in Eclipse. ([#448](https://github.com/personium/personium-core/issues/444)) + ## 1.7.15 BUG FIXES: * Implementation of log file deletion API([#270](https://github.com/personium/personium-core/issues/270)) diff --git a/pom.xml b/pom.xml index 0a1fb7ae5..f9c23ce4c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.personium personium-core war - 1.7.16_es6.6.1-SNAPSHOT + 1.7.16_es6.6.1 personium-core Maven Webapp http://maven.apache.org From d155f640cea261ecc425d09dcb6d171f2367822e Mon Sep 17 00:00:00 2001 From: "Tochiori, Yasufumi" Date: Fri, 26 Jul 2019 16:22:52 +0900 Subject: [PATCH 12/12] Fix a typo --- .../test/unit/core/rs/odata/DecideOutputFormatTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java index 43b8f2a5c..b55aedb34 100644 --- a/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java +++ b/src/test/java/io/personium/test/unit/core/rs/odata/DecideOutputFormatTest.java @@ -156,7 +156,7 @@ public class DecideOutputFormatTest { ODataEntityResource odataEntityResource = new ODataEntityResource(); MediaType type = odataEntityResource.decideOutputFormat( - "application/xml\t;q=0.9,*/\t;q=0.8", null); + "application/xml\t;q=0.9,*/*\t;q=0.8", null); assertEquals(MediaType.APPLICATION_ATOM_XML_TYPE, type); }