	// TODO docs
	private Options enableSwa(Options options)
	{
		// CHUNKED is needed to stream attachments directly over the wire, else Axis 2 creates
		// completely formatted HTTP-requests in memory or optionally temporary files, because
		// it would need to know the content length etc. before actually sending any data. That
		// is only possible after the request has been rendered completely.
		//
		// http://mail-archives.apache.org/mod_mbox/axis-java-user/201809.mbox/<1486821759.20180923202008%40am-soft.de>
		options.setProperty(Constants.Configuration.ENABLE_SWA,	Constants.VALUE_TRUE);
		options.setProperty(HTTPConstants.CHUNKED,				Constants.VALUE_TRUE);

		return options;
	}

	// TODO docs
	private Options setLargeUploadTimeouts(Options options)
	{
		final int timeout = 3600 * 1000;

		options.setProperty(HTTPConstants.CONNECTION_TIMEOUT,	timeout);
		options.setProperty(HTTPConstants.SO_TIMEOUT,			timeout);
		options.setTimeOutInMilliSeconds(timeout);

		return options;
	}

	// TODO docs, @return [Result code, Arrival notice]
	public	Entry<Integer, byte[]>
			elrev_EndRueckUpload(	long		msgId,
									DataHandler	payload,
									String		mailInfo)
	{
[...]
			ServiceClient	serviceClient	= new ServiceClient();
			AxisService		axisService		= serviceClient.getAxisService();
			Options			options			= this.getDefSoapOpts(funcName);

			// TODO docs
			axisService.addMessageContextListener(new MessageContextListener()
			{
				@Override
				public void attachServiceContextEvent(ServiceContext sc, MessageContext mc)
				{
					// We don't care currently, but I didn't see some abstract base with some empty
					// implementation as well.
				}

				@Override
				public void attachEnvelopeEvent(MessageContext mc)
				{
					mc.addAttachment("payload", payload);
				}
			});

			this.enableSwa(options);
			this.setLargeUploadTimeouts(options);
			serviceClient.setOptions(options);
			this.initHttpConnectionManager(serviceClient);

			OMElement	result		= serviceClient.sendReceive(method);
						response	= this.readEndUploadResults(result, response);
[...]
	}
