Changeset 2939 for SRUClient


Ignore:
Timestamp:
05/27/13 21:04:59 (11 years ago)
Author:
oschonef
Message:
  • some more work on ZeRex? record parser
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  
    3434 */
    3535public 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/";
    3738    private static final String VERSION_1_1     = "1.1";
    3839    private static final String VERSION_1_2     = "1.2";
     
    4950
    5051    @Override
    51     public SRURecordData parse(XMLStreamReader reader, SRUVersion version)
     52    public SRURecordData parse(final XMLStreamReader reader, SRUVersion version)
    5253            throws XMLStreamException, SRUClientException {
    5354        logger.debug("parsing explain record data for version {}", version);
    5455
    5556        // 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 {
    5776
    5877        // explain/serverInfo
    59         ServerInfo serverInfo = parseServerInfo(reader);
     78        ServerInfo serverInfo = parseServerInfo(reader, namespace);
    6079
    6180        // explain/databaseInfo
    62         if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "databaseInfo", false)) {
     81        if (XmlStreamReaderUtils.readStart(reader, namespace, "databaseInfo", false)) {
    6382            logger.debug("databaseInfo");
    64             XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "databaseInfo", true);
     83            XmlStreamReaderUtils.readEnd(reader, namespace, "databaseInfo", true);
    6584        }
    6685
    6786        // explain/metaInfo
    68         if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "metaInfo", false)) {
     87        if (XmlStreamReaderUtils.readStart(reader, namespace, "metaInfo", false)) {
    6988            logger.debug("metaInfo");
    70             XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "metaInfo", true);
     89            XmlStreamReaderUtils.readEnd(reader, namespace, "metaInfo", true);
    7190        }
    7291
    7392        // explain/indexInfo
    74         while (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "indexInfo", false)) {
     93        while (XmlStreamReaderUtils.readStart(reader, namespace, "indexInfo", false)) {
    7594            logger.debug("indexInfo");
    7695            for (;;) {
     
    7998                 * check with SRU 1.2 ...
    8099                 */
    81                 if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS, "set", false, true)) {
     100                if (XmlStreamReaderUtils.readStart(reader, namespace, "set", false, true)) {
    82101                    logger.debug("set");
    83102                    // FIXME: read attributes
    84103                    XmlStreamReaderUtils.consumeStart(reader);
    85104
    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)) {
    88107                    logger.debug("index");
    89108                    // FIXME: read attributes
    90109                    XmlStreamReaderUtils.consumeStart(reader);
    91                     XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "index", true);
     110                    XmlStreamReaderUtils.readEnd(reader, namespace, "index", true);
    92111                } else {
    93112                    break;
    94113                }
    95114            }
    96             XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "indexInfo", true);
     115            XmlStreamReaderUtils.readEnd(reader, namespace, "indexInfo", true);
    97116        } // while
    98117
    99         XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "explain", true);
     118        XmlStreamReaderUtils.readEnd(reader, namespace, "explain", true);
    100119        return new SRUExplainRecordData(serverInfo);
    101120    }
    102121
    103122
    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,
    107127                "serverInfo", true, true);
    108128        String protocol = XmlStreamReaderUtils.readAttributeValue(reader,
     
    118138                version = SRUVersion.VERSION_1_2;
    119139            } 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() + "'");
    122143            }
    123144        }
     
    127148                null, "transport");
    128149        if (s != null) {
     150            s = s + " http";
    129151            for (String i : s.split("\\s+")) {
    130152                String t = null;
     
    134156                    t = TRANSPORT_HTTPS;
    135157                } 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");
    137163                }
    138164                if (t != null) {
     
    140166                        transports.add(t);
    141167                    } 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());
    144171                    }
    145172                }
     
    151178        XmlStreamReaderUtils.consumeStart(reader);
    152179
    153         String host = XmlStreamReaderUtils.readContent(reader, ZEEREX_NS,
     180        String host = XmlStreamReaderUtils.readContent(reader, namespace,
    154181                "host", true);
    155         int port = XmlStreamReaderUtils.readContent(reader, ZEEREX_NS,
     182        int port = XmlStreamReaderUtils.readContent(reader, namespace,
    156183                "port", true, -1);
    157184        if ((port < 0) || (port > 65535)) {
     
    159186            throw new SRUClientException("invalid port number (" + port + ")");
    160187        }
    161         String database = XmlStreamReaderUtils.readContent(reader, ZEEREX_NS,
     188        String database = XmlStreamReaderUtils.readContent(reader, namespace,
    162189                "database", true);
    163         if (XmlStreamReaderUtils.readStart(reader, ZEEREX_NS,
     190        if (XmlStreamReaderUtils.readStart(reader, namespace,
    164191                "authentication", false)) {
    165             XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS,
     192            XmlStreamReaderUtils.readEnd(reader, namespace,
    166193                    "authentication", true);
    167194        }
    168         XmlStreamReaderUtils.readEnd(reader, ZEEREX_NS, "serverInfo", true);
     195        XmlStreamReaderUtils.readEnd(reader, namespace, "serverInfo", true);
    169196        logger.debug("serverInfo: host={}, port={}, database={}, version={}, protocol={}, transport={}",
    170197                host, port, database, version, protocol, transports);
  • SRUClient/trunk/src/main/java/eu/clarin/sru/client/SRUSimpleClient.java

    r2938 r2939  
    595595                }
    596596
    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
    601606                try {
    602607                    proxy.reset(recordReader);
Note: See TracChangeset for help on using the changeset viewer.