RestEasy 2.3.4 を使用しています。NPE に遭遇しています。私はジェネリック基本クラス ValueContainer を持っています。これは、ジェネリック パラメータを適切な型に置き換えることによって、StringValue、IntegerValue、BooleanValue などとして拡張する予定です。
以下に示すように、拡張クラスをデータ転送オブジェクトとして使用して実験しています。ただし、JAXB 処理で NPE に遭遇しています。つまり、JAXB の拡張クラスを正しく扱っていません。お知らせ下さい。それを行う正しい方法は何ですか?ありがとうございました。
基本クラス:
@XmlAccessorType(XmlAccessType.FIELD)
public class ValueContainer<T> {
@XmlAttribute
protected T value;
public ValueContainer() {
}
public ValueContainer(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
拡張クラスの例:
@XmlRootElement (name="integervalue")
public class IntegerValue extends ValueContainer<Integer> {
public IntegerValue() {
}
public IntegerValue(Integer value) {
super(value);
}
}
jax-rs API インターフェース:
@GET
@Path("/status/{what}")
IntegerValue getStatus(@PathParam ("what")Integer what) ;
API 実装:
@Override
public
IntegerValue getStatus(Integer what) {
return new IntegerValue(what);
}
ブラウザが http:.../status/1 を呼び出すと、config が null を返す NPE の原因:
package org.jboss.resteasy.plugins.providers.jaxb;
.....
protected JAXBContext createContextObject(Annotation[] parameterAnnotations, Class... classes) throws JAXBException
{
JAXBConfig config = FindAnnotation.findAnnotation(parameterAnnotations, JAXBConfig.class);
return new JAXBContextWrapper(config, classes);
}