You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/07/04 13:56:28 UTC

[2/2] isis-site git commit: ISIS-1166: enhancements to docs on fake server endpoints

ISIS-1166: enhancements to docs on fake server endpoints


Project: http://git-wip-us.apache.org/repos/asf/isis-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis-site/commit/0a6fe28f
Tree: http://git-wip-us.apache.org/repos/asf/isis-site/tree/0a6fe28f
Diff: http://git-wip-us.apache.org/repos/asf/isis-site/diff/0a6fe28f

Branch: refs/heads/asf-site
Commit: 0a6fe28fa28584c6638433adea253ba11aeb4324
Parents: 575582f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Jul 4 12:41:08 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Jul 4 12:41:08 2015 +0100

----------------------------------------------------------------------
 content/guides/ug.html | 99 +++++++++++++++++----------------------------
 1 file changed, 36 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis-site/blob/0a6fe28f/content/guides/ug.html
----------------------------------------------------------------------
diff --git a/content/guides/ug.html b/content/guides/ug.html
index a9e79fa..4f2c422 100644
--- a/content/guides/ug.html
+++ b/content/guides/ug.html
@@ -14236,50 +14236,24 @@ CustomerRepository customers;</code></pre>
 <p>So that tests don&#8217;t take too long to run, the rule puts the fake server endpoints onto a thread-local.  Therefore the unit tests should clear up any state on the fake server endpoints.</p>
 </div>
 <div class="paragraph">
-<p>The easiest way to use the rule is to subclass it, eg:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">FakeExternalSystemEndpointRule</span> <span class="directive">extends</span> SoapEndpointPublishingRule {
-    <span class="directive">public</span> FakeExternalSystemEndpointRule() {
-        <span class="local-variable">super</span>(
-            FakeExternalSystemEndpoint.class,                   <i class="conum" data-value="1"></i><b>(1)</b>
-            <span class="string"><span class="delimiter">&quot;</span><span class="content">http://localhost:54345/any/old/string/will/work</span><span class="delimiter">&quot;</span></span>,  <i class="conum" data-value="2"></i><b>(2)</b>
-            );
-    }
-}</code></pre>
-</div>
-</div>
-<div class="colist arabic">
-<table>
-<tr>
-<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>specify the class that implements the endpoint (must have a no-arg constructor)</td>
-</tr>
-<tr>
-<td><i class="conum" data-value="2"></i><b>2</b></td>
-<td>provide an address to host the endpoint.  The port can be hard-coded, as shown, or (probably better) could choose one at random from within a range</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>Your unit test should then look something like:</p>
+<p>Your unit test uses the rule by specifying the endpoint class (must have a no-arg constructor):</p>
 </div>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">FakeExternalSystemEndpointRuleTest</span> {
     <span class="annotation">@Rule</span>
-    <span class="directive">public</span> FakeExternalSystemEndpointRule serverRule = <span class="keyword">new</span> FakeExternalSystemEndpointRule();
+    <span class="directive">public</span> SoapEndpointPublishingRule serverRule =
+        <span class="keyword">new</span> SoapEndpointPublishingRule(FakeExternalSystemEndpoint.class);         <i class="conum" data-value="1"></i><b>(1)</b>
     <span class="directive">private</span> FakeExternalSystemEndpoint fakeServerEndpoint;
-    <span class="directive">private</span> DemoObject externalSystemContract;                                      <i class="conum" data-value="1"></i><b>(1)</b>
+    <span class="directive">private</span> DemoObject externalSystemContract;                                    <i class="conum" data-value="2"></i><b>(2)</b>
     <span class="annotation">@Before</span>
     <span class="directive">public</span> <span class="type">void</span> setUp() <span class="directive">throws</span> <span class="exception">Exception</span> {
         fakeServerEndpoint =
-            serverRule.getEndpointImplementor(ExternalSystemFakeServer.class);      <i class="conum" data-value="2"></i><b>(2)</b>
+            serverRule.getEndpointImplementor(FakeExternalSystemEndpoint.class);  <i class="conum" data-value="3"></i><b>(3)</b>
         <span class="directive">final</span> <span class="predefined-type">String</span> endpointAddress =
-            serverRule.getEndpointAddress(ExternalSystemFakeServer.class);          <i class="conum" data-value="3"></i><b>(3)</b>
-        <span class="directive">final</span> DemoObjectService externalSystemService =                             <i class="conum" data-value="4"></i><b>(4)</b>
-                <span class="keyword">new</span> DemoObjectService(ExternalSystemWsdl.getWsdl());                <i class="conum" data-value="5"></i><b>(5)</b>
+            serverRule.getEndpointAddress(FakeExternalSystemEndpoint.class);      <i class="conum" data-value="4"></i><b>(4)</b>
+        <span class="directive">final</span> DemoObjectService externalSystemService =                           <i class="conum" data-value="5"></i><b>(5)</b>
+                <span class="keyword">new</span> DemoObjectService(ExternalSystemWsdl.getWsdl());              <i class="conum" data-value="6"></i><b>(6)</b>
         externalSystemContract = externalSystemService.getDemoObjectOverSOAP();
         BindingProvider provider = (BindingProvider) externalSystemContract;
         provider.getRequestContext().put(
@@ -14290,16 +14264,16 @@ CustomerRepository customers;</code></pre>
     <span class="annotation">@Test</span>
     <span class="directive">public</span> <span class="type">void</span> happy_case() <span class="directive">throws</span> <span class="exception">Exception</span> {
         <span class="comment">// given</span>
-        <span class="directive">final</span> Update update = <span class="keyword">new</span> Update();                                         <i class="conum" data-value="6"></i><b>(6)</b>
+        <span class="directive">final</span> Update update = <span class="keyword">new</span> Update();                              <i class="conum" data-value="7"></i><b>(7)</b>
         ...
         <span class="comment">// expect</span>
-        final UpdateResponse response = <span class="keyword">new</span> UpdateResponse();                       <i class="conum" data-value="7"></i><b>(7)</b>
+        final UpdateResponse response = <span class="keyword">new</span> UpdateResponse();            <i class="conum" data-value="8"></i><b>(8)</b>
         ...
         fakeServerEndpoint.control().setResponse(updateResponse);
         <span class="comment">// when</span>
-        PostResponse response = externalSystemContract.post(update);                <i class="conum" data-value="8"></i><b>(8)</b>
+        PostResponse response = externalSystemContract.post(update);     <i class="conum" data-value="9"></i><b>(9)</b>
         <span class="comment">// then</span>
-        <span class="directive">final</span> <span class="predefined-type">List</span>&lt;Update&gt; updates =                                                <i class="conum" data-value="9"></i><b>(9)</b>
+        <span class="directive">final</span> <span class="predefined-type">List</span>&lt;Update&gt; updates =                                     <i class="conum" data-value="10"></i><b>(10)</b>
             fakeServerEndpoint.control().getUpdates();
         ...
     }
@@ -14310,65 +14284,61 @@ CustomerRepository customers;</code></pre>
 <table>
 <tr>
 <td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>the SOAP contract as defined in WSDL and generated by wsdl2java</td>
+<td>specify the class that implements the endpoint (must have a no-arg constructor)</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="2"></i><b>2</b></td>
-<td>get hold of the fake server-side endpoint from the rule&#8230;&#8203;</td>
+<td>the SOAP contract as defined in WSDL and generated by wsdl2java</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="3"></i><b>3</b></td>
-<td>&#8230;&#8203; and its endpoint address</td>
+<td>get hold of the fake server-side endpoint from the rule&#8230;&#8203;</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="4"></i><b>4</b></td>
-<td>use factory (also geneated by wsdl2java) to create client-side endpoint</td>
+<td>&#8230;&#8203; and its endpoint address</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="5"></i><b>5</b></td>
-<td><code>getWsdl()</code> is a utility method to return a URL for the WSDL (eg from the classpath)</td>
+<td>use factory (also generated by wsdl2java) to create client-side endpoint</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="6"></i><b>6</b></td>
-<td>create a request (generated from the WSDL and wsdl2java)</td>
+<td><code>getWsdl()</code> is a utility method to return a URL for the WSDL (eg from the classpath)</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="7"></i><b>7</b></td>
-<td>instruct fake server how to respond</td>
+<td>create a request object in order to invoke the SOAP web service</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="8"></i><b>8</b></td>
-<td>invoke the service</td>
+<td>instruct the fake server endpoint how to respond</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="9"></i><b>9</b></td>
-<td>check service was correctly invoked etc.</td>
+<td>invoke the web service</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="10"></i><b>10</b></td>
+<td>check the fake server endpoint was correctly invoked etc.</td>
 </tr>
 </table>
 </div>
 <div class="paragraph">
-<p>For "real-world" usage, see the example app of the (non-ASF) <a href="http://github.com/isisaddons/isis-module-publishmq">Isis addons' publishmq</a> module.</p>
-</div>
-<div class="paragraph">
-<p>Alternatively, the rule can host multiple endpoints.  Each of these will be at a separate address.</p>
+<p>The rule can also host multiple endpoints; just provide multiple classes in the constructor:</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">ExternalSystemFakeServerRule</span> <span class="directive">extends</span> SoapEndpointPublishingRule {
-    <span class="directive">public</span> ExternalSystemFakeServerRule() {
-        <span class="local-variable">super</span>(
-            <span class="keyword">new</span> SoapEndpointSpec(FakeCustomersEndpoint.class,
-                                 <span class="string"><span class="delimiter">&quot;</span><span class="content">http://localhost:54346/customers</span><span class="delimiter">&quot;</span></span>),
-            <span class="keyword">new</span> SoapEndpointSpec(FakeOrdersEndpoint.class,
-                                 <span class="string"><span class="delimiter">&quot;</span><span class="content">http://localhost:54347/orders</span><span class="delimiter">&quot;</span></span>),
-            <span class="keyword">new</span> SoapEndpointSpec(FakeProductsEndpoint.class,
-                                 <span class="string"><span class="delimiter">&quot;</span><span class="content">http://localhost:54348/products</span><span class="delimiter">&quot;</span></span>))
-    }
-}</code></pre>
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Rule</span>
+<span class="directive">public</span> SoapEndpointPublishingRule serverRule =
+                <span class="keyword">new</span> SoapEndpointPublishingRule(
+                    FakeCustomersEndpoint.class,
+                    FakeOrdersEndpoint.class,
+                    FakeProductsEndpoint.class);</code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>To lookup a particular endpoint, specify its type, eg:</p>
+<p>To lookup a particular endpoint, specify its type:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -14376,6 +14346,9 @@ CustomerRepository customers;</code></pre>
             serverRule.getPublishedEndpoint(FakeProductsEndpoint.class);</code></pre>
 </div>
 </div>
+<div class="paragraph">
+<p>The endpoint addresses that the server endpoints run on are determined automatically.  If you want more control, then you can call one of <code>SoapEndpointPublishingRule</code>'s overloaded constructors, passing in one or more <code>SoapEndpointSpec</code> instances.</p>
+</div>
 </div>
 <div class="sect4">
 <h5 id="_xml_marshalling_support">XML Marshalling Support</h5>