protected PropertyInfoImpl(ClassInfoImpl<T, C, F, M> parent, PropertySeed<T, C, F, M> spi) {
this.seed = spi;
this.parent = parent;
if (parent == null)
/*
* Various people reported a bug where this parameter is somehow
* null. In an attempt to catch the error better, let's do an
* explicit check here.
*
* http://forums.java.net/jive/thread.jspa?threadID=18479
* http://forums.java.net/jive/thread.jspa?messageID=165946
*/
throw new AssertionError();
MimeType mt = Util.calcExpectedMediaType(seed, parent.builder);
if (mt != null && !kind().canHaveXmlMimeType) {
parent.builder.reportError(new IllegalAnnotationException(Messages.ILLEGAL_ANNOTATION.format(XmlMimeType.class.getName()), seed.readAnnotation(XmlMimeType.class)));
mt = null;
}
this.expectedMimeType = mt;
this.inlineBinary = seed.hasAnnotation(XmlInlineBinaryData.class);
T t = seed.getRawType();
// check if there's an adapter applicable to the whole property
XmlJavaTypeAdapter xjta = getApplicableAdapter(t);
if (xjta != null) {
isCollection = false;
adapter = new Adapter<T, C>(xjta, reader(), nav());
} else {
// check if the adapter is applicable to the individual item in the
// property
this.isCollection = nav().isSubClassOf(t, nav().ref(Collection.class)) || nav().isArrayButNotByteArray(t);
xjta = getApplicableAdapter(getIndividualType());
if (xjta == null) {
// ugly ugly hack, but we implement swaRef as adapter
XmlAttachmentRef xsa = seed.readAnnotation(XmlAttachmentRef.class);
if (xsa != null) {
parent.builder.hasSwaRef = true;
adapter = new Adapter<T, C>(nav().asDecl(SwaRefAdapter.class), nav());
} else {
adapter = null;
// if this field has adapter annotation but not applicable,
// that must be an error of the user
xjta = seed.readAnnotation(XmlJavaTypeAdapter.class);
if (xjta != null) {
T ad = reader().getClassValue(xjta, "value");
parent.builder.reportError(new IllegalAnnotationException(Messages.UNMATCHABLE_ADAPTER.format(nav().getTypeName(ad), nav().getTypeName(t)), xjta));
}
}
} else {
adapter = new Adapter<T, C>(xjta, reader(), nav());
}
}
this.id = calcId();
this.schemaType = Util.calcSchemaType(reader(), seed, parent.clazz, getIndividualType(), this);
}
PropertyInfoImpl.java 文件源码
java
阅读 27
收藏 0
点赞 0
评论 0
项目:cxf-plus
作者:
评论列表
文章目录