<?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/"
	>

<channel>
	<title>lstierneyltd &#187; annotations</title>
	<atom:link href="http://lstierneyltd.com/blog/tag/annotations/feed/" rel="self" type="application/rss+xml" />
	<link>http://lstierneyltd.com/blog</link>
	<description>Yet another development blog</description>
	<lastBuildDate>Wed, 13 Jul 2011 12:55:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Unit Testing Validation in Annotation Based Validating Spring Beans</title>
		<link>http://lstierneyltd.com/blog/development/examples/spring-examples/unit-testing-validation-in-annotation-based-validating-spring-beans/</link>
		<comments>http://lstierneyltd.com/blog/development/examples/spring-examples/unit-testing-validation-in-annotation-based-validating-spring-beans/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 08:57:07 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=245</guid>
		<description><![CDATA[Motivation I added validation, via annotations, to a Spring &#8220;Model&#8221; bean. I needed someway to Unit Test this validation, without running the container and without initialising the Spring context. The bean (simplified) The Unit Test More It actually took me a few hours to work the above test out (simple as it is). If I [...]]]></description>
			<content:encoded><![CDATA[<h3>Motivation</h3>
<p>I added validation, via annotations, to a Spring &#8220;Model&#8221; bean. I needed someway to Unit Test this validation, <em>without</em> running the container and <em>without</em> initialising the Spring context.</p>
<h3>The bean (simplified)</h3>
<pre class="brush: java; title: ; notranslate">
package foo.bar;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public final class ProductModel {

    @NotNull
    @Size(max=100)
    @Pattern(regexp=&quot;[^\n^\t^\r]+&quot;, message=&quot;Long Name must not contain New Lines, Carriage Returns or Tabs&quot;)
    private String longName;

    @Size(max=20)
    private String shortName;

    // rest snipped for brevity
}
</pre>
<h3>The Unit Test</h3>
<pre class="brush: java; title: ; notranslate">
package foo.bar;

import java.util.Set;

import javax.validation.ConstraintViolation;

import junit.framework.Assert;

import org.hibernate.validator.HibernateValidator;
import org.junit.Before;
import org.junit.Test;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

public class Temp {
    private LocalValidatorFactoryBean localValidatorFactory;

    @Before
    public void setup() {
        localValidatorFactory = new LocalValidatorFactoryBean();
        localValidatorFactory.setProviderClass(HibernateValidator.class);
        localValidatorFactory.afterPropertiesSet();
    }
    @Test
    public void testLongNameWithInvalidCharCausesValidationError() {
        final ProductModel productModel = new ProductModel();
        productModel.setLongName(&quot;A long name with\t a Tab character&quot;);
    	Set&lt;ConstraintViolation&lt;ProductModel&gt;&gt; constraintViolations = localValidatorFactory.validate(productModel);
    	Assert.assertTrue(&quot;Expected validation error not found&quot;, constraintViolations.size() == 1);
    }
}
</pre>
<h3>More</h3>
<p>It actually took me a few hours to work the above test out (simple as it is). If I hadn&#8217;t stumbled upon <a href="https://src.springsource.org/svn/spring-framework/trunk/org.springframework.context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java">these Spring Unit Tests</a>, I might never have got it.</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/examples/spring-examples/unit-testing-validation-in-annotation-based-validating-spring-beans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MVC URI Template Example</title>
		<link>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-uri-template-example/</link>
		<comments>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-uri-template-example/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 14:04:25 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=241</guid>
		<description><![CDATA[Background So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration. As I was trawling through the source code I noticed &#8220;some wierd&#8221; syntax: &#8220;/{xxxx}&#8221; (which of course I had to look up!). Most of the following is based upon the excellent Spring Documentation. [...]]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration. As I was trawling through the source code I noticed &#8220;some wierd&#8221; syntax: &#8220;/{xxxx}&#8221; (which of course I had to look up!).</p>
<p>Most of the following is based upon the excellent <a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib" target="_blank">Spring Documentation</a>. I&#8217;ve lifted and rewritten the parts I require to serve as a condensed &#8220;aide-mémoire&#8221;.</p>
<h3>Description</h3>
<p>A URI Template is a URI-like string, containing one or more variable names. When you substitute values for these variables, the template becomes a URI.<br />
<code><span id="more-241"></span></code><br />
For example, the URI Template</p>
<pre>http://foo.bar.com/products/{productName}</pre>
<p>contains the variable &#8220;productName&#8221;. If we assign the variable the value &#8220;widgetA&#8221;, the URI Template yields:</p>
<pre>http://foo.bar.com/products/widgetA</pre>
<h3>Example</h3>
<pre class="brush: java; title: ; notranslate">
@Controller
public class ProductController {
    @RequestMapping(value=&quot;/products/{productName}, method = RequestMethod.GET)
    public String getProductDetails(@PathVariable(&quot;productName&quot;) String productName, Model model) {
        Product product = this.productService.getProduct(productName);
        model.addAttribute(&quot;productDetails&quot;, product);
        return &quot;productDetailPage&quot;;
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-uri-template-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MVC 3 @ModelAttribute Annotation Example</title>
		<link>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-3-modelattribute-annotation-example/</link>
		<comments>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-3-modelattribute-annotation-example/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 10:53:01 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=236</guid>
		<description><![CDATA[Background So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@ModelAttribute&#8221; annotation (which of course I had to look up!). If the above background seems familiar that&#8217;s because it&#8217;s the same [...]]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@ModelAttribute&#8221; annotation (which of course I had to look up!).</p>
<p>If the above background seems familiar that&#8217;s because it&#8217;s the same as for a previous Spring Annotation post I made (ed: this is in danger of turning into a mini-series)</p>
<h3>Description</h3>
<p>Most of the following is based upon the excellent <a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib" target="_blank">Spring Documentation</a>. I&#8217;ve simply lifted and rewritten the parts I require to serve as an &#8220;aide-mémoire&#8221;.</p>
<p>The @ModelAttribute annotation serves two purposes depending on how it is used:</p>
<p><code><span id="more-236"></span></code></p>
<h4>At Method level</h4>
<p>Use @ModelAttribute at the method level to <em>provide reference data for the model</em>. @ModelAttribute annotated methods are executed before the chosen @RequestMapping annotated handler method. They effectively pre-populate the implicit model with specific attributes, often loaded from a database. Such an attribute can then already be accessed through @ModelAttribute annotated handler method parameters in the chosen handler method, potentially with binding and validation applied to it.</p>
<p>In other words; a method annotated with @ModelAttribute will populate the specified &#8220;key&#8221; in the model. This happens BEFORE the @RequestMapping</p>
<h4>At Method Parameter level</h4>
<p>When you place @ModelAttribute on a method parameter, @ModelAttribute maps a model attribute to the specific, annotated method parameter. This is how the controller gets a reference to the object holding the data entered in the form.</p>
<h3>Examples</h3>
<h4>Method Level</h4>
<pre class="brush: java; title: ; notranslate">
@Controller
public class MyController {
    @ModelAttribute(&quot;productsList&quot;)
    public Collection&lt;Product&gt; populateProducts() {
        return this.productsService.getProducts();
    }
    // @RequestMapping etc omitted for brevity
}
</pre>
<p>So, in the above example, &#8220;productsList&#8221; in the Model is populated before the the @RequestMapping is performed.</p>
<h4>Method parameter level</h4>
<pre class="brush: java; title: ; notranslate">
@Controller
public class MyController {
    @RequestMapping(method = RequestMethod.POST)
    public String processSubmit(@ModelAttribute(&quot;product&quot;) Product myProduct, BindingResult result, SessionStatus status) {

        new ProductValidator().validate(myProduct, result);
        if (result.hasErrors()) {
            return &quot;productForm&quot;;
        }
        else {
            this.productsService.saveProduct(myProduct);
            status.setComplete();
            return &quot;productSaved&quot;;
        }
    }
}
</pre>
<p>In the above example &#8220;myProduct&#8221; is populated with the corresponding value from the Model.</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/examples/spring-examples/spring-mvc-3-modelattribute-annotation-example/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Spring MVC 3.x @PathVariable Annotation Example</title>
		<link>http://lstierneyltd.com/blog/development/spring-mvc-3-x-pathvariable-annotation-example/</link>
		<comments>http://lstierneyltd.com/blog/development/spring-mvc-3-x-pathvariable-annotation-example/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 13:41:09 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Examples]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=228</guid>
		<description><![CDATA[Background So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@PathVariable&#8221; annotation (which of course I had to look up!). Example Imagine you&#8217;d like to create a controller that would allow [...]]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>So, I&#8217;m working on an existing Spring 3.x web project. This project heavily favours the use of annotations over XML configuration files. As I was trawling through the source code I noticed the &#8220;@PathVariable&#8221; annotation (which of course I had to look up!).</p>
<h3>Example</h3>
<p>Imagine you&#8217;d like to create a controller that would allow users to see view products by using a URL such as http://foo.bar.com/productDetails/someProduct</p>
<pre>
e.g.

http://foo.bar.com/productDetails/widgetA - display details for widgetA
http://foo.bar.com/productDetails/widgetB - display details for widgetB
</pre>
<p>The @PathVariable annotation makes this easy&#8230;</p>
<pre class="brush: java; title: ; notranslate">
package foo.bar;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;

@Controller
public class ShowProductController {

    @RequestMapping(&quot;/productDetails/{productName}&quot;) // Handle any request of the form &quot;/productDetails/XXXXX&quot;
    public String showProduct(Model model, @PathVariable(&quot;productName&quot;) String productName) {
        model.addAttribute(&quot;productName&quot;, productName);
        return &quot;showProduct&quot;; // viewname
    }
}
</pre>
<h3>What just happened?</h3>
<p>Note the {productName} in the @RequestMapping &#8211; this is the path variable. The @PathVariable annotation on the next line captures the value and binds it to the method argument</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/spring-mvc-3-x-pathvariable-annotation-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAXB @XmlAnyElement example</title>
		<link>http://lstierneyltd.com/blog/development/tips/jaxb-xmlanyelement-example/</link>
		<comments>http://lstierneyltd.com/blog/development/tips/jaxb-xmlanyelement-example/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 15:06:52 +0000</pubDate>
		<dc:creator>lawrence</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[quick tips]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jaxb]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lstierneyltd.com/blog/?p=134</guid>
		<description><![CDATA[The problem I was recently working on a JAXB centric app which was required to capture &#8220;arbitary&#8221; xml. e.g. How could I ever capture the contents of if they could be &#8220;anything&#8221;? The solution What&#8217;s going on? The @XmlAnyElement annotation instructs JAXB to hoover up any elements which aren&#8217;t already annotated/associated with a field and [...]]]></description>
			<content:encoded><![CDATA[<h4>The problem</h4>
<p>I was recently working on a JAXB centric app which was required to capture &#8220;arbitary&#8221; xml. e.g.</p>
<pre class="brush: plain; title: ; notranslate">
&lt;a&gt;
   &lt;b&gt;&lt;/b&gt;
   &lt;c&gt;&lt;/c&gt;
   &lt;d&gt;
       &lt;!-- &quot;Unknown&quot; XML here --&gt;
       &lt;maybeE&gt;&lt;/maybeE&gt;
       &lt;maybeF&gt;&lt;/maybeF&gt;
       &lt;!-- etc etc --&gt;
   &lt;d/&gt;
&lt;/a&gt;
</pre>
<p>How could I ever capture the contents of <d> if they could be &#8220;anything&#8221;?<br />
<code><span id="more-134"></span></code></p>
<h4>The solution</h4>
<pre class="brush: plain; title: ; notranslate">
@XmlRootElement(name=&quot;a&quot;)
public class A { 

   @XmlElement
   private String b; 

   @XmlElement
   private String c; 

   @XmlAnyElement
   private List&lt;Element&gt; content;
}
</pre>
<h4>What&#8217;s going on?</h4>
<p>The <strong>@XmlAnyElement </strong> annotation instructs JAXB to hoover up any elements which aren&#8217;t already annotated/associated with a field and store their DOM representation in:</p>
<pre>
private List<Element> content;
</pre>
<p>You could then do something like:</p>
<pre class="brush: plain; title: ; notranslate">
public String getContentAsString() throws Exception{
    StringBuilder builder = new StringBuilder();
    for (Node node: operations) {
        StringWriter writer = new StringWriter();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, &quot;yes&quot;);
        transformer.transform(new DOMSource(node), new StreamResult(writer));
        builder.append(writer.toString());
    }
    return builder.toString();
}
</pre>
<p>To get the nested XML as String.</p>
]]></content:encoded>
			<wfw:commentRss>http://lstierneyltd.com/blog/development/tips/jaxb-xmlanyelement-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

