Добавление вложения в запрос SOAP

Я не знаю, как добавить вложение в моем SOAP-запросе. Мы должны использовать сторонний веб-сервис, построенный на Java, что является самой запутанной вещью, с которой я когда-либо сталкивался. Любые другие используемые нами веб-сервисы, для которых требуются вложения, имеют метод или свойство для добавления вложения. Просто. Тем не менее, этот не предоставляет такой метод.

У нас есть версия SOAP-сообщения, которая точно соответствует XML-файлу, однако это MIME-часть файла, которую мы не можем добавить.

Пример:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<soap:Header>
<payloadManifest xmlns="http://<examplePayload>">
<manifest contentID="Content0" namespaceURI="http://<exampleManifest>" element="ProcessRepairOrder" version="2.01" />
</payloadManifest>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2011-12-19T15:25:13Z</wsu:Created>
<wsu:Expires>2011-12-19T15:30:00Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken><wsse:Username>username</wsse:Username><wsse:Password>password</wsse:Password></wsse:UsernameToken></wsse:Security></soap:Header><soap:Body><ProcessMessage xmlns="<examplePayload"><payload><content id="Content0">

<s:ProcessRepairOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.xsd" xmlns:s="http://<exampleManifest>" xmlns:gwm="http://example">
    <s:ApplicationArea>
        <s:Sender>
            <s:Component>Test</s:Component>
            <s:Task>ProcessAttachment</s:Task>
            <s:CreatorNameCode>Test</s:CreatorNameCode>
            <s:SenderNameCode>XX</s:SenderNameCode>
            <s:DealerNumber>111111</s:DealerNumber>
            <s:DealerCountry>GB</s:DealerCountry>
        </s:Sender>
        <s:CreationDateTime>2010-03-26T13:37:05Z</s:CreationDateTime>
        <s:Destination>
            <s:DestinationNameCode>GM</s:DestinationNameCode>
            <s:DestinationURI/>
            <s:DestinationSoftwareCode>GWM</s:DestinationSoftwareCode>
        </s:Destination>
    </s:ApplicationArea>
    <s:DataArea xsi:type="gwm:DataAreaExtended">
        <s:Process/>
        <s:RepairOrder>
            <s:Header xsi:type="gwm:RepairOrderHeaderExtended">
                <s:DocumentId/>
            </s:Header>
            <s:Job xsi:type="gwm:JobExtended">
                <s:JobNumber/>
                <s:OperationId>Test</s:OperationId>
                <s:OperationName/>
                <s:CodesAndComments/>
                <s:Diagnostics/>
                <s:WarrantyClaim xsi:type="gwm:WarrantyClaimExtended">
                    <s:OEMClaimNumber>00112233445566778899</s:OEMClaimNumber>
                    <gwm:Attachment>
                        <gwm:File><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:test.gif"/></gwm:File>
                        <gwm:Filename>test.gif</gwm:Filename>
                    </gwm:Attachment>
                </s:WarrantyClaim>
                <s:LaborActualHours>0.0</s:LaborActualHours>
                <s:Technician/>
            </s:Job>
        </s:RepairOrder>
    </s:DataArea>
</s:ProcessRepairOrder>
</content></payload></ProcessMessage></soap:Body></soap:Envelope>

Это часть XML, которую мы можем генерировать и отправлять, однако она некорректна, так как нам нужна часть MIME, например:

До XML:

--MIMEBoundary
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <rootpart>

После XML

--MIMEBoundary
Content-Type: image/gif; name=test.gif
Content-Transfer-Encoding: binary
Content-ID: <test.gif>
GIF89a@�

--MIMEBoundary--

Я искал в Интернете ответы, но ничего не нашел. Похоже, не так много документации об использовании WSE для этого. Я должен подчеркнуть, что WSE является требованием на стороне сервера, и я никак не могу изменить технологию для решения этой проблемы.

Есть ли способ добавить эти разделы MIME?

РЕДАКТИРОВАТЬ: я должен добавить, что я могу получить рабочий XML-документ, отправленный через SoapUI с вложениями, но не могу найти пути в нашем коде.

Я добавил вознаграждение, чтобы попытаться найти решение этой проблемы. Если у кого-то есть другие идеи, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ еще раз: я знаю, что прошла неделя с тех пор, как я смог проверить ответы здесь, но в то время как некоторые дают хорошую идею, где искать, я все еще рисую пробел. Ужасная документация окружающихXopDocument и его методы являются большим камнем преткновения, если у кого-либо есть примеры использованияSaveToXopPackage могли бы они предоставить, потому что это начинает тереть!

Ответы на вопрос(6)

Ваш ответ на вопрос