From 2bd1d28c21f9d4c911fa5e488155281ea0db8914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Tue, 18 Apr 2023 15:02:49 +0200 Subject: [PATCH] fix UTF-8 in CQL->RPN --- gradle.properties | 2 +- .../org/xbib/z3950/client/jdk/JDKZClient.java | 4 ++-- .../z3950/client/jdk/test/LVIZClientTest.java | 2 +- .../z3950/common/cql/CQLRPNGenerator.java | 20 ++++++++++++------- .../common/operations/SearchOperation.java | 14 ++++++------- .../xbib/z3950/common/cql/CQL2RPNTest.java | 15 +++++++++++++- 6 files changed, 38 insertions(+), 19 deletions(-) diff --git a/gradle.properties b/gradle.properties index fecf301..a154171 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = z3950 -version = 5.1.6 +version = 5.1.7 org.gradle.warning.mode = ALL diff --git a/z3950-client-jdk/src/main/java/org/xbib/z3950/client/jdk/JDKZClient.java b/z3950-client-jdk/src/main/java/org/xbib/z3950/client/jdk/JDKZClient.java index 0e20176..f02f37c 100644 --- a/z3950-client-jdk/src/main/java/org/xbib/z3950/client/jdk/JDKZClient.java +++ b/z3950-client-jdk/src/main/java/org/xbib/z3950/client/jdk/JDKZClient.java @@ -72,7 +72,7 @@ public class JDKZClient implements Client, Closeable { lock.lock(); SearchOperation searchOperation = new SearchOperation(berReader, berWriter, builder.resultSetName, builder.databases, builder.host); - boolean success = searchOperation.executeCQL(query, builder.wordListSupported); + boolean success = searchOperation.executeCQL(StandardCharsets.UTF_8, query, builder.wordListSupported); if (!success) { logger.log(Level.WARNING, MessageFormat.format("search was not a success [{0}]", query)); } else { @@ -130,7 +130,7 @@ public class JDKZClient implements Client, Closeable { lock.lock(); SearchOperation searchOperation = new SearchOperation(berReader, berWriter, builder.resultSetName, builder.databases, builder.host); - searchOperation.executePQF(query, StandardCharsets.UTF_8); + searchOperation.executePQF(StandardCharsets.UTF_8, query); if (!searchOperation.isSuccess()) { logger.log(Level.WARNING, MessageFormat.format("search was not a success [{0}]", query)); } else { 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 index f427c68..2f81738 100644 --- 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 @@ -17,7 +17,7 @@ class LVIZClientTest { @Disabled @Test - void testLVI() { + void testPQF() { String query = "@attr 1=4 @attr 4=6 \"Köln strafrecht\""; int offset = 1; int size = 10; diff --git a/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java b/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java index 0176c7c..023125a 100644 --- a/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java +++ b/z3950-common/src/main/java/org/xbib/z3950/common/cql/CQLRPNGenerator.java @@ -32,6 +32,9 @@ import org.xbib.z3950.common.v3.Operator; import org.xbib.z3950.common.v3.RPNQuery; import org.xbib.z3950.common.v3.RPNStructure; import org.xbib.z3950.common.v3.RPNStructureRpnRpnOp; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -46,9 +49,8 @@ import java.util.stream.Collectors; */ public final class CQLRPNGenerator implements Visitor { - /** - * Context map. - */ + private final Charset charset; + private final Map> contexts; private final Stack attributeElements; @@ -60,10 +62,15 @@ public final class CQLRPNGenerator implements Visitor { private final boolean wordListSupported; public CQLRPNGenerator() { - this(null, true); + this(StandardCharsets.ISO_8859_1, null, true); } - public CQLRPNGenerator(Collection attributeElements, boolean wordListSupported) { + public CQLRPNGenerator(Charset charset) { + this(charset, null, true); + } + + public CQLRPNGenerator(Charset charset, Collection attributeElements, boolean wordListSupported) { + this.charset = charset; this.attributeElements = new Stack<>(); if (attributeElements != null) { this.attributeElements.addAll(attributeElements); @@ -266,7 +273,6 @@ public final class CQLRPNGenerator implements Visitor { @Override public void visit(Term term) { - // the value ASN1OctetString s = transformTerm(term); result.push(s); } @@ -358,7 +364,7 @@ public final class CQLRPNGenerator implements Visitor { } push(attributeElements, createAttributeElement(attributeType, attributeValue)); - return new ASN1OctetString(v); + return new ASN1OctetString(v, charset); } private static AttributeElement createAttributeElement(Integer attributeType, Integer attributeValue) { diff --git a/z3950-common/src/main/java/org/xbib/z3950/common/operations/SearchOperation.java b/z3950-common/src/main/java/org/xbib/z3950/common/operations/SearchOperation.java index ed6b2cd..9ae83ce 100644 --- a/z3950-common/src/main/java/org/xbib/z3950/common/operations/SearchOperation.java +++ b/z3950-common/src/main/java/org/xbib/z3950/common/operations/SearchOperation.java @@ -54,12 +54,12 @@ public class SearchOperation extends AbstractOperation