JAXB Как удалить префикс пространства имен ns2 по умолчанию в XML - PullRequest
0 голосов
/ 08 ноября 2019

При добавлении XML-запроса создания префикса по умолчанию добавлен префикс «ns2» с объявлением пространства имен.

Я получаю XML-запрос в следующем формате.

<ns2:ARTNCIS xmlns:ns2="http://namespace_uri">
    <ARTNCIS>
        <IDOCDATA>
            ...
        </IDOCDATA>
    </ARTNCIS>
</ns2:ARTNCIS>

Ожидаемый XML-запрос должен быть таким, как показано ниже,

<ARTNCIS xmlns="http://namespace_uri">
    <ARTNCIS>
        <IDOCDATA>
          ...
        </IDOCDATA>
    </ARTNCIS>
</ARTNCIS>

Ниже представлен файл package-info.java.

@XmlSchema(
    namespace = "http://namespace_uri",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED,
    xmlns={@XmlNs(prefix = "", namespaceURI = "http://namespace_uri")}
    )
package com.vam.abc.motor;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;

При маршалинге элемента JAXB добавлен NamespacePrefixMapper для удаления префикса ns2 по умолчанию. Найдите ниже код,

NamespacePrefixMapper mapper = new NamespacePrefixMapper() {
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
        if ("http://namespace_uri".equals(namespaceUri) && !requirePrefix)
            return "";
        return suggestion;
    }
};
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
marshaller.marshal(reqObject, document);

Ниже моя декларация корневого элемента.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "artncis" })
@XmlRootElement(name = "ARTNCIS")
public class ARTNCIS {
...
}
...