2012-11-06 45 views
1

我試圖讓docx4j支持MOXy作爲它的JAXB實現。MOXy編組錯誤的對象

我們差不多;看到docx4j and MOXy

我遇到的問題是,我有一個class

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", name = "CT_Text", propOrder = { 
    "value" 
}) 
@XmlRootElement(name = "t") 
public class Text 

莫西被編組此爲w:delInstrText,而不是寬:T,這是我的期望/希望,以及Java 6/reference實現的功能。

schema

 <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); 
} 

這是莫西罐子:

 +- 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); 

    } 
} 

回答

1

注:我是EclipseLink JAXB (MOXy)鉛和JAXB (JSR-222)專家小組的成員。


UPDATE

我們已經能夠重現您所遇到的的EclipseLink 2.4.1的錯誤。我們無法在EclipseLink 2.4.2或2.5.0流中重現此問題。我建議下載最新的2.4.2每晚構建並嘗試出來:

我們仍在調查這個問題,以確保它是真正的固定。


原來的答案

到目前爲止,我已經無法重現從你的問題的結果時莫西被用作JAXB提供商。你能否提供一些額外的信息來幫助我重現你的用例。下面是我到目前爲止已經試過:

Java模型

我把Java模型從以下位置在GitHub上:

JAXB。屬性

我在org.docx4j.wml包中添加了一個名爲jaxb.properties的文件,以啓用MOXy作爲JAXB提供程序。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

演示

下面是我曾經嘗試重現該問題的演示代碼:

package org.docx4j.wml; 

import javax.xml.bind.*; 
import org.eclipse.persistence.Version; 

public class Demo { 

    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()); 

     Text text = new Text(); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(text, System.out); 
    } 

} 

輸出

下面是從運行演示輸出碼。正如問題中所述,我正在編組適當的根元素t而不是delInstrText

2.4.1 
class org.eclipse.persistence.jaxb.JAXBContext 
<?xml version="1.0" encoding="UTF-8"?> 
<ns0:t xmlns:ns2="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:ns1="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:ns4="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:ns3="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:ns0="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:ns5="http://schemas.openxmlformats.org/officeDocument/2006/relationships"/> 
+1

我與再現問題上的演示代碼的變化更新的問題。謝謝! – JasonPlutext

+0

@JasonPlutext - 感謝您更新您的問題。我已經用我們的發現更新了我的答案。 –

+1

驗證,與eclipselink-2.4.2.v20121107這個問題似乎已經消失。感謝您查看這個。 – JasonPlutext