Improve ORCID testing via mock response

This commit is contained in:
Andrea Bollini
2020-11-05 22:10:29 +01:00
parent e6000f6e5e
commit a8aab9d88b
8 changed files with 364 additions and 54 deletions

View File

@@ -29,8 +29,6 @@ env:
before_install:
# Remove outdated settings.xml from Travis builds. Workaround for https://github.com/travis-ci/travis-ci/issues/4629
- sed -i 's/^orcid\.clientid.*/orcid.clientid='$ORCID_CLIENTID'/g' dspace-api/src/test/data/dspaceFolder/config/local.cfg
- sed -i 's/^orcid\.clientsecret.*/orcid.clientsecret='$ORCID_CLIENTSECRET'/g' dspace-api/src/test/data/dspaceFolder/config/local.cfg
- rm ~/.m2/settings.xml
# Create two jobs to run Unit & Integration tests in parallel.
# These jobs only differ in the TEST_FLAGS defined below,

View File

@@ -7,7 +7,6 @@
*/
package org.dspace.external;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
@@ -16,7 +15,6 @@ import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.Logger;
/**
@@ -56,14 +54,6 @@ public class OrcidRestConnector {
result = getResponse.getEntity().getContent();
} catch (Exception e) {
getGotError(e, fullPath);
} finally {
if (getResponse != null) {
try {
EntityUtils.consume(getResponse.getEntity());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
return result;

View File

@@ -17,7 +17,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
@@ -61,16 +60,15 @@ public class OrcidV3AuthorDataProvider implements ExternalDataProvider {
public static final String ORCID_ID_SYNTAX = "\\d{4}-\\d{4}-\\d{4}-(\\d{3}X|\\d{4})";
@PostConstruct
private void setup() {
this.converter = new XMLtoBio();
}
@Override
public String getSourceIdentifier() {
return sourceIdentifier;
}
public OrcidV3AuthorDataProvider() {
converter = new XMLtoBio();
}
/**
* Initialize the accessToken that is required for all subsequent calls to ORCID.
*
@@ -285,11 +283,4 @@ public class OrcidV3AuthorDataProvider implements ExternalDataProvider {
this.orcidRestConnector = orcidRestConnector;
}
public XMLtoBio getConverter() {
return converter;
}
public void setConverter(XMLtoBio converter) {
this.converter = converter;
}
}

View File

@@ -126,9 +126,6 @@ configuration.not.exposed = secret_value
configuration.exposed.single.value = public_value
configuration.exposed.array.value = public_value_1, public_value_2
orcid.clientid =
orcid.clientsecret =
# Test config for the authentication ip functionality
authentication-ip.Staff = 5.5.5.5
authentication-ip.Student = 6.6.6.6

View File

@@ -14,19 +14,20 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.io.InputStream;
import org.apache.commons.lang3.StringUtils;
import org.dspace.app.rest.test.AbstractControllerIntegrationTest;
import org.dspace.external.OrcidRestConnector;
import org.dspace.external.provider.impl.OrcidV3AuthorDataProvider;
import org.dspace.external.provider.orcid.xml.XMLtoBio;
import org.dspace.services.ConfigurationService;
import org.hamcrest.Matchers;
import org.junit.Assume;
import org.junit.Test;
import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
import org.orcid.jaxb.model.record_v3.NameType;
import org.orcid.jaxb.model.record_v3.NameType.FamilyName;
import org.orcid.jaxb.model.record_v3.Person;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.beans.factory.annotation.Autowired;
/**
@@ -52,7 +53,6 @@ public class OrcidExternalSourcesIT extends AbstractControllerIntegrationTest {
@Test
public void findOneExternalSourcesExistingSources() throws Exception {
onlyRunIfConfigExists();
getClient().perform(get("/api/integration/externalsources/orcid"))
.andExpect(status().isOk())
.andExpect(jsonPath("$", Matchers.allOf(
@@ -65,6 +65,7 @@ public class OrcidExternalSourcesIT extends AbstractControllerIntegrationTest {
@Test
public void findOneExternalSourcesExistingSourcesWithentryValueTest() throws Exception {
// this test will query the real ORCID API if configured in the CI otherwise will be skipped
onlyRunIfConfigExists();
String entry = "0000-0002-9029-1854";
getClient().perform(get("/api/integration/externalsources/orcid/entryValues/" + entry))
@@ -83,7 +84,8 @@ public class OrcidExternalSourcesIT extends AbstractControllerIntegrationTest {
}
@Test
public void findOneExternalSourceEntriesApplicableQuery() throws Exception {
public void findOneExternalSourceEntriesApplicableQueryTest() throws Exception {
// this test will query the real ORCID API if configured in the CI otherwise will be skipped
onlyRunIfConfigExists();
String q = "orcid:0000-0002-9029-1854";
getClient().perform(get("/api/integration/externalsources/orcid/entries")
@@ -108,17 +110,19 @@ public class OrcidExternalSourcesIT extends AbstractControllerIntegrationTest {
@Test
public void findOneExternalSourceEntriesApplicableQueryFamilyNameAndGivenNamesTest() throws Exception {
// this test will query the real ORCID API if configured in the CI otherwise will be skipped
onlyRunIfConfigExists();
String q = "family-name:bollini AND given-names:andrea";
getClient().perform(get("/api/integration/externalsources/orcid/entries")
.param("query", q))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.externalSourceEntries[0]", Matchers.allOf(
hasJsonPath("$.id", is("0000-0002-9029-1854")),
hasJsonPath("$.display", is("Bollini, Andrea")),
hasJsonPath("$.value", is("Bollini, Andrea")),
hasJsonPath("$.externalSource", is("orcid")),
hasJsonPath("$.type", is("externalSourceEntry"))
.andExpect(jsonPath("$._embedded.externalSourceEntries", Matchers.hasItem(
Matchers.allOf(
hasJsonPath("$.id", is("0000-0002-9029-1854")),
hasJsonPath("$.display", is("Bollini, Andrea")),
hasJsonPath("$.value", is("Bollini, Andrea")),
hasJsonPath("$.externalSource", is("orcid")),
hasJsonPath("$.type", is("externalSourceEntry")))
)))
.andExpect(jsonPath("$._embedded.externalSourceEntries[0].metadata['dc.identifier.uri'][0].value",
is("https://orcid.org/0000-0002-9029-1854")))
@@ -132,21 +136,17 @@ public class OrcidExternalSourcesIT extends AbstractControllerIntegrationTest {
@Test
public void findOneExternalSourcesMockitoTest() throws Exception {
XMLtoBio converter = Mockito.mock(XMLtoBio.class);
orcidV3AuthorDataProvider.setConverter(converter);
OrcidRestConnector orcidConnector = Mockito.mock(OrcidRestConnector.class);
OrcidRestConnector realConnector = orcidV3AuthorDataProvider.getOrcidRestConnector();
orcidV3AuthorDataProvider.setOrcidRestConnector(orcidConnector);
when(orcidConnector.get(ArgumentMatchers.endsWith("/person"), ArgumentMatchers.any()))
.thenAnswer(new Answer<InputStream>() {
public InputStream answer(InvocationOnMock invocation) {
return getClass().getResourceAsStream("orcid-person-record.xml");
}
});
String entry = "0000-0002-9029-1854";
NameType name = new NameType();
name.setFamilyName(new FamilyName("Bollini, Andrea"));
Person person = new Person();
person.setName(name);
name.setPath(entry);
when(converter.convertSinglePerson(ArgumentMatchers.any())).thenReturn(person);
getClient().perform(get("/api/integration/externalsources/orcid/entryValues/" + entry))
.andExpect(status().isOk())
.andExpect(jsonPath("$", Matchers.allOf(
@@ -157,6 +157,94 @@ public class OrcidExternalSourcesIT extends AbstractControllerIntegrationTest {
hasJsonPath("$.type", is("externalSourceEntry"))
)));
orcidV3AuthorDataProvider.setConverter(new XMLtoBio());
orcidV3AuthorDataProvider.setOrcidRestConnector(realConnector);
}
@Test
public void findOneExternalSourceEntriesApplicableQueryMockitoTest() throws Exception {
OrcidRestConnector orcidConnector = Mockito.mock(OrcidRestConnector.class);
OrcidRestConnector realConnector = orcidV3AuthorDataProvider.getOrcidRestConnector();
orcidV3AuthorDataProvider.setOrcidRestConnector(orcidConnector);
try {
when(orcidConnector.get(ArgumentMatchers.startsWith("search?"), ArgumentMatchers.any()))
.thenAnswer(new Answer<InputStream>() {
public InputStream answer(InvocationOnMock invocation) {
return getClass().getResourceAsStream("orcid-search.xml");
}
});
when(orcidConnector.get(ArgumentMatchers.endsWith("/person"), ArgumentMatchers.any()))
.thenAnswer(new Answer<InputStream>() {
public InputStream answer(InvocationOnMock invocation) {
return getClass().getResourceAsStream("orcid-person-record.xml");
}
});
String q = "orcid:0000-0002-9029-1854";
getClient().perform(get("/api/integration/externalsources/orcid/entries")
.param("query", q))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.externalSourceEntries[0]", Matchers.allOf(
hasJsonPath("$.id", is("0000-0002-9029-1854")),
hasJsonPath("$.display", is("Bollini, Andrea")),
hasJsonPath("$.value", is("Bollini, Andrea")),
hasJsonPath("$.externalSource", is("orcid")),
hasJsonPath("$.type", is("externalSourceEntry"))
)))
.andExpect(jsonPath("$._embedded.externalSourceEntries[0].metadata['dc.identifier.uri'][0].value",
is("https://orcid.org/0000-0002-9029-1854")))
.andExpect(jsonPath("$._embedded.externalSourceEntries[0].metadata['person.familyName'][0].value",
is("Bollini")))
.andExpect(jsonPath("$._embedded.externalSourceEntries[0].metadata['person.givenName'][0].value",
is("Andrea")))
.andExpect(jsonPath(
"$._embedded.externalSourceEntries[0].metadata['person.identifier.orcid'][0].value",
is("0000-0002-9029-1854")));
} finally {
orcidV3AuthorDataProvider.setOrcidRestConnector(realConnector);
}
}
@Test
public void findOneExternalSourceEntriesApplicableQueryFamilyNameAndGivenNamesMockitoTest() throws Exception {
OrcidRestConnector orcidConnector = Mockito.mock(OrcidRestConnector.class);
OrcidRestConnector realConnector = orcidV3AuthorDataProvider.getOrcidRestConnector();
orcidV3AuthorDataProvider.setOrcidRestConnector(orcidConnector);
try {
when(orcidConnector.get(ArgumentMatchers.startsWith("search?"), ArgumentMatchers.any()))
.thenAnswer(new Answer<InputStream>() {
public InputStream answer(InvocationOnMock invocation) {
return getClass().getResourceAsStream("orcid-search.xml");
}
});
when(orcidConnector.get(ArgumentMatchers.endsWith("/person"), ArgumentMatchers.any()))
.thenAnswer(new Answer<InputStream>() {
public InputStream answer(InvocationOnMock invocation) {
return getClass().getResourceAsStream("orcid-person-record.xml");
}
});
String q = "family-name:bollini AND given-names:andrea";
getClient().perform(get("/api/integration/externalsources/orcid/entries")
.param("query", q))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.externalSourceEntries", Matchers.hasItem(
Matchers.allOf(
hasJsonPath("$.id", is("0000-0002-9029-1854")),
hasJsonPath("$.display", is("Bollini, Andrea")),
hasJsonPath("$.value", is("Bollini, Andrea")),
hasJsonPath("$.externalSource", is("orcid")),
hasJsonPath("$.type", is("externalSourceEntry")))
)))
.andExpect(jsonPath("$._embedded.externalSourceEntries[0].metadata['dc.identifier.uri'][0].value",
is("https://orcid.org/0000-0002-9029-1854")))
.andExpect(jsonPath("$._embedded.externalSourceEntries[0].metadata['person.familyName'][0].value",
is("Bollini")))
.andExpect(jsonPath("$._embedded.externalSourceEntries[0].metadata['person.givenName'][0].value",
is("Andrea")))
.andExpect(jsonPath(
"$._embedded.externalSourceEntries[0].metadata['person.identifier.orcid'][0].value",
is("0000-0002-9029-1854")));
} finally {
orcidV3AuthorDataProvider.setOrcidRestConnector(realConnector);
}
}
}

View File

@@ -0,0 +1,234 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person:person path="/0000-0002-9029-1854/person" xmlns:internal="http://www.orcid.org/ns/internal" xmlns:education="http://www.orcid.org/ns/education" xmlns:distinction="http://www.orcid.org/ns/distinction" xmlns:deprecated="http://www.orcid.org/ns/deprecated" xmlns:other-name="http://www.orcid.org/ns/other-name" xmlns:membership="http://www.orcid.org/ns/membership" xmlns:error="http://www.orcid.org/ns/error" xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record" xmlns:personal-details="http://www.orcid.org/ns/personal-details" xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:email="http://www.orcid.org/ns/email" xmlns:external-identifier="http://www.orcid.org/ns/external-identifier" xmlns:funding="http://www.orcid.org/ns/funding" xmlns:preferences="http://www.orcid.org/ns/preferences" xmlns:address="http://www.orcid.org/ns/address" xmlns:invited-position="http://www.orcid.org/ns/invited-position" xmlns:work="http://www.orcid.org/ns/work" xmlns:history="http://www.orcid.org/ns/history" xmlns:employment="http://www.orcid.org/ns/employment" xmlns:qualification="http://www.orcid.org/ns/qualification" xmlns:service="http://www.orcid.org/ns/service" xmlns:person="http://www.orcid.org/ns/person" xmlns:activities="http://www.orcid.org/ns/activities" xmlns:researcher-url="http://www.orcid.org/ns/researcher-url" xmlns:peer-review="http://www.orcid.org/ns/peer-review" xmlns:bulk="http://www.orcid.org/ns/bulk" xmlns:research-resource="http://www.orcid.org/ns/research-resource">
<common:last-modified-date>2018-02-05T23:27:36.636Z</common:last-modified-date>
<person:name visibility="public" path="0000-0002-9029-1854">
<common:created-date>2016-04-15T23:17:03.663Z</common:created-date>
<common:last-modified-date>2016-04-15T23:17:03.663Z</common:last-modified-date>
<personal-details:given-names>Andrea</personal-details:given-names>
<personal-details:family-name>Bollini</personal-details:family-name>
</person:name>
<other-name:other-names path="/0000-0002-9029-1854/other-names"/>
<researcher-url:researcher-urls path="/0000-0002-9029-1854/researcher-urls">
<common:last-modified-date>2017-07-18T15:10:48.940Z</common:last-modified-date>
<researcher-url:researcher-url put-code="1005571" visibility="public" path="/0000-0002-9029-1854/researcher-urls/1005571" display-index="5">
<common:created-date>2017-01-16T08:12:12.946Z</common:created-date>
<common:last-modified-date>2017-07-18T15:10:48.940Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<researcher-url:url-name>Linkedin</researcher-url:url-name>
<researcher-url:url>https://it.linkedin.com/in/andreabollini</researcher-url:url>
</researcher-url:researcher-url>
<researcher-url:researcher-url put-code="369007" visibility="public" path="/0000-0002-9029-1854/researcher-urls/369007" display-index="4">
<common:created-date>2014-11-06T10:37:30.383Z</common:created-date>
<common:last-modified-date>2017-07-18T15:10:48.940Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<researcher-url:url-name>4Science</researcher-url:url-name>
<researcher-url:url>http://www.4science.it/en/</researcher-url:url>
</researcher-url:researcher-url>
<researcher-url:researcher-url put-code="369009" visibility="public" path="/0000-0002-9029-1854/researcher-urls/369009" display-index="3">
<common:created-date>2014-11-06T10:37:30.412Z</common:created-date>
<common:last-modified-date>2017-07-18T15:10:48.940Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<researcher-url:url-name>DSpace</researcher-url:url-name>
<researcher-url:url>http://www.dspace.org</researcher-url:url>
</researcher-url:researcher-url>
<researcher-url:researcher-url put-code="369008" visibility="public" path="/0000-0002-9029-1854/researcher-urls/369008" display-index="2">
<common:created-date>2014-11-06T10:37:30.398Z</common:created-date>
<common:last-modified-date>2017-07-18T15:10:48.940Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<researcher-url:url-name>DSpace-CRIS</researcher-url:url-name>
<researcher-url:url>https://wiki.duraspace.org/display/DSPACECRIS</researcher-url:url>
</researcher-url:researcher-url>
</researcher-url:researcher-urls>
<email:emails path="/0000-0002-9029-1854/email">
<common:last-modified-date>2016-09-12T11:22:47.354Z</common:last-modified-date>
<email:email visibility="public" verified="true" primary="true">
<common:created-date>2016-09-12T10:45:26.123Z</common:created-date>
<common:last-modified-date>2016-09-12T11:22:47.354Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<email:email>andrea.bollini@4science.it</email:email>
</email:email>
</email:emails>
<address:addresses path="/0000-0002-9029-1854/address">
<common:last-modified-date>2016-06-06T15:29:36.952Z</common:last-modified-date>
<address:address put-code="240615" visibility="public" path="/0000-0002-9029-1854/address/240615" display-index="0">
<common:created-date>2016-01-24T18:24:26.704Z</common:created-date>
<common:last-modified-date>2016-06-06T15:29:36.952Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<address:country>IT</address:country>
</address:address>
</address:addresses>
<keyword:keywords path="/0000-0002-9029-1854/keywords">
<common:last-modified-date>2016-03-01T11:03:22.508Z</common:last-modified-date>
<keyword:keyword put-code="7508" visibility="public" path="/0000-0002-9029-1854/keywords/7508" display-index="3">
<common:created-date>2013-05-30T10:55:45.614Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.508Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content>Software</keyword:content>
</keyword:keyword>
<keyword:keyword put-code="7509" visibility="public" path="/0000-0002-9029-1854/keywords/7509" display-index="2">
<common:created-date>2013-05-30T10:55:45.614Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.508Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content> Open Source</keyword:content>
</keyword:keyword>
<keyword:keyword put-code="12596" visibility="public" path="/0000-0002-9029-1854/keywords/12596" display-index="1">
<common:created-date>2013-05-30T10:55:45.614Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.508Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content> JAVA</keyword:content>
</keyword:keyword>
<keyword:keyword put-code="381655" visibility="public" path="/0000-0002-9029-1854/keywords/381655" display-index="0">
<common:created-date>2016-03-01T11:03:22.491Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.491Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content>CERIF</keyword:content>
</keyword:keyword>
<keyword:keyword put-code="381656" visibility="public" path="/0000-0002-9029-1854/keywords/381656" display-index="0">
<common:created-date>2016-03-01T11:03:22.502Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.502Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content>CRIS</keyword:content>
</keyword:keyword>
<keyword:keyword put-code="381657" visibility="public" path="/0000-0002-9029-1854/keywords/381657" display-index="0">
<common:created-date>2016-03-01T11:03:22.503Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.503Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content>RIMS</keyword:content>
</keyword:keyword>
<keyword:keyword put-code="381658" visibility="public" path="/0000-0002-9029-1854/keywords/381658" display-index="0">
<common:created-date>2016-03-01T11:03:22.504Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.504Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content>Open Standards</keyword:content>
</keyword:keyword>
<keyword:keyword put-code="381659" visibility="public" path="/0000-0002-9029-1854/keywords/381659" display-index="0">
<common:created-date>2016-03-01T11:03:22.505Z</common:created-date>
<common:last-modified-date>2016-03-01T11:03:22.505Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:source-orcid>
<common:source-name>Andrea Bollini</common:source-name>
</common:source>
<keyword:content>OAI-PMH</keyword:content>
</keyword:keyword>
</keyword:keywords>
<external-identifier:external-identifiers path="/0000-0002-9029-1854/external-identifiers">
<common:last-modified-date>2018-02-05T23:27:36.636Z</common:last-modified-date>
<external-identifier:external-identifier put-code="153301" visibility="public" path="/0000-0002-9029-1854/external-identifiers/153301" display-index="0">
<common:created-date>2013-05-30T10:55:45.614Z</common:created-date>
<common:last-modified-date>2018-02-05T23:27:36.636Z</common:last-modified-date>
<common:source>
<common:source-client-id>
<common:uri>https://orcid.org/client/0000-0002-5982-8983</common:uri>
<common:path>0000-0002-5982-8983</common:path>
<common:host>orcid.org</common:host>
</common:source-client-id>
<common:source-name>Scopus - Elsevier</common:source-name>
<common:assertion-origin-orcid>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:assertion-origin-orcid>
<common:assertion-origin-name>Andrea Bollini</common:assertion-origin-name>
</common:source>
<common:external-id-type>Scopus Author ID</common:external-id-type>
<common:external-id-value>55484808800</common:external-id-value>
<common:external-id-url>http://www.scopus.com/inward/authorDetails.url?authorID=55484808800&amp;partnerID=MN8TOARS</common:external-id-url>
<common:external-id-relationship>self</common:external-id-relationship>
</external-identifier:external-identifier>
</external-identifier:external-identifiers>
</person:person>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<search:search num-found="1" xmlns:search="http://www.orcid.org/ns/search" xmlns:common="http://www.orcid.org/ns/common">
<search:result>
<common:orcid-identifier>
<common:uri>https://orcid.org/0000-0002-9029-1854</common:uri>
<common:path>0000-0002-9029-1854</common:path>
<common:host>orcid.org</common:host>
</common:orcid-identifier>
</search:result>
</search:search>

View File

@@ -1478,6 +1478,8 @@ orcid.api.url = https://pub.orcid.org/v3.0
orcid.url = https://orcid.org/
# ORCID Credentials
# Your public or member API Credentials, see
# https://orcid.org/content/register-client-application-0
orcid.clientid =
orcid.clientsecret =