From ba048d872a27447500b86accbd80fa17ec2a2501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Fri, 10 Mar 2023 17:12:43 +0100 Subject: [PATCH] update to netty 4.1.89, avoid class casting execption in case of broken PQF --- gradle.properties | 2 +- settings.gradle | 2 +- .../z3950/client/jdk/test/LVIZClientTest.java | 46 +++++++++++++++++++ .../z3950/common/pqf/PQFRPNGenerator.java | 11 ++++- .../xbib/z3950/common/pqf/PQFParserTest.java | 3 -- 5 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 z3950-client-jdk/src/test/java/org/xbib/z3950/client/jdk/test/LVIZClientTest.java diff --git a/gradle.properties b/gradle.properties index 27325a7..c89e3c2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = z3950 -version = 5.0.0 +version = 5.0.1 org.gradle.warning.mode = ALL diff --git a/settings.gradle b/settings.gradle index 5defb70..e547f33 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,7 +5,7 @@ dependencyResolutionManagement { version('groovy', '4.0.7') version('junit', '5.9.2') version('junit4', '4.13.2') - version('netty', '4.1.87.Final') + version('netty', '4.1.89.Final') library('junit-jupiter-api', 'org.junit.jupiter', 'junit-jupiter-api').versionRef('junit') library('junit-jupiter-params', 'org.junit.jupiter', 'junit-jupiter-params').versionRef('junit') library('junit-jupiter-engine', 'org.junit.jupiter', 'junit-jupiter-engine').versionRef('junit') diff --git a/z3950-client-jdk/src/test/java/org/xbib/z3950/client/jdk/test/LVIZClientTest.java b/z3950-client-jdk/src/test/java/org/xbib/z3950/client/jdk/test/LVIZClientTest.java new file mode 100644 index 0000000..64e5d98 --- /dev/null +++ b/z3950-client-jdk/src/test/java/org/xbib/z3950/client/jdk/test/LVIZClientTest.java @@ -0,0 +1,46 @@ +package org.xbib.z3950.client.jdk.test; + +import org.junit.jupiter.api.Test; +import org.xbib.z3950.client.jdk.JDKZClient; + +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.logging.Level; +import java.util.logging.Logger; + +class LVIZClientTest { + + private static final Logger logger = Logger.getLogger(LVIZClientTest.class.getName()); + + @Test + void testLVI() { + String query = "@attr 1=4 linux"; + int from = 1; + int size = 10; + try (JDKZClient client = newZClient()) { + logger.log(Level.INFO, "executing PQF " + query); + int count = client.searchPQF(query, from, size, + (status, total, returned, elapsedMillis) -> + logger.log(Level.INFO, "total results = " + total + " millis = " + elapsedMillis), + record -> logger.log(Level.INFO, "record = " + record.toString(StandardCharsets.UTF_8)), + () -> logger.log(Level.WARNING, "timeout")); + logger.log(Level.INFO, "record count = " + count); + } catch (Exception e) { + logger.log(Level.SEVERE, e.getMessage(), e); + } + } + + private JDKZClient newZClient() { + JDKZClient.Builder builder = JDKZClient.builder(); + builder.setHost("sru.hbz-nrw.de"); + builder.setPort(210); + builder.setDatabases(Collections.singletonList("LVI")); + builder.setElementSetName(null); + builder.setPreferredRecordSyntax("xml"); + builder.setResultSetName("default"); + builder.setEncoding("utf-8"); + builder.setFormat("Marc21"); + builder.setType("Bibliographic"); + return builder.build(); + } +} diff --git a/z3950-common/src/main/java/org/xbib/z3950/common/pqf/PQFRPNGenerator.java b/z3950-common/src/main/java/org/xbib/z3950/common/pqf/PQFRPNGenerator.java index 9bba55f..47b579e 100644 --- a/z3950-common/src/main/java/org/xbib/z3950/common/pqf/PQFRPNGenerator.java +++ b/z3950-common/src/main/java/org/xbib/z3950/common/pqf/PQFRPNGenerator.java @@ -17,12 +17,16 @@ import org.xbib.z3950.common.v3.RPNStructure; import org.xbib.z3950.common.v3.RPNStructureRpnRpnOp; import java.util.Stack; +import java.util.logging.Level; +import java.util.logging.Logger; /** * PQF abstract syntax tree. */ public class PQFRPNGenerator implements Visitor { + private static final Logger logger = Logger.getLogger(PQFRPNGenerator.class.getName()); + private final Stack result; private RPNQuery rpnQuery; @@ -39,7 +43,12 @@ public class PQFRPNGenerator implements Visitor { public void visit(PQF pqf) { if (!result.isEmpty()) { this.rpnQuery = new RPNQuery(); - rpnQuery.rpn = (RPNStructure) result.pop(); + ASN1Any any = result.pop(); + if (any instanceof RPNStructure) { + rpnQuery.rpn = (RPNStructure) any; + } else if (any instanceof ASN1OctetString) { + logger.log(Level.INFO, "found ASN1OctetString = " + ((ASN1OctetString) any).get()); + } if (pqf.getAttrSet() == null) { // Z39.50 BIB-1: urn:oid:1.2.840.10003.3.1 rpnQuery.attributeSetId = new AttributeSetId(); diff --git a/z3950-common/src/test/java/org/xbib/z3950/common/pqf/PQFParserTest.java b/z3950-common/src/test/java/org/xbib/z3950/common/pqf/PQFParserTest.java index 8bb1407..afcd313 100644 --- a/z3950-common/src/test/java/org/xbib/z3950/common/pqf/PQFParserTest.java +++ b/z3950-common/src/test/java/org/xbib/z3950/common/pqf/PQFParserTest.java @@ -13,9 +13,6 @@ import java.util.logging.Logger; import static org.junit.jupiter.api.Assertions.assertEquals; -/** - * - */ class PQFParserTest { private static final Logger logger = Logger.getLogger(PQFParserTest.class.getName());