생성 된 XML에서 'standalone =“예”'제거
-
07-07-2019 - |
문제
예방할 jaxb 설정을 알고 있습니까? 독립형 = "예" 결과 XML에서 생성되는 것입니까?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
해결책
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);
아니오를 가질 수 있습니다
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
그러나 나는이 모범 사례를 고려하지 않을 것입니다.
다른 팁
JAXB에서 JDK1.6의 일부입니다
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
당신은 사용할 수 있습니다
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
또는
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.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에, 따라서 피하십시오 독립형 = "예" 재산.
다른 사람이 여전히이 문제로 어려움을 겪고있는 경우
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
모든 XML 선언을 제거하고 직접 작성하려면 String
출력 스트림 / 방법의 시작 부분에
문서를 의존하는 경우 DOCTYPE
(예 : 명명 된 엔티티를 사용) 그러면 독립형이 멈출 수 있으므로 standalone="yes"
XML 선언에서는 허용되지 않습니다.
그러나 독립형 XML은 어디서나 사용할 수 있지만, 비 스탠다론은 외부를로드하지 않는 XML 파서에게는 문제가됩니다.
XML을 지원하지 않는 소프트웨어와의 상호 운용성이 아니라 일부 끔찍한 정규 수프와 상호 운용성을 제외 하고이 선언이 어떻게 문제가 될 수 있는지 알 수 없습니다.
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과 함께 저에게 효과가있었습니다. 독립형 = "아니오 "는 XML 부품의 나머지 부분 만 얻기 위해 제거 할 수 있습니다.
기본 javax.xml 패키지 만 사용하는 경우 Marshaller의 JAXB_FRAGMENT 옵션을 'True'로 설정하고 (기본 XML 프로세싱 명령어를 생략 함) XMLStreamWriter의 WriteProcessingInstruction 메소드를 사용하여 자신의 삽입을 할 수 있습니다.
xmlStreamWriter.writeProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
jaxbMarshaller.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.marshal(object, xmlStreamWriter);
xmlStreamWriter.writeEndDocument();
사용할 수 있습니다 : Marshaller.setProperty ( "jaxb.fragment", boolean.true);
Java 8에서 저에게 효과적입니다
속성 예외가 발생하는 경우 다음 구성을 추가하십시오.
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);
나는 "권한"을 언급하기에 충분한 "평판"이 없습니다. ;-)
@debasis, 지정한 속성에 유의하십시오.
"com.sun.xml.internal.bind.xmlHeaders"
해야한다:
"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)
당신이했던 것처럼 "내부"속성을 사용하면 javax.xml.bind.propernyException