mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-25 15:52:06 +01:00
Improve how XmlStringBuilder handles enclosing XML environments
to avoid emitting unnecessary attributes like xmlns. Also add a test for MediaElement that checks that <uri/> does not carry a xmlns attribute.
This commit is contained in:
parent
935465a11b
commit
dd4df0a5ef
3 changed files with 55 additions and 5 deletions
|
@ -56,9 +56,17 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
|
||||||
halfOpenElement(e.getElementName());
|
halfOpenElement(e.getElementName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlStringBuilder(FullyQualifiedElement ee, XmlEnvironment enclosingXmlEnvironment) {
|
public XmlStringBuilder(FullyQualifiedElement element, XmlEnvironment enclosingXmlEnvironment) {
|
||||||
this(enclosingXmlEnvironment);
|
sb = new LazyStringBuilder();
|
||||||
prelude(ee);
|
halfOpenElement(element);
|
||||||
|
if (enclosingXmlEnvironment != null
|
||||||
|
&& !enclosingXmlEnvironment.effectiveNamespaceEquals(element.getNamespace())) {
|
||||||
|
xmlnsAttribute(element.getNamespace());
|
||||||
|
}
|
||||||
|
effectiveXmlEnvironment = XmlEnvironment.builder()
|
||||||
|
.withNamespace(element.getNamespace())
|
||||||
|
.withNext(enclosingXmlEnvironment)
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlStringBuilder escapedElement(String name, String escapedContent) {
|
public XmlStringBuilder escapedElement(String name, String escapedContent) {
|
||||||
|
@ -492,7 +500,7 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlStringBuilder append(Collection<? extends Element> elements) {
|
public XmlStringBuilder append(Collection<? extends Element> elements) {
|
||||||
return append(elements, null);
|
return append(elements, effectiveXmlEnvironment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlStringBuilder append(Collection<? extends Element> elements, XmlEnvironment enclosingXmlEnvironment) {
|
public XmlStringBuilder append(Collection<? extends Element> elements, XmlEnvironment enclosingXmlEnvironment) {
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class MediaElement implements FormFieldChildElement {
|
||||||
.optAttribute("width", width)
|
.optAttribute("width", width)
|
||||||
.rightAngleBracket();
|
.rightAngleBracket();
|
||||||
|
|
||||||
xml.append(uris, xmlEnvironment);
|
xml.append(uris);
|
||||||
|
|
||||||
xml.closeElement(this);
|
xml.closeElement(this);
|
||||||
return xml;
|
return xml;
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright 2019 Florian Schmaus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.jivesoftware.smackx.mediaelement.element;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class MediaElementTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void simpleToXmlTest() throws URISyntaxException {
|
||||||
|
MediaElement.Uri uri = new MediaElement.Uri(new URI("http://example.org"), "test-type");
|
||||||
|
|
||||||
|
MediaElement mediaElement = MediaElement.builder()
|
||||||
|
.addUri(uri)
|
||||||
|
.setHeightAndWidth(16, 16)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
String xml = mediaElement.toXML().toString();
|
||||||
|
|
||||||
|
String expected = "<media xmlns='urn:xmpp:media-element' height='16' width='16'><uri type='test-type'>http://example.org</uri></media>";
|
||||||
|
assertEquals(expected, xml);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue