Changeset 7257 for FCSSimpleClient


Ignore:
Timestamp:
12/20/21 15:54:07 (2 years ago)
Author:
Oliver Schonefeld
Message:
  • fix NPE when parsing malformed FCS 2.0 endpoint descriptions
  • be strict when parsing FCS 2.0 endpoint descriptions
File:
1 edited

Legend:

Unmodified
Added
Removed
  • FCSSimpleClient/trunk/src/main/java/eu/clarin/sru/client/fcs/ClarinFCSEndpointDescriptionParser.java

    r7200 r7257  
    288288        // Resources
    289289        final List<ResourceInfo> resources =
    290                 parseResources(reader, 0, maxDepth,
     290                parseResources(reader, 0, maxDepth, hasAdvancedSearch,
    291291                        supportedDataViews, supportedLayers);
    292292
     
    323323
    324324    private static List<ResourceInfo> parseResources(XMLStreamReader reader,
    325             int depth, int maxDepth, List<DataView> supportedDataviews,
    326             List<Layer> supportedLayers) throws XMLStreamException {
     325            int depth, int maxDepth, boolean hasAdvancedSearch,
     326            List<DataView> supportedDataviews, List<Layer> supportedLayers)
     327            throws XMLStreamException {
    327328        List<ResourceInfo> resources = null;
    328329
     
    334335            reader.next(); // consume start tag
    335336
    336             logger.debug("pid = {}", pid);
     337            logger.debug("hasAdvSearch: {}", hasAdvancedSearch);
     338           
     339            logger.debug("parsing resource with pid = {}", pid);
    337340
    338341            final Map<String, String> title =
     
    381384            for (String dv : dvs.split("\\s+")) {
    382385                boolean found = false;
    383                 for (DataView dataview : supportedDataviews) {
    384                     if (dataview.getIdentifier().equals(dv)) {
    385                         found = true;
    386                         if (dataviews == null) {
    387                             dataviews = new ArrayList<DataView>();
     386                if (supportedDataviews != null) {
     387                    for (DataView dataview : supportedDataviews) {
     388                        if (dataview.getIdentifier().equals(dv)) {
     389                            found = true;
     390                            if (dataviews == null) {
     391                                dataviews = new ArrayList<DataView>();
     392                            }
     393                            dataviews.add(dataview);
     394                            break;
    388395                        }
    389                         dataviews.add(dataview);
    390                         break;
    391                     }
    392                 } // for
     396                    } // for
     397                }
    393398                if (!found) {
    394399                    throw new XMLStreamException("DataView with id '" + dv +
     
    410415                for (String l : ls.split("\\s+")) {
    411416                    boolean found = false;
    412                     for (Layer layer : supportedLayers) {
    413                         if (layer.getIdentifier().equals(l)) {
    414                             found = true;
    415                             if (layers == null) {
    416                                 layers = new ArrayList<Layer>();
     417                    if (supportedLayers != null) {
     418                        for (Layer layer : supportedLayers) {
     419                            if (layer.getIdentifier().equals(l)) {
     420                                found = true;
     421                                if (layers == null) {
     422                                    layers = new ArrayList<Layer>();
     423                                }
     424                                layers.add(layer);
     425                                break;
    417426                            }
    418                             layers.add(layer);
    419                             break;
    420                         }
    421                     } // for
     427                        } // for
     428                    }
    422429                    if (!found) {
    423430                        throw new XMLStreamException("Layer with id '" + l +
     
    427434                } // for
    428435                logger.debug("Layers: {}", layers);
     436            } // for
     437            if (hasAdvancedSearch && (layers == null)) {
     438                throw new XMLStreamException("Endpoint must declare " +
     439                        "all available layers (<AvailableLayers>) on a " +
     440                        "resource, if they provide the 'advanced-search' (" +
     441                        ClarinFCSConstants.CAPABILITY_ADVANCED_SEARCH +
     442                        ") capability. Offending resource id pid=" + pid +
     443                        ")", reader.getLocation());
    429444            }
    430445
     
    437452                        (nextDepth < maxDepth)) {
    438453                    subResources = parseResources(reader, nextDepth,
    439                             maxDepth, supportedDataviews, supportedLayers);
     454                            maxDepth, hasAdvancedSearch, supportedDataviews,
     455                            supportedLayers);
    440456                } else {
    441457                    XmlStreamReaderUtils.skipTag(reader, ED_NS_URI,
Note: See TracChangeset for help on using the changeset viewer.