2012-03-07 14 views
3

私はJoda Timeを宣言するクラスを持っていますDateTimeフィールド。JAXBが@XmlTransientフィールドのゼロ引数生成子エラーをスローします

ただし、この値はunmarhsallingプロセスによって設定されず、後でafterUnmarhsalメソッドで設定されます。

したがって、フィールドはXmlTransientをマークされている:起動しようとすると

@XmlTransient 
private DateTime startTime; 

はしかし、私はこのエラーに直面しています:

JAXBは、このクラスを気にしなければならないのはなぜ

javax.xml.bind.JAXBException: Exception Description: The class org.joda.time.DateTime$Property requires a zero argument constructor or a specified factory method. Note that non-static inner classes do not have zero argument constructors and are not supported. - with linked exception: [Exception [EclipseLink-50001] (Eclipse Persistence Services - 2.2.0.v20110202-r8913) ...

、それは明らかにマーシャリングのために一過性であることを考えると、アンマーシャリングの目的は&ですか?

このフィールドを無視するようにJAXBに指示するにはどうすればよいですか?私はそこにファクトリメソッドを置くことができることを知っていますが、ファクトリがその値をインスタンス化できないことを考えると、意味がないようです(afterUnmarshalで行われています)

+1

このバグはおなじみです(私は調査します)。あなたは新しいバージョンを試しましたか?現在のリリースは2.3.2です:http://www.eclipse.org/eclipselink/downloads/ –

+0

@BlaiseDoughanフォローアップと最新版のヘッドアップをありがとう。 2.3.2( '2.3.2.v20111125-r10461')で試したところ、同じエラーが出ました。 FYI - Wikiの[Mavenページ](http://wiki.eclipse.org/EclipseLink/Maven#Available_Released_Versions)は古く、2.2.0までのリリースのみがリストされています(これは私が逃した方法です)。 –

+0

私は答えを投稿しており(http://stackoverflow.com/a/9619140/383861)、wikiページを更新しました(http://wiki.eclipse.org/EclipseLink/Maven#Available_Released_Versions)。 –

答えて

1

EclipseLink 2.2.0のバグは、後のEclipseLinkリリースで修正されています。あなたはまだフィールドを使用すると、デフォルトのアクセス(XmlAccessType.PUBLIC)を使用する場合は、最新のEclipseLinkリリースでは、この例外を見ますが、注釈を付けます:

package forum9610190; 

import javax.xml.bind.annotation.XmlTransient; 
import org.joda.time.DateTime; 

public class Root { 

    @XmlTransient 
    private DateTime startTime; 

    public DateTime getStartTime() { 
     return startTime; 
    } 

    public void setStartTime(DateTime startTime) { 
     this.startTime = startTime; 
    } 

} 

オプション#1 - プロパティ

代わりの注釈フィールドに注釈を付けます、あなたは@XmlTransientで(getメソッド)プロパティに注釈をつけることができます。

package forum9610190; 

import javax.xml.bind.annotation.XmlTransient; 
import org.joda.time.DateTime; 

public class Root { 

    private DateTime startTime; 

    @XmlTransient 
    public DateTime getStartTime() { 
     return startTime; 
    } 

    public void setStartTime(DateTime startTime) { 
     this.startTime = startTime; 
    } 

} 

オプション#2 - フィールドに注釈を付けると@XmlAccessorTypeを使う(XmlAcceをssType.FIELD)

あなたがフィールドに注釈を付けたい場合は、あなたがあなたのクラスの@XmlAccessorType(XmlAccessType.FIELD)指定する必要があります。詳細情報

package forum9610190; 

import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlTransient; 
import org.joda.time.DateTime; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Root { 

    @XmlTransient 
    private DateTime startTime; 

    public DateTime getStartTime() { 
     return startTime; 
    } 

    public void setStartTime(DateTime startTime) { 
     this.startTime = startTime; 
    } 

} 

関連する問題