我对JAXB 2.2.11 文档感到困惑, 其中属性被描述为com.sun.xml.bind.xmlHeaders但是当我尝试时:
javax.xml.bind.PropertyException: name: com.sun.xml.bind.xmlHeaders
Run Code Online (Sandbox Code Playgroud)
但是使用com.sun.xml.internal.bind.xmlHeaders(note: internal) 有效。
所以我的问题实际上是关于这样做的基本原理。我在看错误的文档吗?哪里internal来的?
public static void main(String[] args) throws JAXBException {
MyElement myxml = new MyElement();
JAXBContext context = JAXBContext.newInstance(MyElement.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders","");
//marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders","<DOCTYPE>");
marshaller.marshal(myxml, System.out);
}
Run Code Online (Sandbox Code Playgroud)
确保 JAXB 的正确实现位于类路径上。显然,除了 JDK 附带的实现之外,还有多种“参考实现”可供选择。
财产:com.sun.xml.internal.bind.xmlHeaders
javax.xml.bind:jaxb-api:2.2.11财产:com.sun.xml.bind.xmlHeaders
org.glassfish.jaxb:jaxb-runtime:2.2.11com.sun.xmlbind:jaxb-core:2.2.11加com.sun.xmlbind:jaxb-impl:2.2.11如果您使用 Maven:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.2.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
支持com.sun.xml.bind.xmlHeaders(否internal)。
或者如果您使用:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
你也得到com.sun.xml.bind.xmlHeaders.
但如果你使用:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
你只会得到com.sun.xml.internal.bind.xmlHeaders.
它们都是 JAXB 2.2.11,但来自不同的供应商/提供商,因此它们在支持的编组器属性等方面有所不同(因为其中一些实际上不是 JAXB 规范的一部分)。
| 归档时间: |
|
| 查看次数: |
2838 次 |
| 最近记录: |