2012-11-06 3 views
1

Я пытаюсь поддерживать docx4j MOXy как реализацию JAXB.MOXy marshalling wrong object

Мы в значительной степени там; см 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 

Moxy является сортировочной это ж: delInstrText, вместо ш: т, что является тем, что я ожидал бы/надежда , и что делают реализации 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); 
} 

Это с 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    

Update:

Вот тестовый пример:

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 ночной сборки и пытаемся его:

Мы все еще изучаем эту проблему, чтобы убедиться, что он действительно фиксирован.


ОРИГИНАЛЬНЫЙ ОТВЕТ

До сих пор я не смог воспроизвести результаты из вашего вопроса, когда Moxy используется в качестве поставщика JAXB. Не могли бы вы предоставить дополнительную информацию, которая поможет мне воспроизвести ваш вариант использования. Ниже то, что я пытался до сих пор:

Java Модель

я взял модель Java из следующего места на GitHub:

JAXB.свойства

Я добавил файл jaxb.properties в пакет org.docx4j.wml, чтобы включить MOXy в качестве поставщика JAXB.

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

Demo

Ниже демонстрационный код, который я использовал, чтобы попытаться воспроизвести проблему:

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

 Смежные вопросы

  • Нет связанных вопросов^_^