Не уверен, есть ли другой способ сделать это, но я исправил префикс, создав сопоставитель пространства имен:
public class DefaultNamespacePrefixMapper extends NamespacePrefixMapper {
private Map<String, String> namespaceMap = new HashMap<>();
/**
* Create mappings.
*/
public DefaultNamespacePrefixMapper() {
namespaceMap.put("http://www.sitemaps.org/schemas/sitemap/0.9", "");
namespaceMap.put("http://www.google.com/schemas/sitemap-image/1.1", "image");
}
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
return namespaceMap.getOrDefault(namespaceUri, suggestion);
}
}
А при использовании маршаллера я просто установил:
Marshaller m = context.createMarshaller();
DefaultNamespacePrefixMapper mapper = new DefaultNamespacePrefixMapper();
m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", mapper);
Мой XML выглядит правильно точно так же, как документация Google.