Знаете ли вы о настройке JAXB, предотвращающей создание standalone = "yes" в итоговом XML?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
xml
xsd
jaxb
xml-binding
Йохан Пелгрим
источник
источник
Ответы:
Это свойство:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
... может использоваться без:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Однако я бы не стал рассматривать эту лучшую практику.
источник
в JAXB, который является частью JDK1.6
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
источник
standalone
атрибут в объявлении XML.Вы можете использовать
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
или же
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false)
чтобы отключить объявление XML по умолчанию, а затем добавить свое собственное объявление XML,
<?xml version="1.0" encoding="UTF-8"?>
по
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
в сгенерированный xml, избегая, таким образом, свойства standalone = "yes" .
источник
просто если кто-то все еще борется с этой проблемой, вы можете рассмотреть возможность использования
чтобы удалить все объявления XML и просто написать свое собственное
String
в начале потока / метода выводаисточник
Если вы сделаете документ зависимым от
DOCTYPE
(например, используете именованные сущности), он перестанет быть автономным, поэтомуstandalone="yes"
он не будет разрешен в декларации XML.Однако автономный XML можно использовать где угодно, в то время как автономный является проблематичным для синтаксических анализаторов XML, которые не загружают внешние файлы.
Я не понимаю, как это объявление может быть проблемой, кроме как для взаимодействия с программным обеспечением, которое не поддерживает XML, а какой-то ужасный суп с регулярными выражениями.
источник
DOCTYPE
?jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
Это сработало для меня с JDK1.7. standalone = \ "no \" можно удалить, чтобы получить только остальную часть xml
источник
Если вы используете только пакет javax.xml по умолчанию, вы можете установить для параметра JAXB_FRAGMENT маршаллера значение true (это опускает инструкцию обработки xml по умолчанию) и использовать метод writeProcessingInstruction XMLStreamWriter для вставки своего собственного:
источник
Вы можете использовать: marshaller.setProperty ("jaxb.fragment", Boolean.TRUE);
У меня работает на Java 8
источник
У меня недостаточно высокой «репутации», чтобы иметь «привилегию» комментировать. ;-)
@Debasis, обратите внимание, что указанное вами свойство:
должно быть:
Если я использую "внутреннее" свойство, как вы, я получаю исключение javax.xml.bind.PropertyException
источник
Если вы получаете исключение свойства, добавьте следующую конфигурацию:
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlDeclaration", Boolean.FALSE); jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
источник
Я использую Java 1.8 и JAXB 2.3.1
Во-первых, обязательно используйте java 1.8 в pom.xml
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
Затем в исходном коде я использовал: (ключ был внутренней частью)
// remove standalone=yes marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
источник
просто попробуй
private String marshaling2(Object object) throws JAXBException, XMLStreamException { JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass()); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); StringWriter writer = new StringWriter(); writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); jaxbMarshaller.marshal(object, writer); return writer.toString(); }
источник
Если у тебя есть
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
но хочу этого:
<?xml version="1.0" encoding="UTF-8"?>
Просто делать:
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
источник