Genesys Backend issueshttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues2019-08-02T10:51:04+02:00https://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/458Requests for material without PID2019-08-02T10:51:04+02:00Matija ObrezaRequests for material without PIDGenesys now requires that all requests for material obtain the Easy-SMTA PID before relaying the request to the holding genebanks.
Requests for material can be "internal" (within the institute), meaning that no SMTA is required.
Add su...Genesys now requires that all requests for material obtain the Easy-SMTA PID before relaying the request to the holding genebanks.
Requests for material can be "internal" (within the institute), meaning that no SMTA is required.
Add support for **Internal requests** through Genesys; add an option "Internal request (no S/MTA required)" to Genesys and skip the Easy-SMTA checks that are currently required for the request to be relayed to the genebank.
2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/453Request failed when user try apply "Not specified" filter on the "Accession b...2019-07-14T21:12:35+02:00Kiril MorhalenkoRequest failed when user try apply "Not specified" filter on the "Accession browser" pageSteps to reproduce:
1. Open "https://sandbox.genesys-pgr.org/a/overview"
2. Apply "Not specified" filter from "Genus" block
Expected result:
Filter is applied and results are shown
Actual result:
> Error happened while processing requ...Steps to reproduce:
1. Open "https://sandbox.genesys-pgr.org/a/overview"
2. Apply "Not specified" filter from "Genus" block
Expected result:
Filter is applied and results are shown
Actual result:
> Error happened while processing request:
>
> "Request failed with status code 500 Error accessing field taxonomy.genus for isNull() in class org.genesys2.server.model.genesys.QAccession"
This bug reproduce with "Genys", "Type of Germplasm storage" and "Provenance of material" blocks
![Request_failed](/uploads/dfc0204d491abdbb29ca29a45790145c/Request_failed.gif)2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/452Descriptor image and language2019-06-18T08:13:31+02:00Matija ObrezaDescriptor image and languageAdd `private RepositoryImage image` and `@MaxLength(2) private String lang` to `Descriptor`. The image should be loaded in `lazyLoad(Descriptor)`.
Extend Descriptor API v1 with methods: `updateImage(Descriptor d, ...)` and `removeImage(...Add `private RepositoryImage image` and `@MaxLength(2) private String lang` to `Descriptor`. The image should be loaded in `lazyLoad(Descriptor)`.
Extend Descriptor API v1 with methods: `updateImage(Descriptor d, ...)` and `removeImage(Descriptor r)`. Ensure API supports `lang` property.
The descriptor image should be saved at repository path `/descriptor/{uuid.substring(0,3)}/{uuid}.{ext}`.
Ensure the `descriptor.image` is included in JSON response for Descriptor Lists.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/448DownloadService with ES2019-05-21T11:06:17+02:00Matija ObrezaDownloadService with ESWhen using full text filtering with ES, the downloads are disabled because DownloadService (and AccessionProcessor) support JPA queries only. Refactor the code so that PccessionProcessor can use ES or JPA filters to generate downloads.When using full text filtering with ES, the downloads are disabled because DownloadService (and AccessionProcessor) support JPA queries only. Refactor the code so that PccessionProcessor can use ES or JPA filters to generate downloads.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/447ES reindexing using BasicFilter2019-05-22T18:46:16+02:00Matija ObrezaES reindexing using BasicFilterAt the moment Genesys allows for reindexing of selected records using JSON filters in admin pages of JSP.
Please add API v1 endpoint(s) to reindex selected records (as in JSP) and add it to UI.At the moment Genesys allows for reindexing of selected records using JSON filters in admin pages of JSP.
Please add API v1 endpoint(s) to reindex selected records (as in JSP) and add it to UI.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/443ES not containing all data2019-05-19T18:10:09+02:00Matija ObrezaES not containing all dataDatasets ES index does not list different data providers. See https://beta.genesys-pgr.org/datasets/overview.
Another issue is with updating only one part of the ES document: When the image count is updated to the database, we do not us...Datasets ES index does not list different data providers. See https://beta.genesys-pgr.org/datasets/overview.
Another issue is with updating only one part of the ES document: When the image count is updated to the database, we do not use the entity update so that the Auditor doesn't update `lastModifiedDate`. But this results in ES not being updated.
We uploaded images for 2 accessions at https://beta.genesys-pgr.org/a/overview/v16f1def008dbf46969dc325f668c676d1 and the Overview doesn't show data for these. Can we partially update an ES document with only `{ accessionCount: 2 }`?2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/440Inconsistent API response2019-05-06T11:34:33+02:00Matija ObrezaInconsistent API responseReported by @osavran, the descriptors sort property from response has this structure:
![Screenshot_from_2019-05-03_09-16-59](/uploads/0bfa68e143c0f780eb545e3a54065963/Screenshot_from_2019-05-03_09-16-59.png)
and for other modules:
![S...Reported by @osavran, the descriptors sort property from response has this structure:
![Screenshot_from_2019-05-03_09-16-59](/uploads/0bfa68e143c0f780eb545e3a54065963/Screenshot_from_2019-05-03_09-16-59.png)
and for other modules:
![Screenshot_from_2019-05-03_09-12-37](/uploads/339d1a3b521f6a138330af494b8e364a/Screenshot_from_2019-05-03_09-12-37.png)
`PaginationComponent` throw error "`pageObj.sort[0]` is undefined", descriptors action `updateRoute` also won't work. I think the same problem is in other components.
## Notes
This may have to do with difference between ES and JPA `Page<?>` responses.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/439Use ES for text queries2019-05-01T21:52:50+02:00Matija ObrezaUse ES for text queriesWhen user provides `_text` filter (keyword search) the backend should query ES for results (not the database).
We have `_text` filter in `DescriptorListFilter` for example. Add `_text` filter to `AccessionFilter`.
This requires adding ...When user provides `_text` filter (keyword search) the backend should query ES for results (not the database).
We have `_text` filter in `DescriptorListFilter` for example. Add `_text` filter to `AccessionFilter`.
This requires adding support for converting `_text` field to a full-text ES query (https://www.elastic.co/guide/en/elasticsearch/reference/2.3/full-text-queries.html) in `ElasticQueryBuilder`.
Explore if this is possible.
##
```java
public Page<Accession> list(AccessionFilter filter, Pageable page) {
if (StringUtils.isNotBlank(filter._text)) {
// FIXME Use ES to list matches
elasticsearchService.findAll(Accession.class, filter, page);
} else {
List<Accession> content = accessionRepository.findAll(filter, page);
}
long total = countAccessions(filter);
return new PageImpl<>(content, page, total);
}
```2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/437Sitemap update2019-04-16T20:10:28+02:00Matija ObrezaSitemap updateThe sitemaps need updating; the root `sitemap.xml` now includes the following sub-sitemaps:
```xml
<loc>http://localhost:3000/sitemap-content.xml</loc>
<loc>http://localhost:3000/sitemap-geo.xml</loc>
<loc>http://localhost:3000/sitemap-...The sitemaps need updating; the root `sitemap.xml` now includes the following sub-sitemaps:
```xml
<loc>http://localhost:3000/sitemap-content.xml</loc>
<loc>http://localhost:3000/sitemap-geo.xml</loc>
<loc>http://localhost:3000/sitemap-wiews.xml</loc>
<loc>http://localhost:3000/sitemap-crop.xml</loc>
```
## `sitemap-content.xml`
It now has:
```xml
<loc>http://localhost:3000/welcome</loc>
<loc>http://localhost:3000/content/about</loc>
<loc>http://localhost:3000/explore/overview</loc>
<loc>http://localhost:3000/wiews/active</loc>
<loc>http://localhost:3000/content/terms</loc>
<loc>http://localhost:3000/explore</loc>
<loc>http://localhost:3000/org/</loc>
```
Instead it should list:
- `/`
- `/content/about/about`
- `/content/legal/terms`
- `/content/legal/disclaimer`
- `/documentation/apis`
- `/documentation/brapi`
- List of all `Activity posts` with their links `/content/news/72/....`
## `sitemap-geo.xml`
Rename it to `sitemap-iso3166.xml`. It should include custom ISO3166 codes (the XXX codes).
## Add `sitemap-partner.xml`
List links to all Genesys data providers `/partner/...`.
## `sitemap-crop.xml`
Should link to the crop pages, not to `../data`.
## New sitemaps
Add `sitemap-XXX.xml` for PUBLISHED **subsets**, **datasets** and **descriptor lists**.
- `sitemap-subset.xml` lists links to all published Subsets
- ...2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/435Accession filters autocomplete2019-04-12T11:19:24+02:00Matija ObrezaAccession filters autocompletehttp://localhost:3000/proxy/api/v1/acn/autocomplete/countryOfOrigin.code3?f=&term=slove does not find `SVN` for Slovenia.http://localhost:3000/proxy/api/v1/acn/autocomplete/countryOfOrigin.code3?f=&term=slove does not find `SVN` for Slovenia.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/433Access token as Cookie2019-04-15T10:11:40+02:00Matija ObrezaAccess token as CookieThe `/proxy` handler in expressjs (https://gitlab.croptrust.org/genesys-pgr/genesys-ui/blob/master/server/middleware/httpProxy.ts#L18-25) checks request cookies for `access_token` and converts it to `Authorization: Bearer ...` HTTP heade...The `/proxy` handler in expressjs (https://gitlab.croptrust.org/genesys-pgr/genesys-ui/blob/master/server/middleware/httpProxy.ts#L18-25) checks request cookies for `access_token` and converts it to `Authorization: Bearer ...` HTTP header before forwarding the request to the API server.
## Servlet
We need the API server to respect the `access_token` cookie, not just the `Authorization` HTTP request header. Maybe Spring Security libraries allow for this. If not, we need a servlet that is processed **before** OAuth auth servlets in the API that converts the cookie to the `Authorization: Bearer ...` header.
When this is implemented, we can remove the `/proxy` handler from `genesys-new-ui` project and update all HTTP links that start with `/proxy/**` to point to API URL directly.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/428MCPD coverage2019-03-17T12:03:29+01:00Matija ObrezaMCPD coveragePDCI is a mechanism to assess the coverage of accession passport data provided and it assigns different scores for fields for different types of accessions based on SAMPSTAT field.
We would like to see overall coverage of all passport d...PDCI is a mechanism to assess the coverage of accession passport data provided and it assigns different scores for fields for different types of accessions based on SAMPSTAT field.
We would like to see overall coverage of all passport data fields in Genesys database for a specified filter.
Add `missing` ES aggregation query for all fields of `Accession` that are serialized to JSON and stored to ES.
## Using JSON schema
1. Determine JSON schema for `Accession` and all related types
1. Take every field name (including nested properties) and find the `missing` value
The result will be a map of all JSON paths with their `missing` value. `totalCount` shows all records matching the filter.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/425Versioned Datasets: update2019-03-25T18:34:15+01:00Matija ObrezaVersioned Datasets: updateUpgrade versioned Datasets to the approach implemented in #421Upgrade versioned Datasets to the approach implemented in #4212.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/421Versioned Subsets2019-03-05T22:24:56+01:00Matija ObrezaVersioned SubsetsWe'd like to implement *versioned subsets*: subset may be updated by the data provider and (when published) both versions should be available through Genesys.
1. Obsolete subsets should not be listed by default
1. Obsolete subset must p...We'd like to implement *versioned subsets*: subset may be updated by the data provider and (when published) both versions should be available through Genesys.
1. Obsolete subsets should not be listed by default
1. Obsolete subset must point to a new version of the subset
## Simple approach
The very simple approach is to add `private Subset nextVersion` to the `Subset` entity and then we know that a subset has been replaced if `nextVersion != null`. And we can display a link to the new version.
**Problem:** This would only work if the new subset would be immediately published. But it has to go through review, and until the updated version is in `PUBLISHED` state we do not have any mechanism to say that the old version is "current" (the latest).
## Dataset approach
We have this implemented for `Dataset` in `DatasetVersions` (but we are not using it at the moment). Subsets are much simpler than datasets, so I suggest we try it here. We will need to introduce `SubsetVersions` (similar to `DatasetVersions`) and implement service methods that allow for the following:
1. The owner of a subset can create a new Subset based on an existing `PUBLISHED` Subset
1. If the existing subset is not published, reject the request.
1. A new `Subset` is created in `DRAFT` mode and **all data is copied** to the new version
1. The old and the new `Subset` both link to `SubsetVersions` entity
1. When the new `Subset` is **published** the `SubsetVersions#currentVersion` is changed to point to this version.
1. Queries for listing Subsets must only return latest versions:
1. `select s from Subset s where s.current = true and s.state = 'PUBLISHED'`.
1. Users can still access a subset that is **not current**, but it is published: `loadSubset` should only check that `state = 'PUBLISHED'`.
1. We cannot inner join `SubsetVersions` because we will not store that in the Elasticsearch.
1. The service methods must update `subset.current` when the new version is `PUBLISHED`.
1. Only one `Subset` of all versions of `SubsetVersions` can be current. This is best achieved with a unique key on `subset.versions + subset.current`, but we have to set `subset.current = null` when the subset is not the current version.
1. This means that `subset.current = true` means it is the currently published version and `subset.current = null` means it is not a current version.
### New Subsets
1. A new subset is created as it is created now, but a `SubsetVersions` is created for as well.
1. The new subset has `subset.current = null` and `SubsetVersions#currentVersion = null`.
1. When the subset is published, both these values are updated: `subset.current = true` and `SubsetVersions#currentVersion = ¤tSubset`.
## Un-publishing Subsets
If a `PUBLISHED` subset is unpublished (by an Administrator) we have the case when:
1. The subset is **not current** and it **must not** be unpublished. Reject.
1. The subset **is current**: we need to pick a subset that is published and that can replace the current version
1. If there is no other version of a subset (this is the first published version): set `subset.current = null` and `SubsetVersions#currentVersion = null`
1. If there are other published versions of the subset (in `SubsetVersions#allVersions`) then make the youngest (by `createdDate`) the currently published version.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/419sitemap-INSTCODE.xml2019-02-11T11:53:41+01:00Matija Obrezasitemap-INSTCODE.xmlWe now generate the `sitemap-wiews.xml` that generates a sitemap to institute pages:
```java
for (FaoInstitute institute : instituteService.listActive(new PageRequest(0, Integer.MAX_VALUE))) {
writePage(response, sb, new SitemapPage("/...We now generate the `sitemap-wiews.xml` that generates a sitemap to institute pages:
```java
for (FaoInstitute institute : instituteService.listActive(new PageRequest(0, Integer.MAX_VALUE))) {
writePage(response, sb, new SitemapPage("/wiews/" + institute.getCode().toUpperCase()));
}
```
Instead it should reference another sitemap `sitemap-{INSTCODE}.xml` with the links to pages:
- `new SitemapPage("/wiews/" + institute.getCode().toUpperCase())`
- a `new SitemapPage("/a/...."` for every accession of that institute (use `AccessionProcessor`).2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/418Invalid handling of collCode, collNumb2019-02-17T16:04:54+01:00Matija ObrezaInvalid handling of collCode, collNumbGenesys partners sometimes submit `collCode` as an MCPD array string `COOD003;BEN089` instead of `["COOD003", "BEN089"]` array. Same for `collName`.
In API **v0** please add to `upgradeToV2` method some logic that will ensure these are ...Genesys partners sometimes submit `collCode` as an MCPD array string `COOD003;BEN089` instead of `["COOD003", "BEN089"]` array. Same for `collName`.
In API **v0** please add to `upgradeToV2` method some logic that will ensure these are converted to `String[]`.
Update `liquibase-changeLog.yml` with SQL that converts current incorrect data for `collCode` (e.g. `COOD003;BEN089`) to two records.
*Not sure how valid this SQL is, but it seems to work*
```yml
- sql:
drop table if exists t_collCode;
create table if not exists t_collCode as
select
@num_e := 1 + LENGTH(collCode) - LENGTH(REPLACE(collCode, ';', '')) AS num_e,
collectId, collCode,
SUBSTRING_INDEX(collCode,';',1) as coll1,
IF(@num_e > 1, SUBSTRING_INDEX(SUBSTRING_INDEX(collCode,';',2),';',-1), null) coll2,
IF(@num_e > 2, SUBSTRING_INDEX(SUBSTRING_INDEX(collCode,';',3),';',-1), null) coll3,
IF(@num_e > 3, SUBSTRING_INDEX(SUBSTRING_INDEX(collCode,';',3),';',-1), null) coll4
from accession_collect_code where collCode is not null and (LENGTH(collCode) - LENGTH(REPLACE(collCode, ';', ''))) > 0;
delete from accession_collect_code where collectId in (select distinct collectId from t_collCode);
insert into accession_collect_code (collectId,collCode)
(select distinct collectId, coll1 from
(select collectId, coll1 from t_collCode where coll1 is not null
union all select collectId, coll2 from t_collCode where coll2 is not null
union all select collectId, coll3 from t_collCode where coll3 is not null
union all select collectId, coll4 from t_collCode where coll4 is not null) Q);
drop table t_collCode;
```
Apparently we don't have any such problems in `accession_collect_name` table.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/417AccessionData @Validation2019-02-17T16:04:53+01:00Matija ObrezaAccessionData @ValidationUpdate validation rules on `AccessionData` entity:
- Add **regex pattern** `[A-Z]{3}\\d{3,4}` to `donorCode`
- Same to `usedBy` in `AccessionAlias`
- Same to `collCode` in `AccessionCollect`
Make sure validations are executed before `A...Update validation rules on `AccessionData` entity:
- Add **regex pattern** `[A-Z]{3}\\d{3,4}` to `donorCode`
- Same to `usedBy` in `AccessionAlias`
- Same to `collCode` in `AccessionCollect`
Make sure validations are executed before `AccessionUploader` uses them.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/414Apache Mina logging2019-02-08T14:24:47+01:00Matija ObrezaApache Mina loggingPlease explore how we can reduce the verbosity of apache mina (FTP). The logs are filling up with:
```
10:02:50,349 pool-4-thread-19 ERROR o.a.f.i.DefaultFtpHandler:157 - Exception caught, closing session
javax.net.ssl.SSLHandshakeExce...Please explore how we can reduce the verbosity of apache mina (FTP). The logs are filling up with:
```
10:02:50,349 pool-4-thread-19 ERROR o.a.f.i.DefaultFtpHandler:157 - Exception caught, closing session
javax.net.ssl.SSLHandshakeException: SSL handshake failed.
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:519)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:947)
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:535)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:703)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:659)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:648)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1120)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at sun.security.ssl.EngineInputRecord.bytesInCompletePacket(EngineInputRecord.java:156)
at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:868)
at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
at org.apache.mina.filter.ssl.SslHandler.unwrap(SslHandler.java:754)
at org.apache.mina.filter.ssl.SslHandler.unwrapHandshake(SslHandler.java:689)
at org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:575)
at org.apache.mina.filter.ssl.SslHandler.messageReceived(SslHandler.java:360)
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:500)
... 15 more
```
Can we just log the exception message?2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/412Scheduled GLIS update2019-02-07T14:32:32+01:00Matija ObrezaScheduled GLIS updateAdd a scheduled task that runs on **1** cluster node every 6 hours and updates GLIS with `addtarget` with new accessions **with DOI** that were modified in the last **8 hours**.
Use code from `glisUpdater` in `AccessionListenersConfig` ...Add a scheduled task that runs on **1** cluster node every 6 hours and updates GLIS with `addtarget` with new accessions **with DOI** that were modified in the last **8 hours**.
Use code from `glisUpdater` in `AccessionListenersConfig` and remove that listener from `AccessionListenersConfig`.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/411Bug: StartsWithFilter cannot be cast2019-02-01T08:21:26+01:00Matija ObrezaBug: StartsWithFilter cannot be castWhat's with `StartsWithFilter` cannot be cast to `LiteralValueFilter` in our converter?
```
Caused by: java.lang.ClassCastException: org.genesys2.server.service.impl.FilterHandler$StartsWithFilter cannot be cast to org.genesys2.server.s...What's with `StartsWithFilter` cannot be cast to `LiteralValueFilter` in our converter?
```
Caused by: java.lang.ClassCastException: org.genesys2.server.service.impl.FilterHandler$StartsWithFilter cannot be cast to org.genesys2.server.service.impl.FilterHandler$LiteralValueFilter
at org.genesys2.server.service.filter.AppliedFiltersConverter.take1String(AppliedFiltersConverter.java:258)
at org.genesys2.server.service.filter.AppliedFiltersConverter.apply(AppliedFiltersConverter.java:195)
at org.genesys2.server.service.filter.AppliedFiltersConverter.convert(AppliedFiltersConverter.java:179)
at org.genesys2.server.service.impl.FilterHandler$AppliedFilters.convert(FilterHandler.java:515)
```
Throw `InvalidApiUsageException` (extends RuntimeException) in:
```
21:25:39,611 qtp2027961269-15 ERROR o.g.s.m.UserControllerAdvice:103 - Could not convert filters on GET http://www.genesys-pgr.org/es/explore
java.lang.RuntimeException: Could not convert filters
at org.genesys2.server.service.impl.FilterHandler$AppliedFilters.convert(FilterHandler.java:517)
at org.genesys2.server.mvc.ExplorerController.viewFiltered(ExplorerController.java:240)
at org.genesys2.server.mvc.ExplorerController$$FastClassBySpringCGLIB$$827bbdf0.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:667)
at org.genesys2.server.mvc.ExplorerController$$EnhancerBySpringCGLIB$$590345b8.viewFiltered(<generated>)
```
also
```
Caused by: java.lang.RuntimeException: Unhandled Accession filter property=doi
at org.genesys2.server.service.filter.AppliedFiltersConverter.apply(AppliedFiltersConverter.java:252)
at org.genesys2.server.service.filter.AppliedFiltersConverter.convert(AppliedFiltersConverter.java:179)
at org.genesys2.server.service.impl.FilterHandler$AppliedFilters.convert(FilterHandler.java:515)
... 117 more
```2.4Maxym BorodenkoMaxym Borodenko