Java REST サービスの実装で非常に奇妙な問題が発生しています。私は次のモデルを受信しようとしています:
@Data @EqualsAndHashCode(callSuper=false, of={"primaryKey"})
@Entity @Table(name = "T_UNIQUE_IDENT_TYPE")
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@XmlRootElement(name="UniqueIdentifierType") @XmlAccessorType(XmlAccessType.FIELD)
public class UniqueIdentifierType extends AbstractEntityWithTime implements Serializable {
private static final long serialVersionUID = 1L;
@Id @Basic(optional = false) @Column(name = "F_TYPE_PK") @XmlTransient
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="S_UNIQUE_IDENT_TYPE") @SequenceGenerator(name="S_UNIQUE_IDENT_TYPE",sequenceName="S_UNIQUE_IDENT_TYPE")
private Long primaryKey;
@Column(name = "F_NAME", nullable=false, length=50)
private String typeName;
@Basic(optional = false) @Column(name = "F_CREATION_TIME") @Temporal(TemporalType.TIMESTAMP) @XmlTransient
private Calendar creationTime;
@Basic(optional = false) @Column(name = "F_LASTMODIFY_TIME") @Temporal(TemporalType.TIMESTAMP) @XmlTransient
private Calendar lastModifyTime;
@JoinColumn(name = "F_UNIT_PK", referencedColumnName = "F_UNIT_PK") @ManyToOne(optional = false) @XmlTransient
private SoftwareProviderUnit softwareProviderUnit;
}
私の GET レスト サービスには次の署名があります。
@GET
@Path("/{name}")
public UniqueIdentifierType get(@PathParam("unitId") final Long unitId, @PathParam("name") final String name) throws WebApplicationException {
この GET サービスで呼び出しを行うたびに、次を含む 500 エラーが表示されます
java.lang.AssertionError: JAXBException occurred : 2 counts of IllegalAnnotationExceptions
次の2つのエラーまで追跡できました。
javassist.util.proxy.MethodHandler is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at javassist.util.proxy.MethodHandler
at private javassist.util.proxy.MethodHandler com.rp.central.model.UniqueIdentifierType_$$_javassist_21.handler
at com.rp.central.model.UniqueIdentifierType_$$_javassist_21
javassist.util.proxy.MethodHandler does not have a no-arg default constructor.
this problem is related to the following location:
at javassist.util.proxy.MethodHandler
at private javassist.util.proxy.MethodHandler com.rp.central.model.UniqueIdentifierType_$$_javassist_21.handler
at com.rp.central.model.UniqueIdentifierType_$$_javassist_21
奇妙なことに、GET メソッドのシグネチャを List を返すように変更すると、typeName フィールド以外のすべてのフィールドを持つオブジェクトの JSON ビューで 200 が返されます。例外は何らかの形でそのフィールドに関連していると推測しています。次のような明示的なゲッターを追加しようとしました
@XmlElement(name="typeName")
public String getTypeName() {
return typeName;
}
typeName を送信するように強制しようとすると、これは型名を GET メソッドの「リスト」バージョンに取得しますが、リスト以外の場合は 500 を返します。奇妙なことに、これとまったく同じように見え、問題なく動作する別のモデルがあります。私はしばらくこれに頭を悩ませてきましたが、どんな助けも大歓迎です。
ありがとうございました。