У меня есть веб-сервис для экспорта файлов изображений. Сущности веб-службы определены в схеме XSD, и с помощью xjc мы генерируем классы java, используемые в ответе службы.
В XSD изображение определяется как complexType, расширяющий простой тип base64Binary.
<xsd:complexType name="image">
<xsd:simpleContent>
<xsd:extension base="xsd:base64Binary">
<xsd:attribute name="nil" type="xsd:boolean" use="optional"/>
<xsd:attribute name="overwrite" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="origin" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
С помощью xjc мы генерируем классы java, и я получаю следующее:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "image", propOrder = {
"value"
})
public class Image {
@XmlValue
protected byte[] value;
@XmlAttribute(name = "nil")
protected Boolean nil;
@XmlAttribute(name = "overwrite")
protected Boolean overwrite;
@XmlAttribute(name = "origin")
protected String origin;
Свойство value имеет аннотацию @XMlValue вместо @XmlSchemaType (name = "base64Binary").
При тестировании веб-службы с использованием SoapUI вместо получения строки base64 с изображением я получаю результат toString () изображения байтового массива.
[B @ 11a0f47b
Но если я вручную изменю аннотацию @XmlValue на @XmlSchemaType (name = "base64Binary"), результат будет правильным.
<ns1:value>LzlqLzRBQVFTa1pKUmdBQkFnQUFBUU....</ns1:value>