Commit 01fbf7da authored by Blanke, Daniela's avatar Blanke, Daniela
Browse files

Update distributed-soap.html

parent 86c37833
Pipeline #8042 passed with stage
in 1 minute and 19 seconds
......@@ -266,12 +266,12 @@ public class AccountNotFoundException extends Exception { }</code></pre>
<ul>
<li><code>WebServiceStarter</code>: In Zeile 10 wird der Webservice gestartet und unter dem Endpunkt <a href="http://localhost:8080/AccountService">http://localhost:8080/AccountService</a> veröffentlicht. In Zeile 13 wird der Webservice wieder beendet. Die Systemeigenschaft, die in Zeile 8 aktiviert wird, sorgt lediglich dafür, dass alle ausgetauschten SOAP-Nachrichten auf die Konsole ausgegeben werden.</li>
<li><code>AccountServiceImpl</code>: Die Klasse implementiert den SOAP-Webservice. Im Gegensatz zu RMI ist ein zugehöriges Interface, das dem Client zur Verfügung gestellt werden muss, nicht unbedingt erforderlich. Jede Klasse, die als Webservice instantiiert werden soll, benötigt die Annotation <code>Webservice</code> (Zeile 8).
<li><code>AccountServiceImpl</code>: Die Klasse implementiert den SOAP-Webservice. Im Gegensatz zu RMI ist ein zugehöriges Interface, das dem Client zur Verfügung gestellt werden muss, nicht unbedingt erforderlich. Jede Klasse, die als Webservice instantiiert werden soll, benötigt die Annotation <code>Webservice</code> (Zeile 8).</li>
<ul>
<li>Die optionale Annotation <code>@SOAPBinding(style = SOAPBinding.Style.RPC)</code> sorgt u.a. dafür, dass im generierten WSDL-Dokument Basisdatentypen wie Integer und String auf die entsprechenden Basisdatentypen von XML-Schema abgebildet werden, also z.B. <code>xsd:int</code> und <code>xsd:string</code>.</li>
<li>Jede öffentliche Methode (Sichtbarkeit <i>public</i>) wird in die Schnittstelle zum Client, also in das WSDL-Dokument, aufgenommen – außer sie ist mit <code>@WebMethod(exclude = true)</code> annotiert. Private Methoden werden nicht in das WSDL-Dokument aufgenommen. Aus eben diesen Gründen sind die Methoden <code>deleteAccount</code> (Zeilen 38-41) und <code>getAccountById</code> (Zeilen 43-46) nicht im obigen WSDL-Dokument wiederzufinden, während alle anderen Methoden der Klasse <code>AccountServiceImpl</code> im WSDL-Dokument enthalten sind.</li>
<li>Mittels der Annotationen <code>@WebMethod(operationName = "...")</code> und <code>@WebParam(name = "...")</code> können Methoden bzw. ihre Argumente gezielt nach außen gerichtet bezeichnet werden. Im obigen WSDL-Dokument wird z.B. die Methode <code>getEntries</code> exemplarisch in <code>getAccountEntries</code> umbenannt (Zeilen 27-28). Die Methodenargumente explizit zu bezeichnen, ist bei JAX-WS RI sinnvoll, da diese im WSDL-Dokument andernfalls schlicht <code>arg0</code>, <code>arg1</code>, ... heißen.</li>
</li>
<li><code>Account</code>, <code>AccountEntry</code> und <code>AccountNotFoundException</code>: Die serverseitigen DTO-Klassen haben sich im Vergleich zum RMI-Anwendungsbeispiel nicht grundlegend geändert. Das Interface <code>java.io.Serializable</code> muss nicht mehr implementiert werden, da die Serialisierung und Deserialisierung in das XML-Format nun über die Bibliothek <a href="https://javaee.github.io/jaxb-v2/">JAXB</a> erfolgt.</li>
</ul>
</ul>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment