Я пытаюсь, чтобы docx4j поддерживал MOXy в качестве реализации JAXB.
Мы в значительной степени там; см. docx4j и MOXy
У меня проблема в том, что у меня есть класс:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", name = "CT_Text", propOrder = {
"value"
})
@XmlRootElement(name = "t")
public class Text
MOXy упорядочивает это в w:delInstrText вместо w:t, чего я ожидал/надеялся, и что делают эталонные реализации Java 6/.
Из схемы:
<xsd:element name="t" type="CT_Text">
<xsd:annotation>
<xsd:documentation>Text</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="delInstrText" type="CT_Text">
<xsd:annotation>
<xsd:documentation>Deleted Field Code</xsd:documentation>
</xsd:annotation>
</xsd:element>
FWIW, ObjectFactory содержит:
public Text createText() {
return new Text();
}
@XmlElementDecl(namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", name = "delInstrText", scope = R.class)
public JAXBElement<Text> createRDelInstrText(Text value) {
return new JAXBElement<Text>(_RDelInstrText_QNAME, Text.class, R.class, value);
}
Это с банками MOXy:
+- org.eclipse.persistence:org.eclipse.persistence.moxy:jar:2.4.1
| +- org.eclipse.persistence:org.eclipse.persistence.core:jar:2.4.1
| | \- org.eclipse.persistence:org.eclipse.persistence.asm:jar:3.3.1.v201206041142
| \- org.eclipse.persistence:org.eclipse.persistence.antlr:jar:3.2.0.v201206041011
Обновление:
Вот тестовый пример:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import org.docx4j.wml.R;
import org.docx4j.wml.Text;
public class MOXyTest {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance("org.docx4j.wml");
// System.out.println(Version.getVersion());
// System.out.println(jc.getClass());
R run = new R();
Text text = new Text();
run.getContent().add(text);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(run, System.out);
}
}