下面列出了怎么用javax.xml.bind.annotation.XmlValue的API类实例代码及写法,或者点击链接到github查看源代码。
@XmlValue
/* Jackson 2.0 ignores @XmlValue for methods and thus @JsonProperty. */
@JsonProperty
public String getValue() {
String value = null;
if (valueType == ValueType.NUMBER) {
BigDecimal n = getValueNumber();
value = n == null ? null : n.toPlainString();
} else if (valueType == ValueType.DATETIME) {
Timestamp t = getValueDateTime();
if (t != null) {
value = ISODateTimeFormat.dateTime().withZoneUTC().print(t.getTime());
}
} else if (valueType == ValueType.STRING) {
value = getValueString();
} else {
throw new IllegalStateException("Unsupported type: " + valueType);
}
return value;
}
/**
* Annotate the field according to the recipes given as {@link CPropertyInfo}.
*/
protected void annotate( JAnnotatable field ) {
assert(field!=null);
/*
TODO: consider moving this logic to somewhere else
so that it can be better shared, for how a field gets
annotated doesn't really depend on how we generate accessors.
so perhaps we should separate those two.
*/
// TODO: consider a visitor
if (prop instanceof CAttributePropertyInfo) {
annotateAttribute(field);
} else if (prop instanceof CElementPropertyInfo) {
annotateElement(field);
} else if (prop instanceof CValuePropertyInfo) {
field.annotate(XmlValue.class);
} else if (prop instanceof CReferencePropertyInfo) {
annotateReference(field);
}
outline.parent().generateAdapterIfNecessary(prop,field);
QName st = prop.getSchemaType();
if(st!=null)
field.annotate2(XmlSchemaTypeWriter.class)
.name(st.getLocalPart())
.namespace(st.getNamespaceURI());
if(prop.inlineBinaryData())
field.annotate(XmlInlineBinaryData.class);
}
/**
* Annotate the field according to the recipes given as {@link CPropertyInfo}.
*/
protected void annotate( JAnnotatable field ) {
assert(field!=null);
/*
TODO: consider moving this logic to somewhere else
so that it can be better shared, for how a field gets
annotated doesn't really depend on how we generate accessors.
so perhaps we should separate those two.
*/
// TODO: consider a visitor
if (prop instanceof CAttributePropertyInfo) {
annotateAttribute(field);
} else if (prop instanceof CElementPropertyInfo) {
annotateElement(field);
} else if (prop instanceof CValuePropertyInfo) {
field.annotate(XmlValue.class);
} else if (prop instanceof CReferencePropertyInfo) {
annotateReference(field);
}
outline.parent().generateAdapterIfNecessary(prop,field);
QName st = prop.getSchemaType();
if(st!=null)
field.annotate2(XmlSchemaTypeWriter.class)
.name(st.getLocalPart())
.namespace(st.getNamespaceURI());
if(prop.inlineBinaryData())
field.annotate(XmlInlineBinaryData.class);
}
/**
* Annotate the field according to the recipes given as {@link CPropertyInfo}.
*/
protected void annotate( JAnnotatable field ) {
assert(field!=null);
/*
TODO: consider moving this logic to somewhere else
so that it can be better shared, for how a field gets
annotated doesn't really depend on how we generate accessors.
so perhaps we should separate those two.
*/
// TODO: consider a visitor
if (prop instanceof CAttributePropertyInfo) {
annotateAttribute(field);
} else if (prop instanceof CElementPropertyInfo) {
annotateElement(field);
} else if (prop instanceof CValuePropertyInfo) {
field.annotate(XmlValue.class);
} else if (prop instanceof CReferencePropertyInfo) {
annotateReference(field);
}
outline.parent().generateAdapterIfNecessary(prop,field);
QName st = prop.getSchemaType();
if(st!=null)
field.annotate2(XmlSchemaTypeWriter.class)
.name(st.getLocalPart())
.namespace(st.getNamespaceURI());
if(prop.inlineBinaryData())
field.annotate(XmlInlineBinaryData.class);
}
/**
* Annotate the field according to the recipes given as {@link CPropertyInfo}.
*/
protected void annotate( JAnnotatable field ) {
assert(field!=null);
/*
TODO: consider moving this logic to somewhere else
so that it can be better shared, for how a field gets
annotated doesn't really depend on how we generate accessors.
so perhaps we should separate those two.
*/
// TODO: consider a visitor
if (prop instanceof CAttributePropertyInfo) {
annotateAttribute(field);
} else if (prop instanceof CElementPropertyInfo) {
annotateElement(field);
} else if (prop instanceof CValuePropertyInfo) {
field.annotate(XmlValue.class);
} else if (prop instanceof CReferencePropertyInfo) {
annotateReference(field);
}
outline.parent().generateAdapterIfNecessary(prop,field);
QName st = prop.getSchemaType();
if(st!=null)
field.annotate2(XmlSchemaTypeWriter.class)
.name(st.getLocalPart())
.namespace(st.getNamespaceURI());
if(prop.inlineBinaryData())
field.annotate(XmlInlineBinaryData.class);
}
/**
* Annotate the field according to the recipes given as {@link CPropertyInfo}.
*/
protected void annotate( JAnnotatable field ) {
assert(field!=null);
/*
TODO: consider moving this logic to somewhere else
so that it can be better shared, for how a field gets
annotated doesn't really depend on how we generate accessors.
so perhaps we should separate those two.
*/
// TODO: consider a visitor
if (prop instanceof CAttributePropertyInfo) {
annotateAttribute(field);
} else if (prop instanceof CElementPropertyInfo) {
annotateElement(field);
} else if (prop instanceof CValuePropertyInfo) {
field.annotate(XmlValue.class);
} else if (prop instanceof CReferencePropertyInfo) {
annotateReference(field);
}
outline.parent().generateAdapterIfNecessary(prop,field);
QName st = prop.getSchemaType();
if(st!=null)
field.annotate2(XmlSchemaTypeWriter.class)
.name(st.getLocalPart())
.namespace(st.getNamespaceURI());
if(prop.inlineBinaryData())
field.annotate(XmlInlineBinaryData.class);
}
/**
* Annotate the field according to the recipes given as {@link CPropertyInfo}.
*/
protected void annotate( JAnnotatable field ) {
assert(field!=null);
/*
TODO: consider moving this logic to somewhere else
so that it can be better shared, for how a field gets
annotated doesn't really depend on how we generate accessors.
so perhaps we should separate those two.
*/
// TODO: consider a visitor
if (prop instanceof CAttributePropertyInfo) {
annotateAttribute(field);
} else if (prop instanceof CElementPropertyInfo) {
annotateElement(field);
} else if (prop instanceof CValuePropertyInfo) {
field.annotate(XmlValue.class);
} else if (prop instanceof CReferencePropertyInfo) {
annotateReference(field);
}
outline.parent().generateAdapterIfNecessary(prop,field);
QName st = prop.getSchemaType();
if(st!=null)
field.annotate2(XmlSchemaTypeWriter.class)
.name(st.getLocalPart())
.namespace(st.getNamespaceURI());
if(prop.inlineBinaryData())
field.annotate(XmlInlineBinaryData.class);
}
/**
* Annotate the field according to the recipes given as {@link CPropertyInfo}.
*/
protected void annotate( JAnnotatable field ) {
assert(field!=null);
/*
TODO: consider moving this logic to somewhere else
so that it can be better shared, for how a field gets
annotated doesn't really depend on how we generate accessors.
so perhaps we should separate those two.
*/
// TODO: consider a visitor
if (prop instanceof CAttributePropertyInfo) {
annotateAttribute(field);
} else if (prop instanceof CElementPropertyInfo) {
annotateElement(field);
} else if (prop instanceof CValuePropertyInfo) {
field.annotate(XmlValue.class);
} else if (prop instanceof CReferencePropertyInfo) {
annotateReference(field);
}
outline.parent().generateAdapterIfNecessary(prop,field);
QName st = prop.getSchemaType();
if(st!=null)
field.annotate2(XmlSchemaTypeWriter.class)
.name(st.getLocalPart())
.namespace(st.getNamespaceURI());
if(prop.inlineBinaryData())
field.annotate(XmlInlineBinaryData.class);
}
/**
* Generates an xml element from this pojo. Translating the fields like described
* in the class description.
* @param document The document in which the nodes should be.
* @param rootName This is to use another name for the root element than the
* simple class name.
* @param pojo The pojo to take the fields from.
* @param attributes The fields which should be used as attributes and not
* as elements.
* @return The create element representing the provided pojo.
* @throws ParserConfigurationException Might throw a ParserConfigurationException.
* @throws IllegalAccessException Might throw a IllegalAccessException.
* @throws InstantiationException Might throw a InstantiationException.
*/
public Element generateSimpleElement(final Document document, final String rootName,
final Object pojo, final List<String> attributes)
throws ParserConfigurationException,
IllegalAccessException, InstantiationException {
Element rootNode = document.createElementNS(getDefaultNamespace(), rootName);
List<Field> fields = getNonTransientSimpleFields(pojo.getClass());
for (Field field : fields) {
field.setAccessible(true);
String fieldName = field.getName();
if (field.get(pojo) != null) {
if (!attributes.contains(fieldName)) {
Element element = document.createElementNS(getDefaultNamespace(), getElementName(field));
// handle CDATAs
if (field.isAnnotationPresent(XmlValue.class)) {
CDATASection cdata = document.createCDATASection(field.get(pojo).toString());
element.appendChild(cdata);
}
else {
element.setTextContent(field.get(pojo).toString());
}
rootNode.appendChild(element);
}
else {
rootNode.setAttribute(getAttributeName(field), field.get(pojo).toString());
}
}
}
return rootNode;
}
/**
* Create an XML name from the passed field. It uses the {@link XmlElement},
* {@link XmlAttribute} and {@link XmlValue} annotations to differentiate.
*
* @param aField
* Source field
* @return Never <code>null</code>.
*/
@Nonnull
public static String _getXMLName (@Nonnull final Field aField)
{
final XmlElement aElement = aField.getAnnotation (XmlElement.class);
if (aElement != null)
return "/" + aElement.name ();
final XmlAttribute aAttr = aField.getAnnotation (XmlAttribute.class);
if (aAttr != null)
return "/@" + aAttr.name ();
if (aField.getAnnotation (XmlValue.class) != null)
return "/value()";
throw new IllegalStateException ("Field is neither XML element nor attribute nor value: " + aField);
}
/**
* Returns the record type value as a string. Current implementation returns the members with
* one member per line, but it may change in any future version for adapting to common practice.
*/
@XmlValue
private String getValue() {
switch (size()) {
case 0: return null;
case 1: return String.valueOf(memberTypes[0]);
default: return toString(null, null);
}
}
/**
* Returns the record value as a string.
*/
@XmlValue
private String getValue() {
if (values != null) {
switch (Array.getLength(values)) {
case 0: break;
case 1: return String.valueOf(Array.get(values, 0));
default: return definition.toString(null, values);
}
}
return null;
}
@XmlValue
public String getValue() {
return value;
}
@XmlValue
public String getValue() {
return value;
}
@XmlValue
public String getValue() {
return value;
}
public XmlValueQuick(Locatable upstream, XmlValue core) {
super(upstream);
this.core = core;
}
protected Quick newInstance(Locatable upstream, Annotation core) {
return new XmlValueQuick(upstream, ((XmlValue) core));
}
@XmlValue
public String getText() {
return text;
}
@XmlValue
public String getValue() {
return this.value == null || this.value.isEmpty() ? null : this.value;
}
public Class<XmlValue> annotationType() {
return XmlValue.class;
}
public XmlValueQuick(Locatable upstream, XmlValue core) {
super(upstream);
this.core = core;
}
protected Quick newInstance(Locatable upstream, Annotation core) {
return new XmlValueQuick(upstream, ((XmlValue) core));
}
public Class<XmlValue> annotationType() {
return XmlValue.class;
}
@XmlValue
public String getClause() {
return clause;
}
Class<?> classForValue(Class<?> bean) {
return getAnnotatedClass(bean, XmlValue.class, a -> true);
}
public XmlValueQuick(Locatable upstream, XmlValue core) {
super(upstream);
this.core = core;
}
protected Quick newInstance(Locatable upstream, Annotation core) {
return new XmlValueQuick(upstream, ((XmlValue) core));
}
public Class<XmlValue> annotationType() {
return XmlValue.class;
}