/** * Called by {@link #createSW(OutputStream, Writer, String, boolean)} after all of the nessesary configuration * logic is complete. */ protected XMLStreamWriter2 createSW(String enc, WriterConfig cfg, XmlWriter xw) { if (cfg.willSupportNamespaces()) { if (cfg.automaticNamespacesEnabled()) { return new RepairingNsStreamWriter(xw, enc, cfg); } return new SimpleNsStreamWriter(xw, enc, cfg); } return new NonNsStreamWriter(xw, enc, cfg); }
protected void writeStartOrEmpty(String localName, String nsURI) throws XMLStreamException checkStartElement(localName, ""); String prefix = findElemPrefix(nsURI, mCurrElem); mValidator.validateElementStart(localName, nsURI, prefix); doWriteStartTag(prefix, localName); } else { // no prefix, more work prefix = generateElemPrefix(null, nsURI, mCurrElem); if (mValidator != null) { mValidator.validateElementStart(localName, nsURI, prefix); doWriteStartTag(prefix, localName); if (prefix == null || prefix.length() == 0) { // def NS mCurrElem.setDefaultNsUri(nsURI); doWriteDefaultNs(nsURI); } else { // explicit NS mCurrElem.addPrefix(prefix, nsURI); doWriteNamespace(prefix, nsURI);
public void writeAttribute(String nsURI, String localName, String value) throws XMLStreamException { // No need to set mAnyOutput, nor close the element if (!mStartElementOpen) { throwOutputError(ErrorConsts.WERR_ATTR_NO_ELEM); } doWriteAttr(localName, nsURI, findOrCreateAttrPrefix(null, nsURI, mCurrElem), value); }
public String validateQNamePrefix(QName name) throws XMLStreamException { /* Gets bit more complicated: we need to ensure that given URI * is properly bound... */ String uri = name.getNamespaceURI(); String suggPrefix = name.getPrefix(); String actPrefix = validateElemPrefix(suggPrefix, uri, mCurrElem); if (actPrefix == null) { // no suitable prefix, must bind /* Need to ensure that we'll pass "" as prefix, not null, so * that it is understood as "I want to use the default NS", not * as "whatever prefix, I don't care" */ if (suggPrefix == null) { suggPrefix = ""; } actPrefix = generateElemPrefix(suggPrefix, uri, mCurrElem); if (actPrefix == null || actPrefix.length() == 0) { // def NS writeDefaultNamespace(uri); } else { writeNamespace(actPrefix, uri); } } return actPrefix; }
public void writeNamespace(String prefix, String nsURI) throws XMLStreamException { /* (see discussion in 'writeDefaultNamespace()' for details on * if and how this method may get called in repairing mode) */ if (prefix == null || prefix.length() == 0) { writeDefaultNamespace(nsURI); return; } if (!mStartElementOpen) { throwOutputError(ERR_NSDECL_WRONG_STATE); } /* 01-Sep-2006, TSa: Let's only add the declaration if the prefix * is as of yet unbound. If we have to re-bind things in future, * so be it -- for now, this should suffice (and if we have to * add re-binding, must verify that no attribute, nor element * itself, is using overridden prefix) */ int value = mCurrElem.isPrefixValid(prefix, nsURI, true); if (value == SimpleOutputElement.PREFIX_UNBOUND) { mCurrElem.addPrefix(prefix, nsURI); doWriteNamespace(prefix, nsURI); } }
protected void writeStartOrEmpty(String suggPrefix, String localName, String nsURI) throws XMLStreamException checkStartElement(localName, suggPrefix); String actPrefix = validateElemPrefix(suggPrefix, nsURI, mCurrElem); if (actPrefix != null) { // fine, an existing binding we can use: if (mValidator != null) { mCurrElem = mCurrElem.createChild(actPrefix, localName, nsURI); doWriteStartTag(actPrefix, localName); } else { // nah, need to create a new binding... suggPrefix = ""; actPrefix = generateElemPrefix(suggPrefix, nsURI, mCurrElem); if (mValidator != null) { mValidator.validateElementStart(localName, nsURI, actPrefix); doWriteStartTag(actPrefix, localName); if (actPrefix == null || actPrefix.length() == 0) { // def NS mCurrElem.setDefaultNsUri(nsURI); doWriteDefaultNs(nsURI); } else { // explicit NS mCurrElem.addPrefix(actPrefix, nsURI); doWriteNamespace(actPrefix, nsURI);
writeStartElement(prefix, elemStack.getLocalName(), uri); if (nsCount > 0) { // yup, got some... for (int i = 0; i < nsCount; ++i) { writeNamespace(elemStack.getLocalNsPrefix(i), elemStack.getLocalNsURI(i)); prefix = findOrCreateAttrPrefix(prefix, uri, mCurrElem);
public void writeDefaultNamespace(String nsURI) throws XMLStreamException { /* 01-Sep-2006, TSa: The use case for calling this method is that * of caller may wanting to 'suggest' that * such a namespace should indeed be bound at this level. This * may be necessary for canonicalization, or for minimizing number * of binding declarations (all children need the ns, but root * itself not). */ if (!mStartElementOpen) { throwOutputError(ERR_NSDECL_WRONG_STATE); } /* ... We have one complication though: if the current element * uses default namespace, can not change it (attributes don't * matter -- they never use the default namespace, but either don't * belong to a namespace, or belong to one using explicit prefix) */ String prefix = mCurrElem.getPrefix(); if (prefix != null && prefix.length() > 0) { // ok, can change it mCurrElem.setDefaultNsUri(nsURI); doWriteDefaultNs(nsURI); } }
doWriteNamespace(suggPrefix, nsURI); return suggPrefix; doWriteNamespace(prefix, nsURI); return prefix;
protected void writeTypedAttribute(String prefix, String nsURI, String localName, AsciiValueEncoder enc) throws XMLStreamException { super.writeTypedAttribute(findOrCreateAttrPrefix(prefix, nsURI, mCurrElem), nsURI, localName, enc); }
throws XMLStreamException checkStartElement(localName, suggPrefix); String actPrefix = validateElemPrefix(suggPrefix, nsURI, mCurrElem); if (actPrefix != null) { // fine, an existing binding we can use: if (mValidator != null) { mCurrElem = mCurrElem.createChild(actPrefix, localName, nsURI); doWriteStartTag(actPrefix, localName); } else { // nah, need to create a new binding... suggPrefix = ""; actPrefix = generateElemPrefix(suggPrefix, nsURI, mCurrElem); if (mValidator != null) { mValidator.validateElementStart(localName, nsURI, actPrefix); doWriteStartTag(actPrefix, localName); if (actPrefix == null || actPrefix.length() == 0) { // def NS mCurrElem.setDefaultNsUri(nsURI); doWriteDefaultNs(nsURI); } else { // explicit NS mCurrElem.addPrefix(actPrefix, nsURI); doWriteNamespace(actPrefix, nsURI);
@Override public String validateQNamePrefix(QName name) throws XMLStreamException { /* Gets bit more complicated: we need to ensure that given URI * is properly bound... */ String uri = name.getNamespaceURI(); String suggPrefix = name.getPrefix(); String actPrefix = validateElemPrefix(suggPrefix, uri, mCurrElem); if (actPrefix == null) { // no suitable prefix, must bind /* Need to ensure that we'll pass "" as prefix, not null, so * that it is understood as "I want to use the default NS", not * as "whatever prefix, I don't care" */ if (suggPrefix == null) { suggPrefix = ""; } actPrefix = generateElemPrefix(suggPrefix, uri, mCurrElem); if (actPrefix == null || actPrefix.length() == 0) { // def NS writeDefaultNamespace(uri); } else { writeNamespace(actPrefix, uri); } } return actPrefix; }
public void writeNamespace(String prefix, String nsURI) throws XMLStreamException { /* (see discussion in 'writeDefaultNamespace()' for details on * if and how this method may get called in repairing mode) */ if (prefix == null || prefix.length() == 0) { writeDefaultNamespace(nsURI); return; } if (!mStartElementOpen) { throwOutputError(ERR_NSDECL_WRONG_STATE); } /* 01-Sep-2006, TSa: Let's only add the declaration if the prefix * is as of yet unbound. If we have to re-bind things in future, * so be it -- for now, this should suffice (and if we have to * add re-binding, must verify that no attribute, nor element * itself, is using overridden prefix) */ int value = mCurrElem.isPrefixValid(prefix, nsURI, true); if (value == SimpleOutputElement.PREFIX_UNBOUND) { mCurrElem.addPrefix(prefix, nsURI); doWriteNamespace(prefix, nsURI); } }
writeStartElement(prefix, elemStack.getLocalName(), uri); if (nsCount > 0) { // yup, got some... for (int i = 0; i < nsCount; ++i) { writeNamespace(elemStack.getLocalNsPrefix(i), elemStack.getLocalNsURI(i)); prefix = findOrCreateAttrPrefix(prefix, uri, mCurrElem);
public void writeDefaultNamespace(String nsURI) throws XMLStreamException { /* 01-Sep-2006, TSa: The use case for calling this method is that * of caller may wanting to 'suggest' that * such a namespace should indeed be bound at this level. This * may be necessary for canonicalization, or for minimizing number * of binding declarations (all children need the ns, but root * itself not). */ if (!mStartElementOpen) { throwOutputError(ERR_NSDECL_WRONG_STATE); } /* ... We have one complication though: if the current element * uses default namespace, can not change it (attributes don't * matter -- they never use the default namespace, but either don't * belong to a namespace, or belong to one using explicit prefix) */ String prefix = mCurrElem.getPrefix(); if (prefix != null && prefix.length() > 0) { // ok, can change it mCurrElem.setDefaultNsUri(nsURI); doWriteDefaultNs(nsURI); } }
doWriteNamespace(suggPrefix, nsURI); return suggPrefix; doWriteNamespace(prefix, nsURI); return prefix;
@Override protected void writeTypedAttribute(String prefix, String nsURI, String localName, AsciiValueEncoder enc) throws XMLStreamException { super.writeTypedAttribute(findOrCreateAttrPrefix(prefix, nsURI, mCurrElem), nsURI, localName, enc); }
throws XMLStreamException checkStartElement(localName, ""); String prefix = findElemPrefix(nsURI, mCurrElem); mValidator.validateElementStart(localName, nsURI, prefix); doWriteStartTag(prefix, localName); } else { // no prefix, more work prefix = generateElemPrefix(null, nsURI, mCurrElem); if (mValidator != null) { mValidator.validateElementStart(localName, nsURI, prefix); doWriteStartTag(prefix, localName); if (prefix == null || prefix.length() == 0) { // def NS mCurrElem.setDefaultNsUri(nsURI); doWriteDefaultNs(nsURI); } else { // explicit NS mCurrElem.addPrefix(prefix, nsURI); doWriteNamespace(prefix, nsURI);
throws XMLStreamException checkStartElement(localName, suggPrefix); String actPrefix = validateElemPrefix(suggPrefix, nsURI, mCurrElem); if (actPrefix != null) { // fine, an existing binding we can use: if (mValidator != null) { mCurrElem = mCurrElem.createChild(actPrefix, localName, nsURI); doWriteStartTag(actPrefix, localName); } else { // nah, need to create a new binding... suggPrefix = ""; actPrefix = generateElemPrefix(suggPrefix, nsURI, mCurrElem); if (mValidator != null) { mValidator.validateElementStart(localName, nsURI, actPrefix); doWriteStartTag(actPrefix, localName); if (actPrefix == null || actPrefix.length() == 0) { // def NS mCurrElem.setDefaultNsUri(nsURI); doWriteDefaultNs(nsURI); } else { // explicit NS mCurrElem.addPrefix(actPrefix, nsURI); doWriteNamespace(actPrefix, nsURI);
public void writeAttribute(String prefix, String nsURI, String localName, String value) throws XMLStreamException { if (!mStartElementOpen) { throwOutputError(ErrorConsts.WERR_ATTR_NO_ELEM); } doWriteAttr(localName, nsURI, findOrCreateAttrPrefix(prefix, nsURI, mCurrElem), value); }