Веб-сервис JAX-WS не декодирует вложенный XML-файл - PullRequest
0 голосов
/ 27 февраля 2012

Я разрабатываю веб-сервис 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")

Я получаю исключение "поток уже закрыт".

Есть идеи по декодированию входного потока?

...