首页 > 解决方案 > 带有附件的 CXF SOAP 请求中缺少 CID 前缀

问题描述

我正在尝试使用 SoapWithAttachments 方法调用 Web 服务。我的客户端软件是 JAVA,它使用 Apache CXF (v2.5.11) 从 WSDL 生成类。

当我运行它时,我在日志中打印 SOAP 请求,并看到用于引用附件的 CID 前缀(“cid:”)丢失。附件的内容 ID 正确,但缺少前缀。最后,服务器返回给我一个“空附件”错误。

有一个我的软件打印的 SOAP 请求示例:

ID: 1
Address: ****
Encoding: UTF-8
Http-Method: POST
Content-Type: multipart/related; type="text/xml"; boundary="uuid:5210b5e9-ee88-4b88-9330-f95ee62bb28e"; start="<root.message@cxf.apache.org>"; start-info="text/xml"
Headers: {Accept=[*/*], SOAPAction=["****"]}
Payload: --uuid:5210b5e9-ee88-4b88-9330-f95ee62bb28e
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
</soap:Header>
<soap:Body>
    <metodo>
        <documento>
            <contenido href="8849d331-555b-4ab4-b90d-6ff0996cadcc@apache.org"/>
            <hash>0p9oDCPlhlxNemvtT5tj6e46SHdPWLOxTi1sLJBeCz4=</hash>
        </documento>
    </metodo>
</soap:Body>
</soap:Envelope>

--uuid:5210b5e9-ee88-4b88-9330-f95ee62bb28e
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-ID: <8849d331-555b-4ab4-b90d-6ff0996cadcc@apache.org>

%PDF-1.4
%????
2 0 obj
<</Length 76/Filter/FlateDecode>>stream
x?+?r
?26S?00I?2P?5?1??
?B?4<Rsr???rR
?JS?
@?]C????
endstream
endobj
4 0 obj
<</Parent 3 0 R/Contents 2 0 R/Type/Page/Resources<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/Font<</F1 1 0 R>>>>/MediaBox[0 0 595 842]>>
endobj
1 0 obj
<</BaseFont/Helvetica/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
endobj
3 0 obj
<</ITXT(2.1.7)/Type/Pages/Count 1/Kids[4 0 R]>>
endobj
5 0 obj
<</Type/Catalog/Pages 3 0 R>>
endobj
6 0 obj
<</Producer(iText 2.1.7 by 1T3XT)/ModDate(D:20150327140035+01'00')/CreationDate(D:20150327140035+01'00')>>
endobj
xref
0 7
0000000000 65535 f
0000000314 00000 n
0000000015 00000 n
0000000402 00000 n
0000000157 00000 n
0000000465 00000 n
0000000510 00000 n
trailer
<</Root 5 0 R/ID [<5d256b5d87f178862dd33943e65718e8><ecd829bf4e1d355aef68138d0de19d76>]/Info 6 0 R/Size 7>>
startxref
632
%%EOF

--uuid:5210b5e9-ee88-4b88-9330-f95ee62bb28e--

请注意,附件确实存在,并且它具有正确的 Content-id(我想是),并且 SOAP 请求以明显正确的名称引用它。但是“cid:”前缀仍然缺失,我不知道如何添加它。

另一方面,如果我将 SOAP 请求从此处复制并粘贴到 SOAP-UI,并添加“cid:”前缀,并添加具有相同 Content-id 的附件,则请求将正确运行。

标签: web-servicessoapcxf

解决方案


推荐阅读