문제

예방할 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top