Skip to main content
Skip table of contents

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:

  • FromBytesWithHeadersaus einem MIME-Dokument ein MIME-XML-Dokument erzeugen

  • FromRestMetaXml : aus einem ReST-Input-XML ein entsprechendes MIME-XML-Dokument erzeugen

  • ModifyRestMetaXml : aus einem ReST-Input-XML ein modifiziertes ReST-Input-XML erzeugen

  • ToRestMetaXml : aus einem MIME-XML-Dokument ein ReST-Output-XML mit HTTP-Statuscode 200 erzeugen

  • ToBytesWithHeaders : aus einem MIME-XML-Dokument ein MIME-Dokument erzeugen

  • FromBytesWithBoundaryFromFirstLine : aus einem MIME-Body ein MIME-XML-Dokument erzeugen

  • ToBytesWithBoundaryInFirstLine :  aus einem MIME-XML-Dokument einen MIME-Body ohne Präambel und ohne Epilog erzeugen

  • FlattenXml : aus einem MIME-XML-Dokument ein "flaches" MIME-XML-Dokument erzeugen (ggf. wird Multipart-Baum als einzelner Part serialisiert)

  • PartFromX4Document: Verwandelt ein beliebiges eingehendes X4-Document in ein Part in der Mime-XML-Struktur

Parameter

Adapter

Hauptklasse des Adapters (nicht verändern!)

Mögliche Werte: de.softproject.integration.adapter.mimemultipart.Adapter: Hauptklasse (Standard)

Statuswerte

1Die Operation wurde erfolgreich ausgeführt.
0

Die Operation wurde erfolgreich ausgeführt, jedoch ohne Ergebnis.

-1Die 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

TEXT
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

XML
<Multipart>
    <Header>
        <Name>from</Name>
        <Value>John Doe &lt;example@example.com&gt;</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

XML
<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

XML
<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

XML
<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

XML
<Multipart>
	<Header>
		<Name>content-transfer-encoding</Name>
		<Value>binary</Value>
	</Header>
	<Header>
		<Name>content-type</Name>
		<Value>multipart/related; type="application/xop+xml";
			start="&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;";
			start-info="text/xml"</Value>
		<Type>multipart/related</Type>
		<Parameter>
			<Name>type</Name>
			<Value>application/xop+xml</Value>
		</Parameter>
		<Parameter>
			<Name>start</Name>
			<Value>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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

XML
<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="&lt;0@4cd748bf-d5ea-4d2f ... &gt;"; 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.

Wenn im Element 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

XML
<Multipart>
	<Header>
		<Name>content-transfer-encoding</Name>
		<Value>binary</Value>
	</Header>
	<Header>
		<Name>content-type</Name>
		<Value>multipart/related; type="application/xop+xml";
			start="&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;";
			start-info="text/xml"</Value>
		<Type>multipart/related</Type>
		<Parameter>
			<Name>type</Name>
			<Value>application/xop+xml</Value>
		</Parameter>
		<Parameter>
			<Name>start</Name>
			<Value>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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

TEXT
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

TEXT
--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

XML
<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

XML
<Multipart>
	<Header>
		<Name>content-transfer-encoding</Name>
		<Value>binary</Value>
	</Header>
	<Header>
		<Name>content-type</Name>
		<Value>multipart/related; type="application/xop+xml";
			start="&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;";
			start-info="text/xml"</Value>
		<Type>multipart/related</Type>
		<Parameter>
			<Name>type</Name>
			<Value>application/xop+xml</Value>
		</Parameter>
		<Parameter>
			<Name>start</Name>
			<Value>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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

TEXT
--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

XML
<Multipart>
	<Header>
		<Name>content-transfer-encoding</Name>
		<Value>binary</Value>
	</Header>
	<Header>
		<Name>content-type</Name>
		<Value>multipart/related; type="application/xop+xml";
			start="&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;";
			start-info="text/xml"</Value>
		<Type>multipart/related</Type>
		<Parameter>
			<Name>type</Name>
			<Value>application/xop+xml</Value>
		</Parameter>
		<Parameter>
			<Name>start</Name>
			<Value>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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

XML
<Part>
	<Header>
		<Name>content-transfer-encoding</Name>
		<Value>binary</Value>
	</Header>
	<Header>
		<Name>content-type</Name>
		<Value>multipart/related; type="application/xop+xml"; 
		  start="&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;"; 
		  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>&lt;0@4cd748bf-d5ea-4d2f-89cd-18eb54442e0d&gt;</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
leerleerkein Header
leersomeCharsetkein Header
some/typeleerContent-Type: some/type
some/typesomeCharset

Content-Type: some/type; charset=someCharset

Diese Operation ist vergleichbar mit folgender Adapterfolge:

  1. Base64 (encode)  – Input als Base64-String verpacken
  2. ElementWrapper (wrap) – Base64-String in ein XML-Dokument verpacken
  3. XSL – XML-Dokument in die passende Form bringen (und die Header erzeugen)
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.