Tôi sắp hết hạn cách thêm phần đính kèm vào yêu cầu SOAP của mình. Chúng ta phải tiêu thụ một dịch vụ web bên thứ ba, được xây dựng bằng java, đó là điều phức tạp nhất mà tôi từng gặp. Bất kỳ dịch vụ web nào khác mà chúng tôi đã sử dụng, đều yêu cầu tệp đính kèm, có phương thức hoặc thuộc tính để thêm tệp đính kèm. Đơn giản. Tuy nhiên, điều này không cung cấp phương pháp như vậy.Thêm phần đính kèm vào yêu cầu SOAP
Chúng tôi đã nhận được một phiên bản của thông điệp SOAP với nhau chính xác như chúng tôi muốn XML, tuy nhiên nó là phần MIME của tệp mà chúng tôi không thể thêm.
Ví dụ:
<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>
Đây là phần XML mà chúng ta có thể tạo ra và gửi đi, tuy nhiên nó là không chính xác như chúng ta cần một phần MIME trong đó như:
Trước XML:
--MIMEBoundary
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <rootpart>
Sau XML
--MIMEBoundary
Content-Type: image/gif; name=test.gif
Content-Transfer-Encoding: binary
Content-ID: <test.gif>
[email protected]�
--MIMEBoundary--
Tôi đã lùng sục Internet để tìm câu trả lời nhưng đã bỏ trống. Dường như không có nhiều tài liệu về việc sử dụng WSE cho việc này. Tôi phải nhấn mạnh rằng WSE là một yêu cầu ở phía máy chủ, và không có cách nào tôi có thể thay đổi công nghệ để giải quyết vấn đề này.
Có cách nào để thêm các phần MIME này không?
EDIT: Tôi phải thêm rằng tôi có thể nhận được một tài liệu XML đang hoạt động được gửi qua SoapUI với các tệp đính kèm, nhưng dường như không tìm được cách nào trong mã của chúng tôi.
Tôi đã thêm tiền thưởng để thử và nhận giải pháp cho vấn đề này. Nếu bất cứ ai có bất kỳ ý tưởng khác xin vui lòng cho tôi biết.
CHỈNH SỬA lại: Tôi biết đã một tuần kể từ khi tôi có thể kiểm tra câu trả lời ở đây, nhưng trong khi một số cho ý tưởng hay là tôi vẫn đang vẽ trống. Các tài liệu khủng khiếp xung quanh XopDocument
và phương pháp của nó là một điểm gắn bó lớn, nếu bất cứ ai có bất kỳ ví dụ về việc sử dụng SaveToXopPackage
họ có thể vui lòng cung cấp bởi vì điều này đang bắt đầu để grate!
WSE đã lỗi thời và không nên sử dụng cho dù là gì. –
Vâng John, làm thế nào về đến với một giải pháp thay vì đi xung quanh chỉ giả vờ bạn biết tất cả mọi thứ. Trong kịch bản này, đối với tôi, WSE IS là bắt buộc. Nếu không có nó, yêu cầu của chúng tôi sẽ bị từ chối. Tôi không thể nói với nhà cung cấp bên thứ ba cách họ nên viết mã, tôi có thể thử nhưng họ luôn là công ty hữu ích nhất trên thế giới để làm việc. Vì vậy, trong khi WSE không nên được sử dụng nếu bạn đang tạo ra phần mềm của riêng bạn, nó là một yêu cầu trong trường hợp này. – anothershrubery
Rõ ràng đó là quyết định kinh doanh về việc liệu công ty của bạn có nên tiếp tục kinh doanh với bên thứ ba yêu cầu bạn sử dụng phần mềm lỗi thời hay không, so với một số đối thủ không có. –