<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>MTOM &#8211; Jiří Kratochvíl</title>
	<atom:link href="https://jiri.kratochvil.eu/tag/mtom/feed/" rel="self" type="application/rss+xml" />
	<link>https://jiri.kratochvil.eu</link>
	<description>Kráťovo občasník</description>
	<lastBuildDate>Sat, 06 Feb 2010 06:08:16 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://jiri.kratochvil.eu/wp-content/uploads/2018/10/kratochvil-logo-100x100.png</url>
	<title>MTOM &#8211; Jiří Kratochvíl</title>
	<link>https://jiri.kratochvil.eu</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">10187198</site>	<item>
		<title>JAX-WS a SOAP Attachments</title>
		<link>https://jiri.kratochvil.eu/jax-ws-a-soap-attachments/</link>
					<comments>https://jiri.kratochvil.eu/jax-ws-a-soap-attachments/#respond</comments>
		
		<dc:creator><![CDATA[Jiří Kratochvíl]]></dc:creator>
		<pubDate>Sat, 06 Feb 2010 06:08:16 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Návody]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[JAX-WS]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[MTOM]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SOAP-Attachment]]></category>
		<category><![CDATA[Tipy]]></category>
		<category><![CDATA[Weblogic]]></category>
		<category><![CDATA[WS]]></category>
		<guid isPermaLink="false">http://jiri.kratochvil.eu/?p=253</guid>

					<description><![CDATA[Pokud potřebujete poslat přes webovou službu trochu víc dat, než je pár detailů o klientovi, je dobré tyto data posílat jako SOAP attachment a ne [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Pokud potřebujete poslat přes webovou službu trochu víc dat, než je pár detailů o klientovi, je dobré tyto data posílat jako SOAP attachment a ne přímo v nějakém tagu samotné zprávy. A přesně to, jsem se snažil řešit na projektu. Používáme JAX-WS a aplikace běží to na Weblogicu Server. Weblogic je znamý tím, že si &#8222;sem-tam&#8220; některé knihovny upraví k obrazu svému a pak se výsledek může chovat trochu jinak, než by člověk mohl čekat. Nevím, zda se v mém případě jednalo o nějakou lahůdku Weblogicu, ale postup k cíli nebyl vůbec přímočarý.<br />
<span id="more-253"></span><br />
Typická služba vypadá takto:</p>
<pre lang="java">
import ...

@WebService(targetNamespace = "http://schemas/wsdl")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL)
public interface Documentation {

    @WebMethod
    @WebResult(name = "receiveDocument")
    @XmlMimeType("application/octet-stream")
    DataHandler getDocument(
            @WebParam(name = "documentId",
                    targetNamespace = "http://schemas/wsdl",
                    mode = WebParam.Mode.IN) Integer documentId);
}
</pre>
<p>a následná implementace:</p>
<pre lang="java">
import ...

@WebService(serviceName = "Documentation", endpointInterface = "Documentation")
@SchemaValidation
public class DocumentationImpl  implements Documentation {

    @Override
    public DataHandler getDocument(Integer documentId) {
        return getService().getDocument(documentId);
    }
}
</pre>
<p>Pokud chceme používat SOAP attachmentů, můžeme využít implementace od SUNu (vlastně teď Oraclu). Souhrnně se této technice říká <a href="http://en.wikipedia.org/wiki/Message_Transmission_Optimization_Mechanism">Message Transmission Optimization Mechanism</a> (zkráceně MTOM) a právě SUN nabízí pro tyto účely implementaci pro JAX-WS (upozorňuji, že třeba v AXISu to funguje úplně jinak).</p>
<p>Vše se tváří naprosto triviálně &#8211; stačí jako jeden výstupní parametr použít s typem <code>javax.activation.DataHandler</code>, nastavit u tohoto parametru pomocí <code>javax.xml.bind.annotation.XmlMimeType</code> správný content type a celou třídu oanotovat pomocí <code>@MTOM</code>. Vše by mělo zázračně začít fungovat. Jenže ono to nefunguje.</p>
<p>Ač o tom není v dokumentaci ani zmínka záleží na tom, kde se anotace umístí. Tato anotace se totiž neumisťuje do interface, kde bych to očekával, ale přímo do třídy, která implementuje naše rozhraní této webové služby. Abychom nám začali fungovat attachmenty, upravíme příklad, který jsem uvedl na začátku tohoto článku:</p>
<pre lang="java">
import ...

@MTOM
@StreamingAttachment(parseEagerly = true, memoryThreshold = 40000L)
@WebService(serviceName = "Documentation", endpointInterface = "Documentation")
@SchemaValidation
public class DocumentationImpl  implements Documentation {

    @Override
    public DataHandler getDocument(Integer documentId) {
        return getService().getDocument(documentId);
    }
}
</pre>
<p>Přidal jsem dvě anotace: <code>@MTOM</code> a <code>@StreamingAttachment(...)</code>. Ta první aktivuje tuto funkčnost a od nyní se všechny atributy typu <code>DataHandler</code> budou přenášet jako SOAP attachment. Anotaci <code>@StreamingAttachment(...)</code> využijeme v případě, že budeme přenášet skutečně velké soubory a posílání souboru nám bere moc paměti. A ještě jedna chytrá věc-v anotaci <code>@MTOM</code> je parametr <code>threshold</code>, který říká, od jaké velikosti se daný element pošle jako SOAP attachment a kdy se pošle přímo v elementu samotné zprávy.</p>
<p>Na závěr ještě ukázku, jak pak vypadají data ze služby:</p>
<pre lang="XML">
HTTP/1.1 200 OK
Date: Sat, 06 Feb 2010 07:46:28 GMT
Transfer-Encoding: chunked
Content-Type: multipart/related;start="<rootpart*783e56c7-ff09-40d8-91cd-d0ec0ce9555e@example.jaxws.sun.com>";type="application/xop+xml";boundary="uuid:783e56c7-ff09-40d8-91cd-d0ec0ce9555e";start-info="text/xml"
X-Powered-By: Servlet/2.5 JSP/2.1

--uuid:783e56c7-ff09-40d8-91cd-d0ec0ce9555e
Content-Id: <rootpart*783e56c7-ff09-40d8-91cd-d0ec0ce9555e@example.jaxws.sun.com>
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:getDocumentResponse xmlns:ns2="http://schemas/wsdl">
      <receiveDocument>
        <Include xmlns="http://www.w3.org/2004/08/xop/include" href="cid:383e4726-8e85-4a46-a917-23811ec4ef3e@example.jaxws.sun.com"/>
      </receiveDocument>
    </ns2:getDocumentResponse>
  </S:Body>
</S:Envelope>
--uuid:783e56c7-ff09-40d8-91cd-d0ec0ce9555e
Content-Id: <383e4726-8e85-4a46-a917-23811ec4ef3e@example.jaxws.sun.com>
Content-Type: application/pdf
Content-Transfer-Encoding: binary

%PDF-1.4
.
.
.
%%EOF

--uuid:783e56c7-ff09-40d8-91cd-d0ec0ce9555e-
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://jiri.kratochvil.eu/jax-ws-a-soap-attachments/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">253</post-id>	</item>
	</channel>
</rss>
