Jestem w luźnym zakończeniu, jak dodać załącznik w moim żądaniu SOAP. Musimy spożytkować usługę WWW Thrid Party, zbudowaną w Javie, która jest najbardziej skomplikowaną rzeczą, jaką kiedykolwiek spotkałem. Wszelkie inne usługi internetowe, z których korzystaliśmy, wymagające załączników, mają metodę lub właściwość do dodania załącznika. Prosty. Jednak ten nie zapewnia takiej metody.Dodawanie załącznika do żądania SOAP
Mamy wersję komunikatu SOAP razem, dokładnie tak, jak chcemy XML, jednak jest to część pliku MIME, której nie możemy dodać.
Przykład:
<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>
Jest to część XML, który możemy wygenerować i wysłać off, jednak jest to błędne ponieważ musimy część MIME tam jak:
Przed XML:
--MIMEBoundary
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <rootpart>
Po XML
--MIMEBoundary
Content-Type: image/gif; name=test.gif
Content-Transfer-Encoding: binary
Content-ID: <test.gif>
[email protected]�
--MIMEBoundary--
Przeszukałem Internet, szukając odpowiedzi, ale podałem puste. Wydaje się, że nie ma zbyt wiele dokumentacji na temat korzystania z GPW. Muszę podkreślić, że GPW jest wymogiem po stronie serwera i nie ma możliwości zmiany technologii w celu rozwiązania tego problemu.
Czy istnieje sposób, w jaki można dodać te sekcje MIME?
EDYCJA: Muszę dodać, że mogę uzyskać działający dokument XML wysłany za pośrednictwem SoapUI z załącznikami, ale nie mogę znaleźć sposobu w naszym kodzie.
Dodałem nagrodę, aby spróbować rozwiązać ten problem. Jeśli ktoś ma jakieś inne pomysły, daj mi znać.
EDYTUJ ponownie: Wiem, że minął tydzień, odkąd mogłem sprawdzić odpowiedzi tutaj, ale podczas gdy niektórzy dają dobry pomysł, gdzie szukać, wciąż rysuję puste miejsce. Straszna dokumentacja związana z XopDocument
i jej metodami jest bardzo ważna, jeśli ktoś ma jakieś przykłady użycia go, ponieważ może to zapewnić, ponieważ zaczyna się ruszać!
GPW jest przestarzała i nie powinna być używana bez względu na wszystko. –
Cóż, John, co powiesz na znalezienie rozwiązania, zamiast chodzić po prostu udając, że wiesz wszystko. W tym scenariuszu dla mnie wymagana jest WSE. Bez niego nasze wnioski zostaną odrzucone. Nie mogę powiedzieć sprzedawcy zewnętrznemu, jak powinny kodować, mogę spróbować, ale zawsze byli najmniej pomocni na świecie. Tak więc, podczas gdy GPW nie powinno być używane, jeśli tworzysz własne oprogramowanie, jest to wymagane w tym przypadku. – anothershrubery
Oczywiście jest to decyzja biznesowa, czy twoja firma powinna nadal prowadzić interesy z osobą trzecią, która wymaga użycia przestarzałego oprogramowania, w przeciwieństwie do niektórych konkurentów, którzy tego nie robią. –