X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Fxml%2FDomContent.java;h=ac863403deed8138a298cb25a0efd5ce098c7d0a;hb=a8e6930465a0cdeece0a80dacc03a0518dc14dff;hp=b4931220b2b8077979ab172f0ee5de53915fba6f;hpb=eb4cc3db3bf141c229f0f7ff929daff108bee6d2;p=lgpl%2Fargeo-commons.git
diff --git a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java
index b4931220b..ac863403d 100644
--- a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java
+++ b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java
@@ -25,6 +25,7 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
+/** Content persisted as a DOM element. */
public class DomContent extends AbstractContent implements ProvidedContent {
private final ProvidedSession session;
@@ -128,12 +129,31 @@ public class DomContent extends AbstractContent implements ProvidedContent {
Object previous = get(key);
String namespaceUriOrNull = XMLConstants.NULL_NS_URI.equals(key.getNamespaceURI()) ? null
: key.getNamespaceURI();
+ String prefixToUse = registerPrefixIfNeeded(key);
element.setAttributeNS(namespaceUriOrNull,
- namespaceUriOrNull == null ? key.getLocalPart() : key.getPrefix() + ":" + key.getLocalPart(),
+ namespaceUriOrNull == null ? key.getLocalPart() : prefixToUse + ":" + key.getLocalPart(),
value.toString());
return previous;
}
+ protected String registerPrefixIfNeeded(QName name) {
+ String namespaceUriOrNull = XMLConstants.NULL_NS_URI.equals(name.getNamespaceURI()) ? null
+ : name.getNamespaceURI();
+ String prefixToUse;
+ if (namespaceUriOrNull != null) {
+ String registeredPrefix = provider.getPrefix(namespaceUriOrNull);
+ if (registeredPrefix != null) {
+ prefixToUse = registeredPrefix;
+ } else {
+ provider.registerPrefix(name.getPrefix(), namespaceUriOrNull);
+ prefixToUse = name.getPrefix();
+ }
+ } else {
+ prefixToUse = null;
+ }
+ return prefixToUse;
+ }
+
@Override
public boolean hasText() {
// return element instanceof Text;
@@ -204,8 +224,9 @@ public class DomContent extends AbstractContent implements ProvidedContent {
Document document = this.element.getOwnerDocument();
String namespaceUriOrNull = XMLConstants.NULL_NS_URI.equals(name.getNamespaceURI()) ? null
: name.getNamespaceURI();
+ String prefixToUse = registerPrefixIfNeeded(name);
Element child = document.createElementNS(namespaceUriOrNull,
- namespaceUriOrNull == null ? name.getLocalPart() : name.getPrefix() + ":" + name.getLocalPart());
+ namespaceUriOrNull == null ? name.getLocalPart() : prefixToUse + ":" + name.getLocalPart());
element.appendChild(child);
return new DomContent(this, child);
}
@@ -226,6 +247,7 @@ public class DomContent extends AbstractContent implements ProvidedContent {
}
+ @SuppressWarnings("unchecked")
@Override
public A adapt(Class clss) throws IllegalArgumentException {
if (CharBuffer.class.isAssignableFrom(clss)) {
@@ -236,6 +258,7 @@ public class DomContent extends AbstractContent implements ProvidedContent {
return super.adapt(clss);
}
+ @SuppressWarnings("unchecked")
public CompletableFuture write(Class clss) {
if (String.class.isAssignableFrom(clss)) {
CompletableFuture res = new CompletableFuture<>();