Я разрабатываю веб-сервис JAX-WS, используя Eclipse IDE, связанный с сервером Oracle Weblogic 10.3.3.0 (Oracle Enterprise pack или Eclipse). Это 3.5.2. Версия Eclipse и OEPE 11.1.1.5.0.
Интересный код выглядит примерно так:
@WebService(serviceName = "Pergamo",
name = "PergamoServicio",
portName="PergamoPort",
targetNamespace = "http://ip6.sgpf.Pergamo")
@SchemaValidation
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
use = SOAPBinding.Use.LITERAL,
parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class PergamoFachada {
@WebMethod(operationName = "fromFMLtoRTF")
@WebResult(name = "ResultRTF")
@XmlAttachmentRef
public DataHandler convertirFMLaRTF(
@WebParam(name = "FML")
@XmlAttachmentRef
DataHandler oFML
) throws ...
(входной параметр "FML" относится к документу XML)
WSDL сформирован правильно.
При использовании soapUI в качестве клиентского сервиса он отправляет на сервер многокомпонентное сообщение, как и ожидалось, устанавливая ссылку swaref на вложение, содержащее содержимое файла, установленное в пользовательском интерфейсе soapUI.
Начало сообщения, полученного сервером:
------=_Part_5_12568292.1330348555839
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <rootpart@soapui.org>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ip6="http://ip6.sgpf.Pergamo">
<soapenv:Header/>
<soapenv:Body>
<ip6:fromFMLtoRTF>
<FML>cid:0123456</FML>
</ip6:fromFMLtoRTF>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_5_12568292.1330348555839
Content-Type: text/xml; charset=Cp1252
Content-Transfer-Encoding: quoted-printable
Content-ID: <0123456>
Content-Disposition: attachment; name="PruebaFML2.xml"
<?xml version=3D"1.0" encoding=3D"UTF-8"?>
...
Как видно, прикрепленный файл отправляется soapUI в виде text / xml с использованием «quoted-printable» в качестве Content-Transfer-Encoding (что заметно в начале XML-контента: версия = 3D"1.0 ».
Проблема возникает, когда я пытаюсь использовать InpuStream, полученный из DataHandler. Синтаксический анализатор XML выдает исключение:
The value following "version" in the XML declaration must be a quoted string
означает, что InputStream не был декодирован.
И когда я обертываю InputStream, используя этот код:
MimeUtility.decode(oFML.getInputStream(), "quoted-printable")
Я получаю исключение "поток уже закрыт".
Есть идеи по декодированию входного потока?