次の方法で画像を受け入れる Web サービスに TIFF 画像を送信しようとしています (これはもちろん、より大きな WSDL の一部にすぎません)。
<complexType name="ArrayOfImage">
<sequence>
<element maxOccurs="unbounded" name="image" type="xsd:hexBinary"/>
</sequence>
</complexType>
データは次の方法でロードされます。enclosureType は JAX-WS RI によって生成されます ( JAX-WS RI 2.1.7-b01-
)。
final List<byte[]> imgData = new LinkedList<byte[]>();
for (final Iterator<File> iterator = files.iterator(); iterator.hasNext(); ) {
imgData.add(Files.toByteArray(iterator.next())); //Files class from Guava release 13
}
enclosingType.setArrayOfImage(imgData);
画像がリモート Web サービスに送信されると、次のようなエラーが発生します。
javax.xml.ws.soap.SOAPFaultException: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was found in the element content of the document. Message being parsed: HEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXHEXH</ns4:image></ns4:arrayOfImage><ns4:otherField></ns4:otherField></ns4:enclosingType></ns5:enclosingTypes></ns5:outerEnclosingType></S:Body></S:Envelope>
TIFF に Unicode バイトを含めることは完全に可能だと思います。これは、この回答NULL
に基づいて送信されているものだと思います。
私が理解しているように、hexBinary は Base64 でエンコードされたデータを想定していないため、生成された API を正しく使用しています。画像を正しく送信するために他に何かする必要がありますか?