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’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">"</span><span class="content">http://localhost:54345/any/old/string/will/work</span><span class="delimiter">"</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><Update> updates = <i class="conum" data-value="9"></i><b>(9)</b>
+ <span class="directive">final</span> <span class="predefined-type">List</span><Update> 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…​</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>…​ and its endpoint address</td>
+<td>get hold of the fake server-side endpoint from the rule…​</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>…​ 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">"</span><span class="content">http://localhost:54346/customers</span><span class="delimiter">"</span></span>),
- <span class="keyword">new</span> SoapEndpointSpec(FakeOrdersEndpoint.class,
- <span class="string"><span class="delimiter">"</span><span class="content">http://localhost:54347/orders</span><span class="delimiter">"</span></span>),
- <span class="keyword">new</span> SoapEndpointSpec(FakeProductsEndpoint.class,
- <span class="string"><span class="delimiter">"</span><span class="content">http://localhost:54348/products</span><span class="delimiter">"</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>