MIME Multipart
Der Adapter ermöglicht das Auslesen und das komfortable Erzeugen von MIME-Multipart-Dokumenten – primär für den Einsatzbereich HTTP-Kommunikation (z. B. ReSTful Webservices). Der Adapter ist zudem für die E-Mail-Kommunikation bzw. für den Umgang mit E-Mail-Anhängen nutzbar.
Der Adapter unterstützt Sie bei der Arbeit mit MIME-Multipart-Dokumenten. Er konvertiert MIME-Dokumente in eine XML-Repräsentation und die XML-Repräsentation in MIME-Dokumente.
Eigenschaften (Properties)
Operation | Bestimmt, welche Operation der Funktions-Adapter durchführt Mögliche Werte:
|
Parameter
Adapter | Hauptklasse des Adapters (nicht verändern!) Mögliche Werte: de.softproject.integration.adapter.mimemultipart.Adapter: Hauptklasse (Standard) |
Statuswerte
1 | Die Operation wurde erfolgreich ausgeführt. |
0 | Die Operation wurde erfolgreich ausgeführt, jedoch ohne Ergebnis. |
-1 | Die Operation ist aufgrund eines technischen Fehlers fehlgeschlagen. |
Operation FromBytesWithHeaders
Mit der Adapter-Operation FromBytesWithHeaders
lassen sich die Bestandteile eines MIME-Dokuments (z.B. eine E-Mail im EML-Format) verarbeiten, z.B. die Anhänge der E-Mail.
Input: Beispiel eines MIME(-Multipart)-Dokuments
From: John Doe <example@example.com>
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="XXXXboundary text"
This is a multipart message in MIME format.
--XXXXboundary text
Content-Type: text/plain
this is the body text
--XXXXboundary text
Content-Type: text/plain;
Content-Disposition: attachment;
filename="test.txt"
this is the attachment text
--XXXXboundary text--
Output: Beispiel eines erzeugten MIME(-Multipart)-XML-Dokument
<Multipart>
<Header>
<Name>from</Name>
<Value>John Doe <example@example.com></Value>
</Header>
<Header>
<Name>mime-version</Name>
<Value>1.0</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/mixed; boundary="XXXXboundary text"</Value>
<Type>multipart/mixed</Type>
<Parameter>
<Name>boundary</Name>
<Value>XXXXboundary text</Value>
</Parameter>
</Header>
<Prolog>VGhpcyBpcyBhIG11bHRpcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0Lg0K</Prolog>
<Part>
<Header>
<Name>content-type</Name>
<Value>text/plain</Value>
<Type>text/plain</Type>
</Header>
<Content encoding="base64">dGhpcyBpcyB0aGUgYm9keSB0ZXh0DQo=</Content>
</Part>
<Part>
<Header>
<Name>content-type</Name>
<Value>text/plain;</Value>
<Type>text/plain</Type>
</Header>
<Header>
<Name>content-disposition</Name>
<Value>attachment; filename="test.txt"</Value>
<Disposition>attachment</Disposition>
<Parameter>
<Name>filename</Name>
<Value>test.txt</Value>
</Parameter>
</Header>
<Content encoding="base64">dGhpcyBpcyB0aGUgYXR0YWNobWVudCB0ZXh0DQo=</Content>
</Part>
<Epilog />
</Multipart>
Wenn das Input-Dokument lediglich ein MIME-Dokument enthält, wird im Output-XML-Dokument nur der entsprechende Part in einem Wurzel-Element <Part/>
ausgegeben.
Operation FromRestMetaXml
Mit der Adapter-Operation FromRestMetaXml
lassen sich XML-Dokumente im MetaXml -Format verarbeiten und als MIME-XML ausgeben. Dieses Input-XML-Format wird erzeugt, wenn ein X4-Prozess über den X4 ReST Starter aufgerufen wurde und dieser den Input-Handler HTTP-MetaXml
verwendet.
Einsatzbeispiele:
- Datei-Upload mit Hilfe eines HTML-Formulars: wenn Daten mit dem Content-Type
multipart/form-data
verarbeitet werden sollen. - Webservices-Kommunikation, bei der sämtliche (Meta-)Daten des HTTP-Requests für die Verarbeitung relevant sind.
Input: Beispiel eines X4 ReST-Input-Dokuments
<Request>
<Path>
<Method>POST</Method>
<FullPath>http://localhost:8080/X4/httpstarter/ReST/httpService/simple</FullPath>
<Server>http://localhost:8080/</Server>
<RequestPath>/X4/httpstarter/ReST/httpService/simple</RequestPath>
<ContextPrefix>/X4/httpstarter/ReST</ContextPrefix>
<PathInfo>/httpService/simple</PathInfo>
<Parts>
<Constant name="httpService" />
<Constant name="simple" />
</Parts>
</Path>
<Connection>
<Scheme>http</Scheme>
<Remote>
<Address>0:0:0:0:0:0:0:1</Address>
<Port>51181</Port>
</Remote>
<Local>
<Address>0:0:0:0:0:0:0:1</Address>
<Port>8080</Port>
</Local>
<Server>
<Name>localhost</Name>
<Port>8080</Port>
</Server>
</Connection>
<Headers>
<Header>
<Name>accept</Name>
<Value>text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</Value>
</Header>
<Header>
<Name>user-agent</Name>
<Value>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
</Value>
</Header>
<Header>
<Name>connection</Name>
<Value>keep-alive</Value>
</Header>
<Header>
<Name>host</Name>
<Value>localhost:8080</Value>
</Header>
<Header>
<Name>accept-language</Name>
<Value>de,en-US;q=0.7,en;q=0.3</Value>
</Header>
<Header>
<Name>accept-encoding</Name>
<Value>gzip, deflate</Value>
</Header>
<Header>
<Name>content-length</Name>
<Value>546</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/form-data; boundary=---------------------------2109532091963
</Value>
</Header>
</Headers>
<Query />
<Security />
<Body encoding="base64">
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yMTA5NTMyMDkxOTYzDQpDb250ZW50LURpc3Bv
c2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IkZlbGQxIg0KDQplcnN0ZXMgRmVsZA0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0yMTA5NTMyMDkxOTYzDQpDb250ZW50LURpc3Bvc2l0aW9uOiBm
b3JtLWRhdGE7IG5hbWU9IkZlbGQyIg0KDQp6d2VpdGVzIEZlbGQNCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tMjEwOTUzMjA5MTk2Mw0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRh
OyBuYW1lPSJhcmVhIg0KDQpEaWUgR3Jv32UgRmzkY2hlDQoNCmJsdWINCg0KLS0tLQ0KDQptb3Jl
IGJsdWINCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTIxMDk1MzIwOTE5NjMNCkNv
bnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iRGF0ZWkiOyBmaWxlbmFtZT0iIg0K
Q29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KDQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLTIxMDk1MzIwOTE5NjMtLQ0K
</Body>
</Request>
Output: Beispiel eines erzeugten MIME(-Multipart)-XML-Dokuments
<Multipart>
<Header>
<Name>accept</Name>
<Value>text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</Value>
</Header>
<Header>
<Name>user-agent</Name>
<Value>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0</Value>
</Header>
<Header>
<Name>connection</Name>
<Value>keep-alive</Value>
</Header>
<Header>
<Name>host</Name>
<Value>localhost:8080</Value>
</Header>
<Header>
<Name>accept-language</Name>
<Value>de,en-US;q=0.7,en;q=0.3</Value>
</Header>
<Header>
<Name>accept-encoding</Name>
<Value>gzip, deflate</Value>
</Header>
<Header>
<Name>content-length</Name>
<Value>546</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/form-data; boundary=---------------------------2109532091963</Value>
<Type>multipart/form-data</Type>
<Parameter>
<Name>boundary</Name>
<Value>---------------------------2109532091963</Value>
</Parameter>
</Header>
<Prolog />
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="Feld1"</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>Feld1</Value>
</Parameter>
</Header>
<Content encoding="base64">ZXJzdGVzIEZlbGQ=</Content>
</Part>
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="Feld2"</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>Feld2</Value>
</Parameter>
</Header>
<Content encoding="base64">endlaXRlcyBGZWxk</Content>
</Part>
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="area"</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>area</Value>
</Parameter>
</Header>
<Content encoding="base64">
RGllIEdyb99lIEZs5GNoZQ0KDQpibHViDQoNCi0tLS0NCg0KbW9yZSBibHViDQoNCg==
</Content>
</Part>
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="Datei"; filename=""</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>Datei</Value>
</Parameter>
<Parameter>
<Name>filename</Name>
<Value />
</Parameter>
</Header>
<Header>
<Name>content-type</Name>
<Value>application/octet-stream</Value>
<Type>application/octet-stream</Type>
</Header>
<Content encoding="base64" />
</Part>
<Epilog />
</Multipart>
Operation ModifyRestMetaXml
Mit der Adapter-Operation ModifyRestMetaXml
lassen sich analog zu Operation FromRestMetaXml
die vom X4 ReST Starter erzeugte MetaXml-Dokumente verarbeiten, jedoch besitzt das ausgegebene Dokument eine veränderte Struktur:
- Der Header-Bereich (
/Request/Headers
) wird entfernt. - Das Body-Element
(/Request/Body
) wird durch die MIME-XML-Struktur ersetzt.
Input: Rest-Input-XML-Dokument, siehe Input für Operation FromRestMetaXml)
Output: Beispiel eines modifizierten X4 ReST-Input-Dokuments
<Request>
<Path>
<Method>POST</Method>
<FullPath>http://localhost:8080/X4/httpstarter/ReST/httpService/simple</FullPath>
<Server>http://localhost:8080/</Server>
<RequestPath>/X4/httpstarter/ReST/httpService/simple</RequestPath>
<ContextPrefix>/X4/httpstarter/ReST</ContextPrefix>
<PathInfo>/httpService/simple</PathInfo>
<Parts>
<Constant name="httpService" />
<Constant name="simple" />
</Parts>
</Path>
<Connection>
<Scheme>http</Scheme>
<Remote>
<Address>0:0:0:0:0:0:0:1</Address>
<Port>51181</Port>
</Remote>
<Local>
<Address>0:0:0:0:0:0:0:1</Address>
<Port>8080</Port>
</Local>
<Server>
<Name>localhost</Name>
<Port>8080</Port>
</Server>
</Connection>
<Query />
<Security />
<Multipart>
<Header>
<Name>accept</Name>
<Value>text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</Value>
</Header>
<Header>
<Name>user-agent</Name>
<Value>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
</Value>
</Header>
<Header>
<Name>connection</Name>
<Value>keep-alive</Value>
</Header>
<Header>
<Name>host</Name>
<Value>localhost:8080</Value>
</Header>
<Header>
<Name>accept-language</Name>
<Value>de,en-US;q=0.7,en;q=0.3</Value>
</Header>
<Header>
<Name>accept-encoding</Name>
<Value>gzip, deflate</Value>
</Header>
<Header>
<Name>content-length</Name>
<Value>546</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/form-data; boundary=---------------------------2109532091963
</Value>
<Type>multipart/form-data</Type>
<Parameter>
<Name>boundary</Name>
<Value>---------------------------2109532091963</Value>
</Parameter>
</Header>
<Prolog />
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="Feld1"</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>Feld1</Value>
</Parameter>
</Header>
<Content encoding="base64">ZXJzdGVzIEZlbGQ=</Content>
</Part>
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="Feld2"</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>Feld2</Value>
</Parameter>
</Header>
<Content encoding="base64">endlaXRlcyBGZWxk</Content>
</Part>
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="area"</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>area</Value>
</Parameter>
</Header>
<Content encoding="base64">
RGllIEdyb99lIEZs5GNoZQ0KDQpibHViDQoNCi0tLS0NCg0KbW9yZSBibHViDQoNCg==
</Content>
</Part>
<Part>
<Header>
<Name>content-disposition</Name>
<Value>form-data; name="Datei"; filename=""</Value>
<Disposition>form-data</Disposition>
<Parameter>
<Name>name</Name>
<Value>Datei</Value>
</Parameter>
<Parameter>
<Name>filename</Name>
<Value />
</Parameter>
</Header>
<Header>
<Name>content-type</Name>
<Value>application/octet-stream</Value>
<Type>application/octet-stream</Type>
</Header>
<Content encoding="base64" />
</Part>
<Epilog />
</Multipart>
</Request>
Operation ToRestMetaXml
Mit der Adapter-Operation ToRestMetaXml
lässt sich ein MIME-XML-Dokument einlesen und im MetaXML-Format erzeugen. Dieses XML-Format wird typischerweise als Ergebnis eines X4-Prozesses ausgegeben, der über den X4 ReST Starter aufgerufen wird, wenn dieser den Output-Handler HTTP-MetaXml
verwendet.
Input: Beispiel eines X4 ReST-Input-Dokuments
<Multipart>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/related; type="application/xop+xml";
start="<0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>";
start-info="text/xml"</Value>
<Type>multipart/related</Type>
<Parameter>
<Name>type</Name>
<Value>application/xop+xml</Value>
</Parameter>
<Parameter>
<Name>start</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
</Parameter>
<Parameter>
<Name>start-info</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Part>
<Header>
<Name>content-type</Name>
<Value>application/xop+xml; charset=UTF-8; type="text/xml"</Value>
<Type>application/xop+xml</Type>
<Parameter>
<Name>charset</Name>
<Value>UTF-8</Value>
</Parameter>
<Parameter>
<Name>type</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-id</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
<Id asUrl="cid:0@4cd748bf-d5ea-4d2f ...</Id>
</Header>
<Content encoding="base64">PD94bWwg ...</Content>
</Part>
</Multipart>
Output: Beispiel eines erzeugten X4 ReST-Output-Dokument
<Response>
<Status code="200"/>
<Headers>
<Header>
<Name>content-transfer-encoding</Name><Value>binary</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/related; type="application/xop+xml";
start="<0@4cd748bf-d5ea-4d2f ... >"; start-info="text/xml";
boundary=37aa08a1-cbc3-4143-b565-aae4ff9007d8</Value>
</Header>
</Headers>
<Content encoding="base64">LS0zN2FhM ... </Content>
</Response>
Operation ToBytesWithHeaders
Mit der Adapter-Operation ToBytesWithHeaders
lässt sich ein MIME-Dokument mit allen benötigten Header-Informationen erzeugen, d.h. sämtliche Header müssen selbst erzeugt werden.
Content
das Attribut encoding="base64"
gesetzt ist, muss der Anhang zweimal Base64 kodiert werden.
Anwendungsfall: Erzeugen einer HTML-E-Mail mit eingebetteten Bildern
Input: Beispiel eines MIME-XML-Dokuments
<Multipart>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/related; type="application/xop+xml";
start="<0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>";
start-info="text/xml"</Value>
<Type>multipart/related</Type>
<Parameter>
<Name>type</Name>
<Value>application/xop+xml</Value>
</Parameter>
<Parameter>
<Name>start</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
</Parameter>
<Parameter>
<Name>start-info</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Part>
<Header>
<Name>content-type</Name>
<Value>application/xop+xml; charset=UTF-8; type="text/xml"</Value>
<Type>application/xop+xml</Type>
<Parameter>
<Name>charset</Name>
<Value>UTF-8</Value>
</Parameter>
<Parameter>
<Name>type</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-id</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
<Id asUrl="cid:0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d">
0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d</Id>
</Header>
<Content encoding="base64">PD94bWwgd ... </Content>
</Part>
</Multipart>
Output: Beispiel eines erzeugten MIME-Dokuments
content-transfer-encoding: binary
content-type: multipart/related; type="application/xop+xml"; start="<0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>"; start-info="text/xml"; boundary=1e66b8da-5b2c-425e-b502-7ffdefbe4283
--1e66b8da-5b2c-425e-b502-7ffdefbe4283
content-type: application/xop+xml; charset=UTF-8; type="text/xml"
content-transfer-encoding: binary
content-id: <0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stoc="http://example.com/stockquote.xsd">
<soapenv:Header/>
<soapenv:Body>
<blub>SGFsbG8gSGFsbG8g ...</blub>
<bla>SGFsbG8=</bla>
<foo>SGFsbG8=</foo>
<bar>SGFsbG8=</bar>
</soapenv:Body>
</soapenv:Envelope>
--1e66b8da-5b2c-425e-b502-7ffdefbe4283--
Operation FromBytesWithBoundaryFromFirstLine
Mit der Adapter-Operation FromBytesWithBoundaryFromFirstLine
lassen sich analog zu Adapter-Operation FromBytesWithHeaders
Bestandteile eines MIME-Dokuments (z.B. eine E-Mail im EML-Format) in einem ausgegebenen XML-Dokument verarbeiten, jedoch wird hier kein Header-Block erwartet und es wird direkt der MIME-Body verarbeitet – vorausgesetzt es handelt sich um eine gültige Multipart-Boundary. Ansonsten wird der Input als Part ohne Header im erzeugten XML-Dokument ausgegeben.
Anwendungsfall: SOAP über JMS. Hier wird eine Byte-Message verwendet, die einen MIME-Body ohne MIME-Header enthält. Um MTOM auch hier verwenden zu können, wird ein MIME-Multipart-Body ohne Präambel verwendet.
Input: Beispiel eines MIME-Bodys
--XXXXboundary text
Content-Type: text/plain
this is the body text
--XXXXboundary text
Content-Type: text/plain;
Content-Disposition: attachment;
filename="test.txt"
this is the attachment text
--XXXXboundary text--
Output: Beispiel eines erzeugten MIME-XML-Dokuments
<Multipart>
<Prolog />
<Part>
<Header>
<Name>content-type</Name>
<Value>text/plain</Value>
<Type>text/plain</Type>
</Header>
<Content encoding="base64">dGhpcyBpcyB0aGUgYm9keSB0ZXh0DQo=</Content>
</Part>
<Part>
<Header>
<Name>content-type</Name>
<Value>text/plain;</Value>
<Type>text/plain</Type>
</Header>
<Header>
<Name>content-disposition</Name>
<Value>attachment; filename="test.txt"</Value>
<Disposition>attachment</Disposition>
<Parameter>
<Name>filename</Name>
<Value>test.txt</Value>
</Parameter>
</Header>
<Content encoding="base64">dGhpcyBpcyB0aGUgYXR0YWNobWVudCB0ZXh0DQo=</Content>
</Part>
<Epilog />
</Multipart>
Operation ToBytesWithBoundaryInFirstLine
Mit der Adapter-Operation ToBytesWithBoundaryInFirstLine
lässt sich ein MIME-Dokument ohne Header-Block und bei Multiparts ohne Präambel und ohne Epilog erzeugen.
Anwendungsfall: SOAP über JMS (mit MTOM)
Input: Beispiel eines MIME-XML-Dokuments
<Multipart>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/related; type="application/xop+xml";
start="<0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>";
start-info="text/xml"</Value>
<Type>multipart/related</Type>
<Parameter>
<Name>type</Name>
<Value>application/xop+xml</Value>
</Parameter>
<Parameter>
<Name>start</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
</Parameter>
<Parameter>
<Name>start-info</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Part>
<Header>
<Name>content-type</Name>
<Value>application/xop+xml; charset=UTF-8; type="text/xml"</Value>
<Type>application/xop+xml</Type>
<Parameter>
<Name>charset</Name>
<Value>UTF-8</Value>
</Parameter>
<Parameter>
<Name>type</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-id</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
<Id asUrl="cid:0@4cd748bf-d5ea ...">0@4cd748bf-d5ea ...</Id>
</Header>
<Content encoding="base64">PD94bWwgdmVyc2 ...</Content>
</Part>
</Multipart>
Output: Beispiel eines erzeugten MIME-Body-Dokuments
--7aed8c79-1491-41a3-9122-c82b15d88fd0
content-type: application/xop+xml; charset=UTF-8; type="text/xml"
content-transfer-encoding: binary
content-id: <0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:stoc="http://example.com/stockquote.xsd">
<soapenv:Header/>
<soapenv:Body>
<blub>SGFsbG8gSGFsbG8g ... </blub>
<bla>SGFsbG8=</bla>
<foo>SGFsbG8=</foo>
<bar>SGFsbG8=</bar>
</soapenv:Body>
</soapenv:Envelope>
--7aed8c79-1491-41a3-9122-c82b15d88fd0--
Operation FlattenXml
Mit der Adapter-Operation FlattenXml
lässt sich ein MIME-Multipart-XML-Dokument erzeugen, das für den Versand mit einem Managed File Transfer-Adapter der X4 BPMS vorbereitet ist, z.B. mit dem HTTP(S) Adapter.
Das Ergebnis-XML-Dokument ist hierfür wie folgt aufgebaut:
- Es enthält einen MIME-Body als Base64-kodierte Zeichenkette.
- Die Header sind als XML-Struktur verfügbar, um einen X4 Transfer-Adapter einfach konfigurieren können.
- Das erzeugte Dokument liegt im MIME-XML-Format vom Typ Part vor. Sie können es daher verwenden, um weitere Multipart-Dokumente zu erzeugen.
Anwendungsfall: Webservice-Aufrufe, bei denen Multipart-Dokumente benötigt werden
Input: Beispiel eines MIME-XML-Dokuments
<Multipart>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/related; type="application/xop+xml";
start="<0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>";
start-info="text/xml"</Value>
<Type>multipart/related</Type>
<Parameter>
<Name>type</Name>
<Value>application/xop+xml</Value>
</Parameter>
<Parameter>
<Name>start</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
</Parameter>
<Parameter>
<Name>start-info</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Part>
<Header>
<Name>content-type</Name>
<Value>application/xop+xml; charset=UTF-8; type="text/xml"</Value>
<Type>application/xop+xml</Type>
<Parameter>
<Name>charset</Name>
<Value>UTF-8</Value>
</Parameter>
<Parameter>
<Name>type</Name>
<Value>text/xml</Value>
</Parameter>
</Header>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-id</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
<Id asUrl="cid:0@4cd748bf-d5ea ...">0@4cd748bf-d5ea ...</Id>
</Header>
<Content encoding="base64">PD94bWwgdmVyc2 ...</Content>
</Part>
</Multipart>
Output: Beispiel eines erzeugten MIME-XML-Dokuments
<Part>
<Header>
<Name>content-transfer-encoding</Name>
<Value>binary</Value>
</Header>
<Header>
<Name>content-type</Name>
<Value>multipart/related; type="application/xop+xml";
start="<0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d>";
start-info="text/xml"; boundary=da9a6ade-4452-4546-851c-84da7b638c24</Value>
<Type>multipart/related</Type>
<Parameter>
<Name>type</Name>
<Value>application/xop+xml</Value>
</Parameter>
<Parameter>
<Name>start</Name>
<Value><0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d></Value>
</Parameter>
<Parameter>
<Name>start-info</Name>
<Value>text/xml</Value>
</Parameter>
<Parameter>
<Name>boundary</Name>
<Value>da9a6ade-4452-4546-851c-84da7b638c24</Value>
</Parameter>
</Header>
<Content encoding="base64">LS1kYTlhNmFkZ ...</Content>
</Part>
Operation PartFromX4Document
Mit der Operation PartFromX4Document
wird der Adapter-Input als Rumpf eines Mime-Dokuments konvertiert (im XML-Format dieses Adapters). Es wird ein Content-Type
Header erzeugt mit den entsprechenden Werten aus dem X4-Dokument (diese Werte lassen sich mit dem Document Properties Changer beeinflussen).
X4Dokument-Eigenschaften umwandeln in den Content-Type Header
X4Document mimeType | X4Document encoding | resultierender Content-Type Header |
---|---|---|
leer | leer | kein Header |
leer | someCharset | kein Header |
some/type | leer | Content-Type: some/type |
some/type | someCharset |
|
Diese Operation ist vergleichbar mit folgender Adapterfolge:
- Base64 (encode) – Input als Base64-String verpacken
- ElementWrapper (wrap) – Base64-String in ein XML-Dokument verpacken
- XSL – XML-Dokument in die passende Form bringen (und die Header erzeugen)