cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r888933 - in /websites/production/cxf/content: cache/docs.pageCache docs/validationfeature.html
Date Tue, 03 Dec 2013 13:48:42 GMT
Author: buildbot
Date: Tue Dec  3 13:48:41 2013
New Revision: 888933

Log:
Production update by buildbot for cxf

Modified:
    websites/production/cxf/content/cache/docs.pageCache
    websites/production/cxf/content/docs/validationfeature.html

Modified: websites/production/cxf/content/cache/docs.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/cxf/content/docs/validationfeature.html
==============================================================================
--- websites/production/cxf/content/docs/validationfeature.html (original)
+++ websites/production/cxf/content/docs/validationfeature.html Tue Dec  3 13:48:41 2013
@@ -33,6 +33,7 @@
 
 <script src='/resources/highlighter/scripts/shCore.js'></script>
 <script src='/resources/highlighter/scripts/shBrushJava.js'></script>
+<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
 <script>
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -132,15 +133,15 @@ Apache CXF -- ValidationFeature
 <div id="ConfluenceContent"><p><span style="font-size:2em;font-weight:bold">
Bean Validation Feature </span></p>
 
 <div>
-<ul><li><a shape="rect" href="#ValidationFeature-Introduction">Introduction</a></li><li><a
shape="rect" href="#ValidationFeature-Dependencies">Dependencies</a></li><ul><li><a
shape="rect" href="#ValidationFeature-UsingHibernateValidatorasbeanvalidationprovider">Using
Hibernate Validator as bean validation provider</a></li><li><a shape="rect"
href="#ValidationFeature-UsingApacheBValasbeanvalidationprovider">Using Apache BVal as
bean validation provider</a></li></ul><li><a shape="rect" href="#ValidationFeature-CommonBeanValidation1.1Interceptors">Common
Bean Validation 1.1 Interceptors</a></li><li><a shape="rect" href="#ValidationFeature-BeanValidation1.1andJAXRS2.0integration">Bean
Validation 1.1 and JAX-RS 2.0 integration</a></li><ul><li><a shape="rect"
href="#ValidationFeature-ConfiguringBeanValidation1.1usingJAXRSServerFactoryBean">Configuring
Bean Validation 1.1 using JAXRSServerFactoryBean</a></li><li><a shape="rect"
href="#ValidationFeature-ConfiguringBeanValidation1.1usingSpri
 ngbeandefinitionsXML">Configuring Bean Validation 1.1 using Spring bean definitions XML</a></li><li><a
shape="rect" href="#ValidationFeature-ValidationExceptionsandHTTPstatuscodes">Validation
Exceptions and HTTP status codes</a></li><li><a shape="rect" href="#ValidationFeature-Examples">Examples</a></li><ul><li><a
shape="rect" href="#ValidationFeature-Validatingsimpleinputparameters">Validating simple
input parameters</a></li><li><a shape="rect" href="#ValidationFeature-Validatingcomplexinputparameters">Validating
complex input parameters</a></li><li><a shape="rect" href="#ValidationFeature-Validatingreturnvalues%28nonResponse%29">Validating
return values (non-Response)</a></li><li><a shape="rect" href="#ValidationFeature-Validatingreturnvalues%28Response%29">Validating
return values (Response)</a></li></ul></ul></ul></div>
+<ul><li><a shape="rect" href="#ValidationFeature-Introduction">Introduction</a></li><li><a
shape="rect" href="#ValidationFeature-Dependencies">Dependencies</a></li><ul><li><a
shape="rect" href="#ValidationFeature-UsingHibernateValidatorasbeanvalidationprovider">Using
Hibernate Validator as bean validation provider</a></li><li><a shape="rect"
href="#ValidationFeature-UsingApacheBValasbeanvalidationprovider">Using Apache BVal as
bean validation provider</a></li></ul><li><a shape="rect" href="#ValidationFeature-CommonBeanValidation1.1Interceptors">Common
Bean Validation 1.1 Interceptors</a></li><ul><li><a shape="rect"
href="#ValidationFeature-Configuration">Configuration</a></li></ul><li><a
shape="rect" href="#ValidationFeature-BeanValidation1.1andJAXRS2.0">Bean Validation 1.1
and JAX-RS 2.0</a></li><ul><li><a shape="rect" href="#ValidationFeature-ConfiguringBeanValidation1.1usingJAXRSServerFactoryBean">Configuring
Bean Validation 1.1 using JAXRSServerFactoryBean</a></li><li><a shape="
 rect" href="#ValidationFeature-ConfiguringBeanValidation1.1usingSpringbeandefinitionsXML">Configuring
Bean Validation 1.1 using Spring bean definitions XML</a></li><li><a
shape="rect" href="#ValidationFeature-ValidationExceptionsandHTTPstatuscodes">Validation
Exceptions and HTTP status codes</a></li></ul><li><a shape="rect"
href="#ValidationFeature-Examples">Examples</a></li><ul><li><a
shape="rect" href="#ValidationFeature-Validatingsimpleinputparameters">Validating simple
input parameters</a></li><li><a shape="rect" href="#ValidationFeature-Validatingcomplexinputparameters">Validating
complex input parameters</a></li><li><a shape="rect" href="#ValidationFeature-Validatingreturnvalues%28nonResponse%29">Validating
return values (non-Response)</a></li><li><a shape="rect" href="#ValidationFeature-Validatingreturnvalues%28Response%29">Validating
return values (Response)</a></li></ul><li><a shape="rect" href="#ValidationFeature-BeanValidationandSchemaValidation">Bean
Validation and Schem
 a Validation</a></li></ul></div>
 
 <h1><a shape="rect" name="ValidationFeature-Introduction"></a>Introduction</h1>
 
-<p>Bean Validation 1.1 (JSR-349), an evolution of Bean Validation 1.0 (JSR-303), introduces
a very powerful concepts of declarative constraints (based on Java annotations) to define
the expectation for:</p>
-<ul class="alternate" type="square"><li>properties of JavaBeans</li><li>method
/ contructor parameters</li><li>method return values</li></ul>
+<p>Bean Validation 1.1 (JSR-349), an evolution of Bean Validation 1.0 (JSR-303), introduces
declarative constraints (based on Java annotations) to define the expectations for:</p>
+<ul class="alternate" type="square"><li>properties of Java Beans</li><li>method
and constructor parameters</li><li>method return values</li></ul>
 
 
-<p>Here are couple of typical examples:</p>
+<p>For example:</p>
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
 public class Person {
@@ -155,53 +156,56 @@ public class Person {
 ]]></script>
 </div></div>
 
-<p>Bean Validation API has been part of JPA 2.0 (JSR-317) and has proven to be successful
and very useful, helping developers to delegate routine validation tasks to solid, very extensible
framework. It is very easy to create own constraints, including complex cross-field ones.</p>
+<p>Bean Validation API has been part of JPA 2.0 (JSR-317) and has proven to be successful
and very useful, helping developers to delegate routine validation tasks to the solid, very
extensible framework. It is very easy to create own constraints, including complex cross-field
ones.</p>
 
 <h1><a shape="rect" name="ValidationFeature-Dependencies"></a>Dependencies</h1>
-<p>Bean Validation support in Apache CXF is implementation-independent and is built
solely using API. As such, the only required dependency is:</p>
-<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent
panelContent">
-<pre>&lt;dependency&gt;
+<p>Bean Validation support in Apache CXF is implementation-independent and is built
solely using Bean Validation API. The required dependencies are:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;dependency&gt;
     &lt;groupId&gt;javax.validation&lt;/groupId&gt;
     &lt;artifactId&gt;validation-api&lt;/artifactId&gt;
     &lt;version&gt;1.1.0.Final&lt;/version&gt;
 &lt;/dependency&gt;
-</pre>
+&lt;dependency&gt;
+    &lt;groupId&gt;javax.el&lt;/groupId&gt;
+    &lt;artifactId&gt;javax.el-api&lt;/artifactId&gt;
+    &lt;!-- use 3.0-b02 version for Java 6 --&gt;
+    &lt;version&gt;3.0.0&lt;/version&gt;
+&lt;/dependency&gt;
+&lt;dependency&gt;
+    &lt;groupId&gt;org.glassfish&lt;/groupId&gt;
+    &lt;artifactId&gt;javax.el&lt;/artifactId&gt;
+    &lt;!-- use 3.0-b01 version for Java 6 --&gt;
+    &lt;version&gt;3.0.0/version&gt;
+&lt;/dependency&gt;
+]]></script>
 </div></div>
 
-<p>API doesn't provide implementation but there are couple of choices to pick from.
Please notice that bean validation implementation is taken from the ones present in classpath.
If no implementation is detected, bean validation is not available for use and constraints
validation won't have any effect. </p>
+<p>A couple of API implementations is available. Please note that if no implementation
is detected on the runtime class-path then the constraints validation won't have any effect.
</p>
 
 <h2><a shape="rect" name="ValidationFeature-UsingHibernateValidatorasbeanvalidationprovider"></a>Using
Hibernate Validator as bean validation provider</h2>
 <p><a shape="rect" class="external-link" href="http://www.hibernate.org/subprojects/validator.html"
rel="nofollow">http://www.hibernate.org/subprojects/validator.html</a></p>
 
-<p>Hibernate Validator is mature and feature-rich validation provider with full support
of Bean Validation 1.1 (as of version 5.x.x which is the reference implementation for JSR
349 - Bean Validation 1.1 API). To use Hibernate Validator in your Apache CXF projects, couple
of additional dependencies should be included:</p>
+<p>Hibernate Validator is mature and feature-rich validation provider with full support
of Bean Validation 1.1 (as of version 5.x.x which is the reference implementation for JSR
349 - Bean Validation 1.1 API). To use Hibernate Validator in your Apache CXF projects add
the following dependency:</p>
 
-<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent
panelContent">
-<pre>&lt;dependency&gt;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;dependency&gt;
     &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
     &lt;artifactId&gt;hibernate-validator&lt;/artifactId&gt;
     &lt;version&gt;5.0.1.Final&lt;/version&gt;
 &lt;/dependency&gt;
-
-&lt;dependency&gt;
-    &lt;groupId&gt;javax.el&lt;/groupId&gt;
-    &lt;artifactId&gt;javax.el-api&lt;/artifactId&gt;
-    &lt;version&gt;3.0-b02&lt;/version&gt;
-&lt;/dependency&gt;
-
-&lt;dependency&gt;
-    &lt;groupId&gt;org.glassfish&lt;/groupId&gt;
-    &lt;artifactId&gt;javax.el&lt;/artifactId&gt;
-    &lt;version&gt;3.0-b01/version&gt;
-&lt;/dependency&gt;
-</pre>
+]]></script>
 </div></div>
 
-<p>Hibernate Validator uses Java Expression Language 3.0 in order to provide better
validation messages support so the respective EL 3.0 API and implementation dependencies should
be included.  </p>
+<p>Hibernate Validator uses Java Expression Language 3.0 in order to provide better
validation messages support.  </p>
 
 <h2><a shape="rect" name="ValidationFeature-UsingApacheBValasbeanvalidationprovider"></a>Using
Apache BVal as bean validation provider</h2>
+
 <p><a shape="rect" class="external-link" href="http://bval.apache.org/">http://bval.apache.org/</a></p>
 
-<p>Current stable version of Apache BVal (0.5) doesn't support Bean Validation 1.1
but the upcoming 1.1.0 should have it fully implemented (at the moment 1.1.0-alpha-SNAPSHOT
could be used).</p>
+<p>Current stable version of Apache BVal (0.5) doesn't support Bean Validation 1.1
but the upcoming 1.1.0 will have it fully implemented (at the moment 1.1.0-alpha-SNAPSHOT
could be used).</p>
 <div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent
panelContent">
 <pre>&lt;dependency&gt;
     &lt;groupId&gt;org.apache.bval&lt;/groupId&gt;
@@ -213,25 +217,112 @@ public class Person {
 
 <h1><a shape="rect" name="ValidationFeature-CommonBeanValidation1.1Interceptors"></a>Common
Bean Validation 1.1 Interceptors</h1>
 
-<p>Generic Bean Validation 1.1 implementation is build around two interceptors and
validation provider:</p>
-<ul class="alternate" type="square"><li>org.apache.cxf.validation.BeanValidationInInterceptor:
validates every input message (request) arguments against validation constraints, raises org.apache.cxf.validation.ConstraintViolationException
if any violations are encountered</li><li>org.apache.cxf.validation.BeanValidationOutInterceptor:
validates every output message (response) arguments against validation constraints, raises
org.apache.cxf.validation.ResponseConstraintViolationException if any violations are encountered</li><li>org.apache.cxf.validation.BeanValidationProvider:
abstracts away Bean Validation 1.1 implementation and provides useful utility methods</li></ul>
+<p>JAX-RS and JAX-WS frontends can rely on the following common interceptors to get
Bean Validation done:</p>
+
+<ul class="alternate" type="square"><li><a shape="rect" class="external-link"
href="http://svn.apache.org/repos/asf/cxf/trunk/core/src/main/java/org/apache/cxf/validation/BeanValidationInInterceptor.java">org.apache.cxf.validation.BeanValidationInInterceptor</a>:
validates every input message (request) arguments against validation constraints, raises org.apache.cxf.validation.ConstraintViolationException
if any violations are encountered</li></ul>
+
+
+<ul class="alternate" type="square"><li><a shape="rect" class="external-link"
href="http://svn.apache.org/repos/asf/cxf/trunk/core/src/main/java/org/apache/cxf/validation/BeanValidationOutInterceptor.java">org.apache.cxf.validation.BeanValidationOutInterceptor</a>:
validates every output message (response) arguments against validation constraints, raises
org.apache.cxf.validation.ResponseConstraintViolationException if any violations are encountered</li></ul>
+
+
+<p>Both interceptors depend on <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/trunk/core/src/main/java/org/apache/cxf/validation/BeanValidationProvider.java">org.apache.cxf.validation.BeanValidationProvider</a>
which abstracts away Bean Validation 1.1 API and provides useful utility methods. This provider
can be directly injected into the interceptors as a 'provider' property. Injecting the provider
is optional, the interceptors will create a default provider instance if it has not been injected.
</p>
 
+<p>The provider can be initialized with javax.validation.ParameterNameProvider or <a
shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/trunk/core/src/main/java/org/apache/cxf/validation/ValidationConfiguration.java">ValidationConfiguration</a>
in order to customize the way Bean Validation 1.1 implementation does its work.</p>
 
-<p>Feature-specific implementation for JAX-RS / JAX-WS is built on top of these common
blocks.</p>
+<p>Note that interceptors will only be effective if the current service object is a
singleton. They will make a best effort of getting hold of a reference to the current service
object, which can also be injected directly as a 'serviceObject' property.</p>
 
-<h1><a shape="rect" name="ValidationFeature-BeanValidation1.1andJAXRS2.0integration"></a>Bean
Validation 1.1 and JAX-RS 2.0 integration</h1>
+<p>Custom interceptors can customize the default processing (for example, see the section
on Bean Validation 1.1 in JAX-RS 2.0). Typical customization is to have one of the input parameters
or the response value unwrapped before it can be validated.</p>
 
-<p>Among many other features, JAX-RS 2.0 specification introduces Bean Validation 1.1
support as a mandatory part of implementation. In an effort to fulfill this requirement, Apache
CXF provides full-fledge validation support for JAX-RS / JAX-WS endpoints, both for request
parameters and response values.</p>
+<p><a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/trunk/core/src/main/java/org/apache/cxf/validation/BeanValidationFeature.java">org.apache.cxf.validation.BeanValidationFeature</a>
can be used to register both in and out validation interceptors.</p>
 
-<p>Bean Validation 1.1 support in JAX-RS 2.0 is built on top of three main components:</p>
-<ul class="alternate" type="square"><li>in-interceptor (org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor):
validates REST/WS endpoint parameters before invoking the method</li><li>out-interceptor
(org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor): validates REST/WS endpoint
return value after the method invocation</li><li>exception mapper (org.apache.cxf.jaxrs.validation.ValidationExceptionMapper):
transforms any ValidationException to corresponding HTTP status code</li></ul>
+<h2><a shape="rect" name="ValidationFeature-Configuration"></a>Configuration</h2>
 
+<p>The following snippets show how to get Bean Validation 1.1 interceptors activated
for both JAX-RS and JAX-WS services using Spring: </p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+// Interface implemented by both JAX-RS and JAX-WS services:
+@WebService(targetNamespace = "http://bookworld.com")
+@Path("/")
+public interface BookWorld {
+
+    @POST
+    @Produces("text/xml")
+    @Consumes("text/xml")
+    @Valid
+    BookWithValidation echoBook(@Valid BookWithValidation book);
+
+}
+
+@WebService(endpointInterface = "org.apache.cxf.systest.jaxrs.validation.spring.BookWorld",
+            serviceName = "BookWorld")
+public class BookWorldImpl implements BookWorld {
+
+    @Override
+    public BookWithValidation echoBook(BookWithValidation book) {
+        return book;
+    }
+}
+
+{code:java}
+
+
+{code:xml}
+&lt;!-- JAX-RS and JAX-WS endpoints --&gt;
+&lt;jaxrs:server address="/bwrest"&gt;
+        &lt;jaxrs:serviceBeans&gt;
+            &lt;ref bean="bookWorldValidation"/&gt;
+        &lt;/jaxrs:serviceBeans&gt;
+        &lt;jaxrs:providers&gt;
+            &lt;ref bean="exceptionMapper"/&gt;
+        &lt;/jaxrs:providers&gt;
+        &lt;jaxrs:features&gt;
+            &lt;ref bean="commonValidationFeature" /&gt;
+        &lt;/jaxrs:features&gt;
+&lt;/jaxrs:server&gt;
+    
+&lt;jaxws:endpoint xmlns:s="http://bookworld.com" 
+                serviceName="s:BookWorld" 
+                endpointName="s:BookWorldPort" 
+                implementor="#bookWorldValidation" 
+                address="/bwsoap"&gt;
+    &lt;jaxws:features&gt;
+        &lt;ref bean="commonValidationFeature" /&gt;
+     &lt;/jaxws:features&gt;
+&lt;/jaxws:endpoint&gt;                
+    
+&lt;bean id="bookWorldValidation" class="org.apache.cxf.systest.jaxrs.validation.spring.BookWorldImpl"/&gt;
+&lt;bean id="commonValidationFeature" class="org.apache.cxf.validation.BeanValidationFeature"/&gt;
+]]></script>
+</div></div>
+
+<p>Check the next section for more examples specific to JAX-RS.</p>
+
+<h1><a shape="rect" name="ValidationFeature-BeanValidation1.1andJAXRS2.0"></a>Bean
Validation 1.1 and JAX-RS 2.0</h1>
+
+<p>JAX-RS 2.0 specification (Chapter 7) introduces an optional requirement to get Bean
Validation 1.1 supported.</p>
+
+<p>Using the common interceptors described in the previous section can be sufficient
for JAX-RS 2.0 resource methods having their input parameters and response values validated.
 </p>
+
+<p>However, if you need a response values wrapped in JAX-RS Response validated or make
sure per-request service instances get validated then JAX-RS frontend specific interceptors
and the invoker need to be used:    </p>
+
+<ul class="alternate" type="square"><li>org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor:
validates JAX-RS resource method parameters. At the moment it is nearly identical to the common
BeanValidationInInterceptor which it extends. It can also be used as a JAX-RS 2.0 ContainerRequestFilter</li></ul>
+
+
+<ul class="alternate" type="square"><li>org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor:
validates JAX-RS resource method return values, unwraps JAX-RS Response. It can also be used
as a JAX-RS 2.0 ContainerResponseFilter</li></ul>
+
+
+<ul class="alternate" type="square"><li>org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInvoker:
register it as a jaxrs:invoker if you need non-singleton service objects validated.</li></ul>
+
+
+
+<p>Note the default JAX-RS ExceptionMapper (org.apache.cxf.jaxrs.validation.ValidationExceptionMapper)
which transforms javax.validation.ValidationException to corresponding HTTP status code has
to be registered. Users can register the custom mappers if preferred.</p>
+
+<p>org.apache.cxf.jaxrs.validation.JAXRSParameterNameProvider can be registered directly
with the common BeanValidationProvider to get the error messages customized.</p>
 
-<p>All these components may share the single instance of org.apache.cxf.validation.BeanValidationProvider
which actually delegates all validation logic to available Bean Validation 1.1 implementation.</p>
 
 <h2><a shape="rect" name="ValidationFeature-ConfiguringBeanValidation1.1usingJAXRSServerFactoryBean"></a>Configuring
Bean Validation 1.1 using JAXRSServerFactoryBean</h2>
 
-<p>It's quite easy to enable bean validation support using JAXRSServerFactoryBean as
following code snippet shows:</p>
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
 JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
@@ -283,13 +374,13 @@ sf.create();
 <h2><a shape="rect" name="ValidationFeature-ValidationExceptionsandHTTPstatuscodes"></a>Validation
Exceptions and HTTP status codes</h2>
 
 <p>As per JAX-RS 2.0 specification, any input parameter validation violation is mapped
to HTTP status code 400 Bad Request and any return value validation violation (or internal
validation violation) is mapped to HTTP status code 500 Internal Server Error. This is essentially
what org.apache.cxf.jaxrs.validation.ValidationExceptionMapper does.</p>
-<div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col
span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1"
valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif"
width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">At
the moment, the details of validation exceptions are not included into the response. The reason
why is that error reporting logic is application-specific and may vary from application to
application (f.e. it could be simple 'text/html' with error message, or 'application/json',
or HTTP custom headers, ...). Application developers are encouraged to provide own implementation
of this particular functionality.</td></tr></table></div>
+<div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col
span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1"
valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif"
width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">The
details of validation exceptions are not currently included into the response but only logged.
Application developers are encouraged to register custom exception mappers if reporting the
validation error details is required.</td></tr></table></div>
 
-<h2><a shape="rect" name="ValidationFeature-Examples"></a>Examples</h2>
+<h1><a shape="rect" name="ValidationFeature-Examples"></a>Examples</h1>
 
-<p>You can use any predefined validation annotation as well as define your own as far
as it follows Bean Validation 1.1 specification. This section includes couple of typical scenarios.</p>
+<p>The following examples show JAX-RS resource methods being validated but predefined
or custom Bean Validation 1.1 constraints can be applied to JAX-WS service methods exactly
the same way.</p>
 
-<h3><a shape="rect" name="ValidationFeature-Validatingsimpleinputparameters"></a>Validating
simple input parameters</h3>
+<h2><a shape="rect" name="ValidationFeature-Validatingsimpleinputparameters"></a>Validating
simple input parameters</h2>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
@@ -298,24 +389,26 @@ sf.create();
 public Response addBook(
         @NotNull @Pattern(regexp = "\\d+") @FormParam("id") String id,
         @NotNull @Size(min = 1, max = 50) @FormParam("name") String name) {
-    // ...
+    // do some work
+    return Response.created().build();
 }
 ]]></script>
 </div></div>
 
-<h3><a shape="rect" name="ValidationFeature-Validatingcomplexinputparameters"></a>Validating
complex input parameters</h3>
+<h2><a shape="rect" name="ValidationFeature-Validatingcomplexinputparameters"></a>Validating
complex input parameters</h2>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
 @POST
 @Path("/books")
 public Response addBook( @Valid Book book ) {
-    // ...
+    // do some work
+    return Response.created().build();
 }
 ]]></script>
 </div></div>
 
-<p>This example assumes that class Book has validation constraints defined, f.e.:</p>
+<p>This example assumes that class Book has validation constraints defined:</p>
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
 public class Book {
@@ -327,7 +420,7 @@ public class Book {
 ]]></script>
 </div></div>
 
-<h3><a shape="rect" name="ValidationFeature-Validatingreturnvalues%28nonResponse%29"></a>Validating
return values (non-Response)</h3>
+<h2><a shape="rect" name="ValidationFeature-Validatingreturnvalues%28nonResponse%29"></a>Validating
return values (non-Response)</h2>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
@@ -336,16 +429,14 @@ public class Book {
 @Override    
 @NotNull @Valid
 public Book getBook(@PathParam("bookId") String id) {
-    // ...     
+    return new Book( id );     
 }
 ]]></script>
 </div></div>
 
 <p>This example assumes that class Book has validation constraints defined (as in example
above).</p>
 
-<h3><a shape="rect" name="ValidationFeature-Validatingreturnvalues%28Response%29"></a>Validating
return values (Response)</h3>
-
-<p>Returning Response object stands aside from all other usage scenarios. Usually,
Response is a holder for another object (entity) but because Response has no validation constraints
defined, the inner object (entity) is not validatable even if it has full set of validation
constraints . Unfortunately, this particular use case is not described in JAX-RS 2.0 specification.
Nevertheless, Apache CXF team thinks that such a validation would be beneficial and performs
a simple trick: whenever Response is being returned, all defined for it validation constraints
will be applied not to Response instance itself but to the entity it holds.</p>
+<h2><a shape="rect" name="ValidationFeature-Validatingreturnvalues%28Response%29"></a>Validating
return values (Response)</h2>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
@@ -356,7 +447,15 @@ public Response getBookResponse(@PathPar
     return Response.ok( new Book( id ) ).build();
 }
 ]]></script>
-</div></div></div>
+</div></div>
+
+<h1><a shape="rect" name="ValidationFeature-BeanValidationandSchemaValidation"></a>Bean
Validation and Schema Validation</h1>
+
+<p>Web service developers often rely on the schema-based validation. </p>
+
+<p>Bean validation can be used as an alternative form of validation. </p>
+
+<p>However it can also complement the schema-based validation in cases where the current
schema is not very strict.</p></div>
            </div>
            <!-- Content -->
          </td>



Mime
View raw message