- Timestamp:
- 05/27/13 21:04:59 (11 years ago)
- Location:
- SRUClient/trunk/src/main/java/eu/clarin/sru/client
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
SRUClient/trunk/src/main/java/eu/clarin/sru/client/SRUExplainRecordDataParser.java
r2938 r2939 34 34 */ 35 35 public class SRUExplainRecordDataParser implements SRURecordDataParser { 36 private static final String ZEEREX_NS = SRUExplainRecordData.RECORD_SCHEMA; 36 static final String ZEEREX_NS = SRUExplainRecordData.RECORD_SCHEMA; 37 static final String ZEEREX_NS_QUIRK = "http://explain.z3950.org/dtd/2.1/"; 37 38 private static final String VERSION_1_1 = "1.1"; 38 39 private static final String VERSION_1_2 = "1.2"; … … 49 50 50 51 @Override 51 public SRURecordData parse( XMLStreamReader reader, SRUVersion version)52 public SRURecordData parse(final XMLStreamReader reader, SRUVersion version) 52 53 throws XMLStreamException, SRUClientException { 53 54 logger.debug("parsing explain record data for version {}", version); 54 55 55 56 // explain 56 XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "explain", true); 57 if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, 58 "explain", false)) { 59 return parseExplain(reader, ZEEREX_NS, version); 60 } else if (XmlStreamReaderUtils.readStart(reader, 61 ZEEREX_NS_QUIRK, "explain", false)) { 62 logger.warn("namespace '{}' is not defined by ZeeRex, enabling " + 63 "quirk mode (consider using namespace '{}' which is defined)", 64 ZEEREX_NS_QUIRK, ZEEREX_NS); 65 return parseExplain(reader, ZEEREX_NS_QUIRK, version); 66 } else { 67 throw new XMLStreamException("expected element '{" + ZEEREX_NS + 68 "}explain' at this position", reader.getLocation()); 69 } 70 } 71 72 73 private static SRURecordData parseExplain(XMLStreamReader reader, 74 final String namespace, final SRUVersion version) 75 throws XMLStreamException, SRUClientException { 57 76 58 77 // explain/serverInfo 59 ServerInfo serverInfo = parseServerInfo(reader );78 ServerInfo serverInfo = parseServerInfo(reader, namespace); 60 79 61 80 // explain/databaseInfo 62 if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "databaseInfo", false)) {81 if (XmlStreamReaderUtils.readStart(reader, namespace, "databaseInfo", false)) { 63 82 logger.debug("databaseInfo"); 64 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "databaseInfo", true);83 XmlStreamReaderUtils.readEnd(reader, namespace, "databaseInfo", true); 65 84 } 66 85 67 86 // explain/metaInfo 68 if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "metaInfo", false)) {87 if (XmlStreamReaderUtils.readStart(reader, namespace, "metaInfo", false)) { 69 88 logger.debug("metaInfo"); 70 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "metaInfo", true);89 XmlStreamReaderUtils.readEnd(reader, namespace, "metaInfo", true); 71 90 } 72 91 73 92 // explain/indexInfo 74 while (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "indexInfo", false)) {93 while (XmlStreamReaderUtils.readStart(reader, namespace, "indexInfo", false)) { 75 94 logger.debug("indexInfo"); 76 95 for (;;) { … … 79 98 * check with SRU 1.2 ... 80 99 */ 81 if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "set", false, true)) {100 if (XmlStreamReaderUtils.readStart(reader, namespace, "set", false, true)) { 82 101 logger.debug("set"); 83 102 // FIXME: read attributes 84 103 XmlStreamReaderUtils.consumeStart(reader); 85 104 86 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "set", true);87 } else if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "index", false, true)) {105 XmlStreamReaderUtils.readEnd(reader, namespace, "set", true); 106 } else if (XmlStreamReaderUtils.readStart(reader, namespace, "index", false, true)) { 88 107 logger.debug("index"); 89 108 // FIXME: read attributes 90 109 XmlStreamReaderUtils.consumeStart(reader); 91 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "index", true);110 XmlStreamReaderUtils.readEnd(reader, namespace, "index", true); 92 111 } else { 93 112 break; 94 113 } 95 114 } 96 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "indexInfo", true);115 XmlStreamReaderUtils.readEnd(reader, namespace, "indexInfo", true); 97 116 } // while 98 117 99 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "explain", true);118 XmlStreamReaderUtils.readEnd(reader, namespace, "explain", true); 100 119 return new SRUExplainRecordData(serverInfo); 101 120 } 102 121 103 122 104 private static ServerInfo parseServerInfo(XMLStreamReader reader) 105 throws XMLStreamException, SRUClientException { 106 XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, 123 private static ServerInfo parseServerInfo(final XMLStreamReader reader, 124 final String namespace) throws XMLStreamException, 125 SRUClientException { 126 XmlStreamReaderUtils.readStart(reader, namespace, 107 127 "serverInfo", true, true); 108 128 String protocol = XmlStreamReaderUtils.readAttributeValue(reader, … … 118 138 version = SRUVersion.VERSION_1_2; 119 139 } else { 120 throw new SRUClientException( 121 "invalid or unsupported version: " + s); 140 throw new SRUClientException("invalid or unsupported value '" + 141 s + "'for attribute 'version' on element '" + 142 reader.getName() + "'"); 122 143 } 123 144 } … … 127 148 null, "transport"); 128 149 if (s != null) { 150 s = s + " http"; 129 151 for (String i : s.split("\\s+")) { 130 152 String t = null; … … 134 156 t = TRANSPORT_HTTPS; 135 157 } else { 136 throw new SRUClientException("invalid transport: " + i); 158 throw new SRUClientException("invalid value '" + i + 159 "' for attribute 'transport' on element '" + 160 reader.getName() + 161 " (use either 'http' of 'https' or both " + 162 "seperated by whitespace"); 137 163 } 138 164 if (t != null) { … … 140 166 transports.add(t); 141 167 } else { 142 // FIXME: error message 143 logger.warn("transport {} was already listed", s); 168 logger.warn("value '{}' already listed in " + 169 "'transport' attribute of element '{}'", 170 t, reader.getName()); 144 171 } 145 172 } … … 151 178 XmlStreamReaderUtils.consumeStart(reader); 152 179 153 String host = XmlStreamReaderUtils.readContent(reader, ZEEREX_NS,180 String host = XmlStreamReaderUtils.readContent(reader, namespace, 154 181 "host", true); 155 int port = XmlStreamReaderUtils.readContent(reader, ZEEREX_NS,182 int port = XmlStreamReaderUtils.readContent(reader, namespace, 156 183 "port", true, -1); 157 184 if ((port < 0) || (port > 65535)) { … … 159 186 throw new SRUClientException("invalid port number (" + port + ")"); 160 187 } 161 String database = XmlStreamReaderUtils.readContent(reader, ZEEREX_NS,188 String database = XmlStreamReaderUtils.readContent(reader, namespace, 162 189 "database", true); 163 if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS,190 if (XmlStreamReaderUtils.readStart(reader, namespace, 164 191 "authentication", false)) { 165 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS,192 XmlStreamReaderUtils.readEnd(reader, namespace, 166 193 "authentication", true); 167 194 } 168 XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "serverInfo", true);195 XmlStreamReaderUtils.readEnd(reader, namespace, "serverInfo", true); 169 196 logger.debug("serverInfo: host={}, port={}, database={}, version={}, protocol={}, transport={}", 170 197 host, port, database, version, protocol, transports); -
SRUClient/trunk/src/main/java/eu/clarin/sru/client/SRUSimpleClient.java
r2938 r2939 595 595 } 596 596 597 if (!SRUExplainRecordData.RECORD_SCHEMA.equals(schema)) { 598 // FIXME: message 599 throw new SRUClientException("bad record schema"); 600 } 597 /* 598 * Hard-coded record schema identifiers for explain 599 */ 600 if (!(SRUExplainRecordDataParser.ZEEREX_NS.equals(schema) || 601 SRUExplainRecordDataParser.ZEEREX_NS_QUIRK.equals(schema))) { 602 throw new SRUClientException("record schema '" + schema + 603 "' not supported in explain response"); 604 } 605 601 606 try { 602 607 proxy.reset(recordReader);
Note: See TracChangeset
for help on using the changeset viewer.