Changeset 1965 for SRUClient


Ignore:
Timestamp:
06/01/12 13:02:04 (12 years ago)
Author:
oschonef
Message:
  • some attempt in fixing namespaces while buffering records
File:
1 edited

Legend:

Unmodified
Added
Removed
  • SRUClient/trunk/src/main/java/eu/clarin/sru/client/SRUXMLStreamReader.java

    r1963 r1965  
    661661    private static void copyStartElement(XMLStreamReader from,
    662662            XMLStreamWriter to) throws XMLStreamException {
    663         int nsCount = from.getNamespaceCount();
     663        final int nsCount = from.getNamespaceCount();
    664664        if (nsCount > 0) { // yup, got some...
    665665            for (int i = 0; i < nsCount; ++i) {
    666                 String prefix = from.getNamespacePrefix(i);
     666                String pfx = from.getNamespacePrefix(i);
    667667                String uri = from.getNamespaceURI(i);
    668                 if (prefix == null || prefix.length() == 0) { // default NS
     668                if ((pfx == null) || pfx.isEmpty()) { // default NS
    669669                    to.setDefaultNamespace(uri);
    670670                } else {
    671                     to.setPrefix(prefix, uri);
    672                 }
    673             }
    674         }
    675         to.writeStartElement(from.getPrefix(), from.getLocalName(),
     671                    to.setPrefix(pfx, uri);
     672                }
     673            }
     674        }
     675       
     676        final String prefix             = from.getPrefix();
     677        final NamespaceContext from_ctx = from.getNamespaceContext();
     678        final NamespaceContext to_ctx   = to.getNamespaceContext();
     679        boolean repair_prefix_namespace = false;
     680        if ((prefix != null) && (to_ctx.getNamespaceURI(prefix) == null)) {
     681            repair_prefix_namespace = true;
     682            to.setPrefix(prefix, from_ctx.getNamespaceURI(prefix));
     683        }
     684       
     685        to.writeStartElement(prefix, from.getLocalName(),
    676686                from.getNamespaceURI());
    677687
     
    679689            // write namespace declarations
    680690            for (int i = 0; i < nsCount; ++i) {
    681                 String prefix = from.getNamespacePrefix(i);
    682                 String uri = from.getNamespaceURI(i);
    683 
    684                 if (prefix == null || prefix.length() == 0) { // default NS
     691                String pfx = from.getNamespacePrefix(i);
     692                String uri    = from.getNamespaceURI(i);
     693
     694                if ((pfx == null) || pfx.isEmpty()) { // default NS
    685695                    to.writeDefaultNamespace(uri);
    686696                } else {
    687                     to.writeNamespace(prefix, uri);
    688                 }
    689             }
    690         }
     697                    to.writeNamespace(pfx, uri);
     698                }
     699            }
     700        }
     701        if (repair_prefix_namespace) {
     702            to.writeNamespace(prefix, from_ctx.getNamespaceURI(prefix));
     703        }
     704
    691705        int attrCount = from.getAttributeCount();
    692706        if (attrCount > 0) {
     
    706720        factory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE);
    707721
     722        // Stax2 settings
     723        factory.setProperty(XMLInputFactory2.P_INTERN_NS_URIS, Boolean.TRUE);
     724        factory.setProperty(XMLInputFactory2.P_LAZY_PARSING, Boolean.FALSE);
     725
    708726        // Woodstox settings
    709727        factory.setProperty(WstxInputProperties.P_NORMALIZE_LFS, Boolean.TRUE);
Note: See TracChangeset for help on using the changeset viewer.