Получите вложения от веб-службы JAX-WS с помощью клиента JAX-RPC - PullRequest
7 голосов
/ 21 декабря 2010

При переходе с JAX-RPC на JAX-WS я пытаюсь вызвать веб-сервис, который использует JAX-W / JAXB. Сам клиент все еще использует JAX-RPC. Файл WSDL остается прежним.

Это прекрасно работает, пока нет вложений. С вложениями это не работает. Клиент говорит, что их нет. Хотя их можно увидеть в SOAP-сообщении.

Насколько я понял, JAX-WS использует MTOM для помещения двоичных данных в сообщение, а JAX-RPC использует MIME.

Можно ли как-нибудь заставить это работать?

Вот как выглядит сообщение JAX-RPC:

HTTP/1.1 200 OK
Date: Tue, 21 Dec 2010 15:24:10 GMT
Transfer-Encoding: chunked
Content-Type: multipart/related;boundary="----=_Part_6_5206227.1292945050584";type="text/xml";start="<soapPart>"
SOAPAction: "http://XXX"
X-Powered-By: Servlet/2.5 JSP/2.1

014a
------=_Part_6_5206227.1292945050584
Content-Type: text/xml; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-ID: <soapPart>

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><operationWithAttachments href="cid:operationWithAttachments"/></env:Body></env:Envelope>
0522

------=_Part_6_5206227.1292945050584
Content-Type: multipart/mixed; 
    boundary="----=_Part_5_12763436.1292945050570"
Content-ID: <operationWithAttachments>

------=_Part_5_12763436.1292945050570
Content-Type: application/pdf; name=HelloWorld.pdf
Content-Disposition: attachment; filename=HelloWorld.pdf

%PDF-1.4
%öäüß
1 0 obj
<<
/Type /Catalog
/Version /1.4
/Pages 2 0 R
>>
endobj
2 0 obj
<<
...

А вот и новое сообщение JAX-WS:

HTTP/1.1 200 OK
Date: Tue, 21 Dec 2010 15:23:02 GMT
Transfer-Encoding: chunked
Content-Type: multipart/related;start="<rootpart*07499eba-7835-4fe0-bb07-a04801504fb5@example.jaxws.sun.com>";type="application/xop+xml";boundary="uuid:07499eba-7835-4fe0-bb07-a04801504fb5";start-info="text/xml"
X-Powered-By: Servlet/2.5 JSP/2.1

02ba
--uuid:07499eba-7835-4fe0-bb07-a04801504fb5
Content-Id: <rootpart*07499eba-7835-4fe0-bb07-a04801504fb5@example.jaxws.sun.com>
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary

<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns6:operationWithAttachments xmlns:ns6="XX" xmlns:ns5="XX" xmlns:ns4="XX" xmlns:ns3="XX" xmlns:ns2="XX" xmlns="XX">
00ba
<Include xmlns="http://www.w3.org/2004/08/xop/include" href="cid:9832a057-f692-4f48-ac7d-4dbd7ce76a74@example.jaxws.sun.com"/></ns6:operationWithAttachments></S:Body></S:Envelope>
0562

--uuid:07499eba-7835-4fe0-bb07-a04801504fb5
Content-Id: <9832a057-f692-4f48-ac7d-4dbd7ce76a74@example.jaxws.sun.com>
Content-Type: multipart/mixed; boundary="----=_Part_4_6279014.1292944982388"
Content-Transfer-Encoding: binary

------=_Part_4_6279014.1292944982388
Content-Type: application/pdf; name=HelloWorld.pdf
Content-Disposition: attachment; filename=HelloWorld.pdf

%PDF-1.4
%öäüß
1 0 obj
<<
/Type /Catalog
/Version /1.4
/Pages 2 0 R
>>
endobj
2 0 obj
<<
...

(я сам удалил пространства имен, так что это не проблема)

Идея состоит в том, чтобы заставить их быть одинаковыми.

Кто-нибудь когда-нибудь делал это?

Большое спасибо за вашу помощь

1 Ответ

2 голосов
/ 24 декабря 2010

Ну, AFAIK, ты не можешь. JAXRPC использует Soap With Attachments, JAXWS - более современный MTOM. Они немного отличаются и не совместимы. Вы можете отключить MTOM, но тогда вам нужно найти другой способ для потоковой передачи вложений (другой сервис).

...