2013-07-01 28 views
2

的Xml瞬態標註不工作的下列模型 -Xml瞬態不工作jaxb(Moxy)。?

@XmlRootElement 
public class JdfValidation { 
private String name; 
private String dataType; 
private String errorMessage; 
private String javaValidationLogic; 
protected String displayName; 
private boolean isCustom; 
private List<ValidationInputParam> validationInputParams = new ArrayList<ValidationInputParam>(); 
public IFile container; 

public JdfValidation() { 

} 

public JdfValidation(String name, String displayName, boolean isCustom) { 
    this.name = name; 
    this.displayName = displayName; 
    this.isCustom = isCustom; 
} 

@XmlTransient 
public IFile getContainer() { 
    return container; 
} 

public void setContainer(IFile container) { 
    this.container = container; 
} 

/** 
* @return the validationInputParams 
*/ 
@XmlElement 
public List<ValidationInputParam> getValidationInputParams() { 
    return validationInputParams; 
} 

/** 
* @param validationInputParams 
*   the validationInputParams to set 
*/ 
public void setValidationInputParams(
     List<ValidationInputParam> validationInputParams) { 
    this.validationInputParams = validationInputParams; 
} 

@XmlAttribute 
public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

@XmlAttribute 
public String getDataType() { 
    return dataType; 
} 

public void setDataType(String dataType) { 
    this.dataType = dataType; 
} 

@XmlAttribute 
public String getErrorMessage() { 
    return errorMessage; 
} 

public void setErrorMessage(String errorMessage) { 
    this.errorMessage = errorMessage; 
} 

@XmlElement(name = "logic") 
public String getJavaValidationLogic() { 
    return javaValidationLogic; 
} 

public void setJavaValidationLogic(String javaValidationLogic) { 
    this.javaValidationLogic = javaValidationLogic; 
} 

@XmlAttribute 
public String getDisplayName() { 
    return displayName; 
} 

public void setDisplayName(String displayName) { 
    this.displayName = displayName; 
} 

@XmlAttribute 
public boolean isCustom() { 
    return isCustom; 
} 

public void setCustom(boolean isCustom) { 
    this.isCustom = isCustom; 
} 

}

我也試過@XmlAccessorType(XmlAccessType.NONE)BU還是同樣的異常,上面默認的JAXB implementation.Plz,幫助工作。

所致:異常[的EclipseLink-50089](Eclipse持久服務 - 2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.JAXBException 異常描述:Java界面org.eclipse.core .resources.IFile不能由JAXB映射,因爲它具有多個可映射的父接口。多重的傳承不支持

回答

1

UPDATE

我們有固定的後面這個問題的bug(見:http://bugs.eclipse.org/411993)將可在2.5.1的EclipseLink 2.6.0和流七月一日起在4,2013。您可以從下面的鏈接下載一個每晚構建:


發行

似乎有當莫西被告知(與@XmlTransient)的錯誤忽略如果類型是具有多個超級接口的接口,則爲屬性。

1超級接口 - 工作

public interface IFile extends IFoo { 

} 

超過1超級接口 - 不起作用

public interface IFile extends IFoo, IBar { 

} 

您可以使用下面的bug跟蹤在這個問題上我們的進展。


替代方法

您可以使用莫西的外部映射文件來覆蓋的IFile超類,讓您的使用情況下工作(見:http://blog.bdoughan.com/2010/12/extending-jaxb-representing-annotations.html):

oxm。XML

<?xml version="1.0"?> 
<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    package-name="forum17399333"> 
    <java-types> 
     <java-type name="IFile" super-type="java.lang.Object"/> 
    </java-types> 
</xml-bindings> 

演示

import java.util.*; 
import javax.xml.bind.JAXBContext; 
import org.eclipse.persistence.jaxb.JAXBContextProperties; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     Map<String, Object> properties = new HashMap<String, Object>(1); 
     properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "forum17399333/oxm.xml"); 
     JAXBContext jc = JAXBContext.newInstance(new Class[] {JdfValidation.class}, properties); 
    } 

} 
0

另一種解決辦法可能是 -

@XmlRootElement(name = "Validator") 
public class JdfValidation { 


private Object container; //Cast this to appropriate type 

@Transient 
public Object getContainer() { 
    return container; 
} 

public void setContainer(Object container) { 
    this.container = container; 
} 
} 

人口統計學

public class Demo { 

public static void main(String[] args) throws Exception { 
    JAXBContext jc = JAXBContext.newInstance(JdfValidation.class); 

    JdfValidation jdfValidation = new JdfValidation(); 
      IFile file=getFile(); 
      jdfValidation.setContainer(file); 
      Marshaller marshaller = jc.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.marshal(jdfValidation, System.out); 
} 

    } 
相關問題