Why ever have client validation then I guess if we know its valid.

The reporter had a problem that their cxf client was validating the
incoming data to the client that was never going to be valid. Because only
the incoming data to the server is guaranteed valid.  I still don't
understand how that can be the desired behavior.  However I will remove
those lines as requested hopefully tomorrow.

My additional changes will at least allow clients to turn off validation
completely which was not working if annotations were used.
On 29/11/2014 3:18 PM, "Daniel Kulp" <dk...@apache.org> wrote:

>
> > On Nov 28, 2014, at 10:11 PM, Jason Pell <jp...@apache.org> wrote:
> >
> > Its only reversing what's coming from the model. If you define IN in the
> > jaxws properties on the client it will continue to validate IN on the
> > client as before.
> >
> > If I have IN defined for a operation using an annotation the old code
> would
> > actually validate the response coming back to the client.
>
> That’s exactly what IN is supposed to mean.
>
> > This does seem
> > counter intuitive especially as IN might have been specified because the
> > response may be incomplete and so can't be validated.
>
> It would be way more counter intuitive to me for IN to apply to messages
> that are going OUT.    That’s completely back wards.
>
>
> > An IN for service is the OUT for client.
> >
> > The previous code was just plain wrong for client side - my code by the
> way
> > :-)
>
> Why do you think it’s wrong?
>
> Basically, we have services that specify validation for IN as that is the
> only direction that we don’t control and we need to validate that.  For
> messages that we produce (out on client, out on server), we know the
> messages are valid as we populate the data correctly.   However, we
> need/want to validate any incoming data to make sure that is correct.  That
> is exactly what IN is supposed to mean.  Validate any data coming IN.  By
> putting the annotation on the SEI specified with IN, we would get what I
> would regard as the correct behavior.  Validation of the stuff we cannot
> control and no validation for the stuff we already know is correct.
>
>
> > This particular piece is only a few lines in ServiceUtils so I am happy
> to
> > remove it if you are still -1
>
> That part, yes.  It’s wrong.
>
> Dan
>
>
> > The alternative is I will add a property to enable it but only if the
> > property is used.
> >
> > Would that be OK?
> > On 29/11/2014 10:05 AM, "Daniel Kulp" <dk...@apache.org> wrote:
> >
> >>
> >> I’m -1 on the part of this that changes the IN to an OUT on the client
> >> side.   The IN and OUT are specifically named that way as they apply to
> the
> >> messages that come IN to the client or IN to the server.   The “IN”
> >> validation should definitely not be applying to the messages going OUT.
> >> Plus, that would be a huge behavioral change that would break many
> peoples
> >> existing applications.
> >>
> >> Dan
> >>
> >>
> >>
> >>
> >>> On Nov 27, 2014, at 11:52 PM, jp...@apache.org wrote:
> >>>
> >>> Repository: cxf
> >>> Updated Branches:
> >>> refs/heads/2.7.x-fixes e172a3ebf -> 27ce514bb
> >>>
> >>>
> >>> CXF-6118 support overriding schema validation at jaxws endpoint and
> >> client level and applying the correct validation direction at client
> level
> >>>
> >>>
> >>> Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
> >>> Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/27ce514b
> >>> Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/27ce514b
> >>> Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/27ce514b
> >>>
> >>> Branch: refs/heads/2.7.x-fixes
> >>> Commit: 27ce514bb97a7693fd78d1ca16685665bca64553
> >>> Parents: e172a3e
> >>> Author: Jason Pell <jp...@apache.org>
> >>> Authored: Thu Nov 27 16:54:01 2014 +1100
> >>> Committer: Jason Pell <jp...@apache.org>
> >>> Committed: Fri Nov 28 15:52:36 2014 +1100
> >>>
> >>> ----------------------------------------------------------------------
> >>> .../validation/SchemaValidationFeature.java     |   2 +-
> >>> .../org/apache/cxf/helpers/ServiceUtils.java    |  98 ++++++-
> >>> .../AbstractInDatabindingInterceptor.java       |  23 +-
> >>> .../AbstractOutDatabindingInterceptor.java      |  22 +-
> >>> .../java/org/apache/cxf/message/Message.java    |   9 +
> >>> .../soap/interceptor/RPCInInterceptor.java      |   2 +-
> >>> .../factory/AnnotationsFactoryBeanListener.java |   9 +-
> >>> .../JavaFirstSchemaValidationTest.java          | 256
> ++++++++++++++-----
> >>> .../jaxws/schemavalidation/PersonService.java   |  13 +-
> >>> .../PersonServiceAnnotated.java                 |  13 +-
> >>> .../PersonServiceAnnotatedImpl.java             |  15 +-
> >>> .../schemavalidation/PersonServiceImpl.java     |  12 +-
> >>> .../MTOMProviderSchemaValidationTest.bak        |  69 -----
> >>> 13 files changed, 342 insertions(+), 201 deletions(-)
> >>> ----------------------------------------------------------------------
> >>>
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/api/src/main/java/org/apache/cxf/feature/validation/SchemaValidationFeature.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/api/src/main/java/org/apache/cxf/feature/validation/SchemaValidationFeature.java
> >>
> b/api/src/main/java/org/apache/cxf/feature/validation/SchemaValidationFeature.java
> >>> index 5eda79c..c314eaf 100644
> >>> ---
> >>
> a/api/src/main/java/org/apache/cxf/feature/validation/SchemaValidationFeature.java
> >>> +++
> >>
> b/api/src/main/java/org/apache/cxf/feature/validation/SchemaValidationFeature.java
> >>> @@ -51,7 +51,7 @@ public class SchemaValidationFeature extends
> >> AbstractFeature {
> >>>        for (BindingOperationInfo bop :
> >> endpoint.getEndpointInfo().getBinding().getOperations()) {
> >>>            SchemaValidationType type =
> >> provider.getSchemaValidationType(bop.getOperationInfo());
> >>>            if (type != null) {
> >>> -
> >> bop.getOperationInfo().setProperty(Message.SCHEMA_VALIDATION_ENABLED,
> type);
> >>> +
> >> bop.getOperationInfo().setProperty(Message.SCHEMA_VALIDATION_TYPE,
> type);
> >>>            }
> >>>        }
> >>>    }
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/api/src/main/java/org/apache/cxf/helpers/ServiceUtils.java
> >>> ----------------------------------------------------------------------
> >>> diff --git a/api/src/main/java/org/apache/cxf/helpers/ServiceUtils.java
> >> b/api/src/main/java/org/apache/cxf/helpers/ServiceUtils.java
> >>> index 85d77d0..28c7ba2 100644
> >>> --- a/api/src/main/java/org/apache/cxf/helpers/ServiceUtils.java
> >>> +++ b/api/src/main/java/org/apache/cxf/helpers/ServiceUtils.java
> >>> @@ -27,10 +27,16 @@ import java.util.StringTokenizer;
> >>> import javax.xml.namespace.QName;
> >>>
> >>> import
> org.apache.cxf.annotations.SchemaValidation.SchemaValidationType;
> >>> +import org.apache.cxf.endpoint.Endpoint;
> >>> +import org.apache.cxf.message.Exchange;
> >>> import org.apache.cxf.message.Message;
> >>> +import org.apache.cxf.message.MessageUtils;
> >>> +import org.apache.cxf.service.model.AbstractPropertiesHolder;
> >>> +import org.apache.cxf.service.model.BindingOperationInfo;
> >>> +import org.apache.cxf.service.model.EndpointInfo;
> >>> +import org.apache.cxf.service.model.OperationInfo;
> >>>
> >>> public final class ServiceUtils {
> >>> -
> >>>    private ServiceUtils() {
> >>>    }
> >>>
> >>> @@ -42,24 +48,94 @@ public final class ServiceUtils {
> >>>     * @param type
> >>>     */
> >>>    public static boolean isSchemaValidationEnabled(SchemaValidationType
> >> type, Message message) {
> >>> -        SchemaValidationType messageType =
> >> getSchemaValidationType(message);
> >>> +        SchemaValidationType validationType =
> >> getSchemaValidationType(message);
> >>>
> >>> -        return messageType.equals(type)
> >>> +        return validationType.equals(type)
> >>>            || ((SchemaValidationType.IN.equals(type) ||
> >> SchemaValidationType.OUT.equals(type))
> >>> -                && SchemaValidationType.BOTH.equals(messageType));
> >>> +                && SchemaValidationType.BOTH.equals(validationType));
> >>>    }
> >>> -
> >>> +
> >>>    /**
> >>> -     * Determines the appropriate SchemaValidationType to return based
> >> on either
> >>> -     * a Boolean (for backwards compatibility) or the selected Schema
> >> Validation Type.
> >>> -     *
> >>> -     * Package private as the isSchemaValidationEnabled method should
> >> be used instead.  Only
> >>> -     * visible for easier testing
> >>> +     * A convenience method to check for schema validation config in
> >> the message context, and then in the service model.
> >>> +     * Does not modify the Message context (other than what is done in
> >> the getContextualProperty itself)
> >>>     *
> >>>     * @param message
> >>> +     * @param type
> >>>     */
> >>> -    static SchemaValidationType getSchemaValidationType(Message
> >> message) {
> >>> +    public static SchemaValidationType getSchemaValidationType(Message
> >> message) {
> >>> +        SchemaValidationType validationType =
> >> getOverrideSchemaValidationType(message);
> >>> +        if (validationType == null) {
> >>> +            validationType =
> getSchemaValidationTypeFromModel(message);
> >>> +        }
> >>> +
> >>> +        if (validationType == null) {
> >>> +            validationType = SchemaValidationType.NONE;
> >>> +        }
> >>> +
> >>> +        return validationType;
> >>> +    }
> >>> +
> >>> +    private static SchemaValidationType
> >> getOverrideSchemaValidationType(Message message) {
> >>>        Object obj =
> >> message.getContextualProperty(Message.SCHEMA_VALIDATION_ENABLED);
> >>> +        if (obj != null) {
> >>> +            // this method will transform the legacy enabled as well
> >>> +            return getSchemaValidationType(obj);
> >>> +        } else {
> >>> +            return null;
> >>> +        }
> >>> +    }
> >>> +
> >>> +    private static SchemaValidationType
> >> getSchemaValidationTypeFromModel(Message message) {
> >>> +        boolean isRequestor = MessageUtils.isRequestor(message);
> >>> +        Exchange exchange = message.getExchange();
> >>> +
> >>> +        if (exchange != null) {
> >>> +            BindingOperationInfo boi =
> >> exchange.getBindingOperationInfo();
> >>> +            Endpoint endpoint = exchange.getEndpoint();
> >>> +
> >>> +            if (boi != null && endpoint != null) {
> >>> +                SchemaValidationType validationType = null;
> >>> +                OperationInfo opInfo = boi.getOperationInfo();
> >>> +                EndpointInfo ep = endpoint.getEndpointInfo();
> >>> +
> >>> +                if (validationType == null && opInfo != null) {
> >>> +                    validationType =
> >> getSchemaValidationTypeFromModel(message, opInfo, isRequestor);
> >>> +
> >>> +                    if (validationType == null && ep != null) {
> >>> +                        validationType =
> >> getSchemaValidationTypeFromModel(message, ep, isRequestor);
> >>> +                    }
> >>> +                }
> >>> +
> >>> +                return validationType;
> >>> +            }
> >>> +        }
> >>> +
> >>> +        // else
> >>> +        return null;
> >>> +    }
> >>> +
> >>> +    private static SchemaValidationType
> >> getSchemaValidationTypeFromModel(
> >>> +            Message message, AbstractPropertiesHolder properties,
> >> boolean isRequestor) {
> >>> +        Object obj =
> >> properties.getProperty(Message.SCHEMA_VALIDATION_TYPE);
> >>> +        if (obj != null) {
> >>> +            SchemaValidationType validationType =
> >> getSchemaValidationType(obj);
> >>> +
> >>> +            // Reverse the direction of any IN / OUT for requestor
> >> (client)
> >>> +            if (isRequestor) {
> >>> +                if (SchemaValidationType.IN.equals(validationType)) {
> >>> +                    return SchemaValidationType.OUT;
> >>> +                } else if
> >> (SchemaValidationType.OUT.equals(validationType)) {
> >>> +                    return SchemaValidationType.IN;
> >>> +                }
> >>> +            }
> >>> +
> >>> +            return validationType;
> >>> +        } else {
> >>> +            return null;
> >>> +        }
> >>> +    }
> >>> +
> >>> +    public static SchemaValidationType getSchemaValidationType(Object
> >> obj) {
> >>>        if (obj instanceof SchemaValidationType) {
> >>>            return (SchemaValidationType)obj;
> >>>        } else if (obj != null) {
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/api/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/api/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
> >>
> b/api/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
> >>> index c47417a..ec8cf71 100644
> >>> ---
> >>
> a/api/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
> >>> +++
> >>
> b/api/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
> >>> @@ -125,24 +125,9 @@ public abstract class
> >> AbstractInDatabindingInterceptor extends AbstractPhaseInte
> >>>        }
> >>>    }
> >>>
> >>> -    /**
> >>> -     * Where an operation level validation type has been set, copy it
> >> to the message, so it can be interrogated
> >>> -     * by all downstream interceptors.  It is expected that sub
> classes
> >> will call setDataReaderValidation subsequent
> >>> -     * to this to ensure the DataReader schema reference is updated as
> >> appropriate.
> >>> -     *
> >>> -     * @param bop
> >>> -     * @param message
> >>> -     * @param reader
> >>> -     * @see #setDataReaderValidation(Service, Message, DataReader)
> >>> -     */
> >>> -    protected void setOperationSchemaValidation(OperationInfo opInfo,
> >> Message message) {
> >>> -        if (opInfo != null) {
> >>> -            SchemaValidationType validationType =
> >>> -                (SchemaValidationType)
> >> opInfo.getProperty(Message.SCHEMA_VALIDATION_ENABLED);
> >>> -            if (validationType != null) {
> >>> -                message.put(Message.SCHEMA_VALIDATION_ENABLED,
> >> validationType);
> >>> -            }
> >>> -        }
> >>> +    protected void setOperationSchemaValidation(Message message) {
> >>> +        SchemaValidationType validationType =
> >> ServiceUtils.getSchemaValidationType(message);
> >>> +        message.put(Message.SCHEMA_VALIDATION_ENABLED,
> validationType);
> >>>    }
> >>>
> >>>    protected DepthXMLStreamReader getXMLStreamReader(Message message) {
> >>> @@ -247,7 +232,7 @@ public abstract class
> >> AbstractInDatabindingInterceptor extends AbstractPhaseInte
> >>>        }
> >>>
> >>>        // configure endpoint and operation level schema validation
> >>> -        setOperationSchemaValidation(operation.getOperationInfo(),
> >> message);
> >>> +        setOperationSchemaValidation(message);
> >>>
> >>>        QName serviceQName = si.getName();
> >>>        message.put(Message.WSDL_SERVICE, serviceQName);
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/api/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/api/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java
> >>
> b/api/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java
> >>> index db3ba6c..52d1cb1 100644
> >>> ---
> >>
> a/api/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java
> >>> +++
> >>
> b/api/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java
> >>> @@ -43,7 +43,6 @@ import org.apache.cxf.service.Service;
> >>> import org.apache.cxf.service.model.BindingInfo;
> >>> import org.apache.cxf.service.model.BindingOperationInfo;
> >>> import org.apache.cxf.service.model.MessagePartInfo;
> >>> -import org.apache.cxf.service.model.OperationInfo;
> >>> import org.apache.cxf.staxutils.CachingXmlEventWriter;
> >>> import org.apache.cxf.staxutils.StaxUtils;
> >>> import org.apache.cxf.wsdl.EndpointReferenceUtils;
> >>> @@ -85,7 +84,7 @@ public abstract class
> >> AbstractOutDatabindingInterceptor extends AbstractPhaseInt
> >>>        CachingXmlEventWriter cache = null;
> >>>
> >>>        // configure endpoint and operation level schema validation
> >>> -        setOperationSchemaValidation(operation.getOperationInfo(),
> >> message);
> >>> +        setOperationSchemaValidation(message);
> >>>
> >>>        // need to cache the events in case validation fails or
> >> buffering is enabled
> >>>        if (shouldBuffer(message)) {
> >>> @@ -159,22 +158,9 @@ public abstract class
> >> AbstractOutDatabindingInterceptor extends AbstractPhaseInt
> >>>        }
> >>>    }
> >>>
> >>> -    /**
> >>> -     * Where an operation level validation type has been set, copy it
> >> to the message, so it can be interrogated
> >>> -     * by all downstream interceptors
> >>> -     *
> >>> -     * @param bop
> >>> -     * @param message
> >>> -     * @param reader
> >>> -     */
> >>> -    private void setOperationSchemaValidation(OperationInfo opInfo,
> >> Message message) {
> >>> -        if (opInfo != null) {
> >>> -            SchemaValidationType validationType =
> >>> -                (SchemaValidationType)
> >> opInfo.getProperty(Message.SCHEMA_VALIDATION_ENABLED);
> >>> -            if (validationType != null) {
> >>> -                message.put(Message.SCHEMA_VALIDATION_ENABLED,
> >> validationType);
> >>> -            }
> >>> -        }
> >>> +    protected void setOperationSchemaValidation(Message message) {
> >>> +        SchemaValidationType validationType =
> >> ServiceUtils.getSchemaValidationType(message);
> >>> +        message.put(Message.SCHEMA_VALIDATION_ENABLED,
> validationType);
> >>>    }
> >>>
> >>>    protected boolean shouldValidate(Message m) {
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/api/src/main/java/org/apache/cxf/message/Message.java
> >>> ----------------------------------------------------------------------
> >>> diff --git a/api/src/main/java/org/apache/cxf/message/Message.java
> >> b/api/src/main/java/org/apache/cxf/message/Message.java
> >>> index 35e94af..5854a18 100644
> >>> --- a/api/src/main/java/org/apache/cxf/message/Message.java
> >>> +++ b/api/src/main/java/org/apache/cxf/message/Message.java
> >>> @@ -105,7 +105,16 @@ public interface Message extends StringMap {
> >>>     */
> >>>    String MTOM_ENABLED = "mtom-enabled";
> >>>    String MTOM_THRESHOLD = "mtom-threshold";
> >>> +
> >>> +    /**
> >>> +     * Runtime schema validation property
> >>> +     */
> >>>    String SCHEMA_VALIDATION_ENABLED = "schema-validation-enabled";
> >>> +
> >>> +    /**
> >>> +     * The default values for schema validation will be set in the
> >> service model using this property
> >>> +     */
> >>> +    String SCHEMA_VALIDATION_TYPE = "schema-validation-type";
> >>>
> >>>    /**
> >>>     * Boolean property specifying if the Java stack trace is returned
> >> as a
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
> >>
> b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
> >>> index fafd0a9..d49f090 100644
> >>> ---
> >>
> a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
> >>> +++
> >>
> b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
> >>> @@ -226,6 +226,6 @@ public class RPCInInterceptor extends
> >> AbstractInDatabindingInterceptor {
> >>>        message.put(Message.WSDL_DESCRIPTION, wsdlDescription);
> >>>
> >>>        // configure endpoint and operation level schema validation
> >>> -        setOperationSchemaValidation(operation.getOperationInfo(),
> >> message);
> >>> +        setOperationSchemaValidation(message);
> >>>    }
> >>> }
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
> >>
> b/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
> >>> index 7100f2c..9a7cbc8 100644
> >>> ---
> >>
> a/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
> >>> +++
> >>
> b/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
> >>> @@ -297,9 +297,9 @@ public class AnnotationsFactoryBeanListener
> >> implements FactoryBeanListener {
> >>>            // if someone has gone to the effort of specifying
> >> enabled=false, then we need to
> >>>            // handle that, otherwise we use the new
> >> SchemaValidationType type only
> >>>            if (!annotation.enabled()) {
> >>> -                endpoint.put(Message.SCHEMA_VALIDATION_ENABLED,
> >> SchemaValidationType.NONE);
> >>> +
> >> endpoint.getEndpointInfo().setProperty(Message.SCHEMA_VALIDATION_TYPE,
> >> SchemaValidationType.NONE);
> >>>            } else {
> >>> -                endpoint.put(Message.SCHEMA_VALIDATION_ENABLED,
> >> annotation.type());
> >>> +
> >> endpoint.getEndpointInfo().setProperty(Message.SCHEMA_VALIDATION_TYPE,
> >> annotation.type());
> >>>            }
> >>>        }
> >>>    }
> >>> @@ -359,11 +359,8 @@ public class AnnotationsFactoryBeanListener
> >> implements FactoryBeanListener {
> >>>    }
> >>>
> >>>    private void addSchemaValidationSupport(OperationInfo inf,
> >> SchemaValidation annotation) {
> >>> -        // Notice no support for deprecated enabled property here!
> >>> -        // TODO - should we check for the use of this property and at
> >> least log the fact we are
> >>> -        // ignoring it
> >>>        if (annotation != null) {
> >>> -            inf.setProperty(Message.SCHEMA_VALIDATION_ENABLED,
> >> annotation.type());
> >>> +            inf.setProperty(Message.SCHEMA_VALIDATION_TYPE,
> >> annotation.type());
> >>>        }
> >>>    }
> >>>
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/JavaFirstSchemaValidationTest.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/JavaFirstSchemaValidationTest.java
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/JavaFirstSchemaValidationTest.java
> >>> index 888e5a8..9f08839 100644
> >>> ---
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/JavaFirstSchemaValidationTest.java
> >>> +++
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/JavaFirstSchemaValidationTest.java
> >>> @@ -20,12 +20,15 @@
> >>> package org.apache.cxf.systest.jaxws.schemavalidation;
> >>>
> >>> import java.io.IOException;
> >>> +import java.io.PrintWriter;
> >>> +import java.io.StringWriter;
> >>> import java.util.ArrayList;
> >>> import java.util.Arrays;
> >>> import java.util.HashMap;
> >>> import java.util.List;
> >>> import java.util.Map;
> >>>
> >>> +import javax.xml.ws.WebServiceException;
> >>> import javax.xml.ws.soap.SOAPFaultException;
> >>>
> >>> import
> org.apache.cxf.annotations.SchemaValidation.SchemaValidationType;
> >>> @@ -39,24 +42,25 @@ import org.apache.cxf.frontend.ClientProxy;
> >>> import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
> >>> import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
> >>> import org.apache.cxf.message.Message;
> >>> -import org.apache.cxf.service.model.BindingOperationInfo;
> >>> import org.apache.cxf.testutil.common.TestUtil;
> >>> +import org.apache.cxf.transport.http.HTTPConduit;
> >>> +import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
> >>> import org.junit.AfterClass;
> >>> import org.junit.Assert;
> >>> import org.junit.BeforeClass;
> >>> import org.junit.Test;
> >>>
> >>> -/**
> >>> - * TODO - test where the default is NONE at the service level test
> >> where the default is IN or OUT, and then
> >>> - * override at operation levels
> >>> - */
> >>> public class JavaFirstSchemaValidationTest extends Assert {
> >>> -    static final String PORT =
> >> TestUtil.getPortNumber(JavaFirstSchemaValidationTest.class);
> >>> +    static final String PORT =
> >> TestUtil.getNewPortNumber(JavaFirstSchemaValidationTest.class);
> >>> +    static final String PORT_UNUSED =
> >> TestUtil.getNewPortNumber(JavaFirstSchemaValidationTest.class);
> >>>
> >>>    private static List<Server> serverList = new ArrayList<Server>();
> >>>    private static PersonServiceAnnotated annotatedClient;
> >>> +    private static PersonServiceAnnotated annotatedValidatingClient;
> >>>    private static PersonService client;
> >>>    private static PersonServiceRPC rpcClient;
> >>> +
> >>> +    private static PersonService disconnectedClient;
> >>>
> >>>    @BeforeClass
> >>>    public static void startServers() throws Exception {
> >>> @@ -75,9 +79,11 @@ public class JavaFirstSchemaValidationTest extends
> >> Assert {
> >>>
> >>>        createServer(PersonServiceRPC.class, new PersonServiceRPCImpl(),
> >> feature, new LoggingFeature());
> >>>
> >>> -        annotatedClient = createClient(PersonServiceAnnotated.class);
> >>> -        client = createClient(PersonService.class);
> >>> -        rpcClient = createClient(PersonServiceRPC.class);
> >>> +        annotatedClient = createClient(PORT,
> >> PersonServiceAnnotated.class, SchemaValidationType.NONE);
> >>> +        annotatedValidatingClient = createClient(PORT,
> >> PersonServiceAnnotated.class, null);
> >>> +        client = createClient(PORT, PersonService.class,
> >> SchemaValidationType.NONE);
> >>> +        disconnectedClient = createClient(PORT_UNUSED,
> >> PersonService.class, SchemaValidationType.OUT);
> >>> +        rpcClient = createClient(PORT, PersonServiceRPC.class,
> >> SchemaValidationType.NONE);
> >>>    }
> >>>
> >>>    @AfterClass
> >>> @@ -87,10 +93,9 @@ public class JavaFirstSchemaValidationTest extends
> >> Assert {
> >>>        }
> >>>    }
> >>>
> >>> -    static String getAddress(Class<?> sei) {
> >>> -        return "http://localhost:"; + PORT + "/" +
> sei.getSimpleName();
> >>> +    static String getAddress(String port, Class<?> sei) {
> >>> +        return "http://localhost:"; + port + "/" +
> sei.getSimpleName();
> >>>    }
> >>> -
> >>>
> >>>    @Test
> >>>    public void testRPCLit() throws Exception {
> >>> @@ -103,8 +108,8 @@ public class JavaFirstSchemaValidationTest extends
> >> Assert {
> >>>        try {
> >>>            person.setFirstName(null);
> >>>            rpcClient.saveValidateOut(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>>            assertTrue(sfe.getMessage().contains("Marshalling Error"));
> >>>            assertTrue(sfe.getMessage().contains("lastName"));
> >>>        }
> >>> @@ -119,40 +124,48 @@ public class JavaFirstSchemaValidationTest
> extends
> >> Assert {
> >>>
> >>>        try {
> >>>            annotatedClient.saveInheritEndpoint(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>>
> >>>        try {
> >>>            person.setFirstName(""); // empty string is valid
> >>>            annotatedClient.saveInheritEndpoint(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>>
> >>>        person.setLastName(""); // empty string is valid
> >>>        annotatedClient.saveInheritEndpoint(person);
> >>>    }
> >>> -
> >>> +
> >>>    @Test
> >>>    public void testSaveValidateInAnnotated() {
> >>>        Person person = new Person();
> >>>
> >>>        try {
> >>>            annotatedClient.saveValidateIn(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>>
> >>>        try {
> >>>            person.setFirstName(""); // empty string is valid
> >>>            annotatedClient.saveValidateIn(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>>
> >>>        person.setLastName(""); // empty string is valid
> >>> @@ -172,39 +185,100 @@ public class JavaFirstSchemaValidationTest
> >> extends Assert {
> >>>        annotatedClient.saveNoValidation(person);
> >>>    }
> >>>
> >>> -    // no validation is required for incoming
> >>>    @Test
> >>> -    public void testSaveValidationOutAnnotated() {
> >>> +    public void
> >> testSaveValidationOutAnnotatedWithClientValidationDisabled() {
> >>>        Person person = new Person();
> >>>
> >>> -        annotatedClient.saveValidateOut(person);
> >>> +        try {
> >>> +            annotatedClient.saveValidateOut(person);
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            // verify its server side and a schema validation
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>> +            // it's still a server side fault, because server side
> >> validation coming in failed
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>> +
> >>> +        person.setFirstName(""); // empty string is valid
> >>> +        try {
> >>> +            annotatedClient.saveValidateOut(person);
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            // verify its server side and a schema validation
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>> +            // it's still a server side fault, because server side
> >> validation coming in failed
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>>
> >>> +        person.setLastName(""); // empty string is valid
> >>> +        annotatedClient.saveValidateIn(person);
> >>> +    }
> >>> +
> >>> +    // this will still all be server side, as the OUT validation is
> >> turned into an IN validation for
> >>> +    // the client, but by then the server has already thrown the
> >> exception for the OUT
> >>> +    @Test
> >>> +    public void
> >> testSaveValidationOutAnnotatedWithClientValidationEnabled() {
> >>> +        Person person = new Person();
> >>> +
> >>> +        try {
> >>> +            annotatedValidatingClient.saveValidateIn(person);
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>
> assertFalse(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>> +
> >>>        person.setFirstName(""); // empty string is valid
> >>> -        annotatedClient.saveValidateOut(person);
> >>> +        try {
> >>> +            annotatedValidatingClient.saveValidateIn(person);
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>
> assertFalse(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>>
> >>>        person.setLastName(""); // empty string is valid
> >>> -        annotatedClient.saveValidateOut(person);
> >>> +        annotatedValidatingClient.saveValidateIn(person);
> >>> +    }
> >>> +
> >>> +    @Test
> >>> +    public void
> >> testSaveValidationInAnnotatedWithClientValidationEnabled() {
> >>> +        Person person = new Person();
> >>> +
> >>> +        try {
> >>> +            person.setFirstName("InvalidResponse");
> >>> +            person.setLastName("WhoCares");
> >>> +            annotatedValidatingClient.saveValidateOut(person);
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>
> assertFalse(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>>    }
> >>>
> >>> -    // so this is the default, we are inheriting from the service
> level
> >> SchemaValidation annotation
> >>> -    // which is set to BOTH
> >>>    @Test
> >>>    public void testEndpointSchemaValidationProvider() {
> >>>        Person person = new Person();
> >>>
> >>>        try {
> >>>            client.saveInheritEndpoint(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>> -
> >>> +
> >>>        try {
> >>>            person.setFirstName(""); // empty string is valid
> >>>            client.saveInheritEndpoint(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>>
> >>>        person.setLastName(""); // empty string is valid
> >>> @@ -217,24 +291,27 @@ public class JavaFirstSchemaValidationTest
> extends
> >> Assert {
> >>>
> >>>        try {
> >>>            client.saveValidateIn(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>>
> >>>        try {
> >>>            person.setFirstName(""); // empty string is valid
> >>>            client.saveValidateIn(person);
> >>> +            fail("Expected exception");
> >>>        } catch (SOAPFaultException sfe) {
> >>> -            // verify its server side and a schema validation
> >>> -            assertTrue(sfe.getMessage().contains("Unmarshalling
> >> Error"));
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Unmarshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>>        }
> >>>
> >>>        person.setLastName(""); // empty string is valid
> >>>        client.saveValidateIn(person);
> >>>    }
> >>>
> >>> -    // no validation at all is required
> >>>    @Test
> >>>    public void testSaveNoValidationProvider() {
> >>>        Person person = new Person();
> >>> @@ -247,42 +324,94 @@ public class JavaFirstSchemaValidationTest
> extends
> >> Assert {
> >>>        client.saveNoValidation(person);
> >>>    }
> >>>
> >>> -    // no validation is required for incoming
> >>>    @Test
> >>> -    public void testSaveValidationOutProvider() {
> >>> +    public void testSaveValidationOutProviderClientOnly() {
> >>>        Person person = new Person();
> >>>
> >>> -        client.saveValidateOut(person);
> >>> +        try {
> >>> +            disconnectedClient.saveValidateOut(person);
> >>> +            fail("Expected exception");
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            // verify its client side outgoing
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>
> assertFalse(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>> +
> >>> +        person.setFirstName(""); // empty string is valid
> >>> +        try {
> >>> +            disconnectedClient.saveValidateOut(person);
> >>> +            fail("Expected exception");
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            // verify its client side outgoing
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>
> assertFalse(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>> +
> >>> +        person.setLastName(""); // empty string is valid
> >>> +
> >>> +        // this confirms that we passed client validation as we then
> >> got the connectivity error
> >>> +        try {
> >>> +            disconnectedClient.saveValidateOut(person);
> >>> +            fail("Expected exception");
> >>> +        } catch (WebServiceException e) {
> >>> +            assertTrue(e.getMessage().contains("Could not send
> >> Message"));
> >>> +        }
> >>> +    }
> >>>
> >>> +
> >>> +    @Test
> >>> +    public void testSaveValidationOutProvider() {
> >>> +        Person person = new Person();
> >>> +
> >>> +        try {
> >>> +            client.saveValidateOut(person);
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            // verify its server side outgoing
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>> +
> >>>        person.setFirstName(""); // empty string is valid
> >>> -        client.saveValidateOut(person);
> >>> +        try {
> >>> +            client.saveValidateOut(person);
> >>> +        } catch (SOAPFaultException sfe) {
> >>> +            // verify its server side outgoing
> >>> +            String stackTrace = getStackTrace(sfe);
> >>> +            assertTrue(stackTrace.contains("Marshalling Error"));
> >>> +
> >>
> assertTrue(stackTrace.contains("org.apache.cxf.binding.soap.SoapFault"));
> >>> +        }
> >>>
> >>>        person.setLastName(""); // empty string is valid
> >>>        client.saveValidateOut(person);
> >>>    }
> >>>
> >>> -    private static <T> T createClient(Class<T> serviceClass) {
> >>> +    private static <T> T createClient(String port, Class<T>
> >> serviceClass, SchemaValidationType type) {
> >>>        JaxWsProxyFactoryBean clientFactory = new
> >> JaxWsProxyFactoryBean();
> >>>        clientFactory.setServiceClass(serviceClass);
> >>> -
> >>> -        // ensure all client schema validation is disabled
> >>> -        Map<String, Object> properties = new HashMap<String,
> Object>();
> >>> -        properties.put(Message.SCHEMA_VALIDATION_ENABLED,
> >> SchemaValidationType.NONE);
> >>> -        clientFactory.setProperties(properties);
> >>> -
> >>> -        clientFactory.setAddress(getAddress(serviceClass));
> >>> -
> >>> +
> >>> +
> >>> +        clientFactory.setAddress(getAddress(port, serviceClass));
> >>> +
> >>> +
> >>>        @SuppressWarnings("unchecked")
> >>>        T newClient = (T)clientFactory.create();
> >>>
> >>> -        Client clientProxy = ClientProxy.getClient(newClient);
> >>> -
> >>> -        // ensure all client schema validation is disabled
> >>> -        for (BindingOperationInfo bop :
> >> clientProxy.getEndpoint().getEndpointInfo().getBinding()
> >>> -            .getOperations()) {
> >>> -
> >> bop.getOperationInfo().setProperty(Message.SCHEMA_VALIDATION_ENABLED,
> >> SchemaValidationType.NONE);
> >>> +        Client proxy = ClientProxy.getClient(newClient);
> >>> +
> >>> +        if (type != null) {
> >>> +
> >> proxy.getRequestContext().put(Message.SCHEMA_VALIDATION_ENABLED, type);
> >>>        }
> >>> -
> >>> +
> >>> +        HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
> >>> +        // give me longer debug times
> >>> +        HTTPClientPolicy clientPolicy = new HTTPClientPolicy();
> >>> +        clientPolicy.setConnectionTimeout(1000000);
> >>> +        clientPolicy.setReceiveTimeout(1000000);
> >>> +        conduit.setClient(clientPolicy);
> >>> +
> >>>        return newClient;
> >>>    }
> >>>
> >>> @@ -293,10 +422,17 @@ public class JavaFirstSchemaValidationTest
> extends
> >> Assert {
> >>>        if (features != null) {
> >>>            svrFactory.getFeatures().addAll(Arrays.asList(features));
> >>>        }
> >>> -        svrFactory.setAddress(getAddress(serviceInterface));
> >>> +        svrFactory.setAddress(getAddress(PORT, serviceInterface));
> >>>        svrFactory.setServiceBean(serviceImpl);
> >>>        Server server = svrFactory.create();
> >>>        serverList.add(server);
> >>>        return server;
> >>>    }
> >>> +
> >>> +    private String getStackTrace(Exception e) {
> >>> +        StringWriter sWriter = new StringWriter();
> >>> +        PrintWriter writer = new PrintWriter(sWriter, true);
> >>> +        e.printStackTrace(writer);
> >>> +        return sWriter.toString();
> >>> +    }
> >>> }
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonService.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonService.java
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonService.java
> >>> index e3ee10c..d594e4e 100644
> >>> ---
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonService.java
> >>> +++
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonService.java
> >>> @@ -21,6 +21,7 @@ package
> org.apache.cxf.systest.jaxws.schemavalidation;
> >>>
> >>> import javax.jws.WebMethod;
> >>> import javax.jws.WebParam;
> >>> +import javax.jws.WebResult;
> >>> import javax.jws.WebService;
> >>>
> >>> import org.apache.cxf.annotations.SchemaValidation;
> >>> @@ -30,14 +31,18 @@ import
> >> org.apache.cxf.annotations.SchemaValidation.SchemaValidationType;
> >>> @SchemaValidation(type = SchemaValidationType.BOTH)
> >>> public interface PersonService {
> >>>    @WebMethod(operationName = "saveInheritEndpoint")
> >>> -    void saveInheritEndpoint(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveInheritEndpoint(@WebParam(name = "Person") Person
> data);
> >>>
> >>>    @WebMethod(operationName = "saveNoValidation")
> >>> -    void saveNoValidation(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveNoValidation(@WebParam(name = "Person") Person data);
> >>>
> >>>    @WebMethod(operationName = "saveValidateIn")
> >>> -    void saveValidateIn(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveValidateIn(@WebParam(name = "Person") Person data);
> >>>
> >>>    @WebMethod(operationName = "saveValidateOut")
> >>> -    void saveValidateOut(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveValidateOut(@WebParam(name = "Person") Person data);
> >>> }
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotated.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotated.java
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotated.java
> >>> index 3e06576..a760f27 100644
> >>> ---
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotated.java
> >>> +++
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotated.java
> >>> @@ -21,6 +21,7 @@ package
> org.apache.cxf.systest.jaxws.schemavalidation;
> >>>
> >>> import javax.jws.WebMethod;
> >>> import javax.jws.WebParam;
> >>> +import javax.jws.WebResult;
> >>> import javax.jws.WebService;
> >>>
> >>> import org.apache.cxf.annotations.SchemaValidation;
> >>> @@ -30,17 +31,21 @@ import
> >> org.apache.cxf.annotations.SchemaValidation.SchemaValidationType;
> >>> @SchemaValidation(type = SchemaValidationType.BOTH)
> >>> public interface PersonServiceAnnotated {
> >>>    @WebMethod(operationName = "saveInheritEndpoint")
> >>> -    void saveInheritEndpoint(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveInheritEndpoint(@WebParam(name = "Person") Person
> data);
> >>>
> >>>    @SchemaValidation(type = SchemaValidationType.NONE)
> >>>    @WebMethod(operationName = "saveNoValidation")
> >>> -    void saveNoValidation(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveNoValidation(@WebParam(name = "Person") Person data);
> >>>
> >>>    @SchemaValidation(type = SchemaValidationType.IN)
> >>>    @WebMethod(operationName = "saveValidateIn")
> >>> -    void saveValidateIn(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveValidateIn(@WebParam(name = "Person") Person data);
> >>>
> >>>    @SchemaValidation(type = SchemaValidationType.OUT)
> >>>    @WebMethod(operationName = "saveValidateOut")
> >>> -    void saveValidateOut(@WebParam(name = "Person") Person data);
> >>> +    @WebResult(name = "Person")
> >>> +    Person saveValidateOut(@WebParam(name = "Person") Person data);
> >>> }
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotatedImpl.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotatedImpl.java
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotatedImpl.java
> >>> index c7b8038..78973c9 100644
> >>> ---
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotatedImpl.java
> >>> +++
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceAnnotatedImpl.java
> >>> @@ -26,18 +26,25 @@ import javax.jws.WebService;
> >>>    targetNamespace = "
> >> http://org.apache.cxf/service/PersonServiceAnnotated";)
> >>> public class PersonServiceAnnotatedImpl implements
> >> PersonServiceAnnotated {
> >>>    @Override
> >>> -    public void saveNoValidation(Person data) {
> >>> +    public Person saveNoValidation(Person data) {
> >>> +        return data;
> >>>    }
> >>>
> >>>    @Override
> >>> -    public void saveInheritEndpoint(Person data) {
> >>> +    public Person saveInheritEndpoint(Person data) {
> >>> +        return data;
> >>>    }
> >>>
> >>>    @Override
> >>> -    public void saveValidateIn(Person data) {
> >>> +    public Person saveValidateIn(Person data) {
> >>> +        if ("InvalidResponse".equals(data.getFirstName())) {
> >>> +            return new Person();
> >>> +        }
> >>> +        return data;
> >>>    }
> >>>
> >>>    @Override
> >>> -    public void saveValidateOut(Person data) {
> >>> +    public Person saveValidateOut(Person data) {
> >>> +        return data;
> >>>    }
> >>> }
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceImpl.java
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceImpl.java
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceImpl.java
> >>> index fe1d656..9edec45 100644
> >>> ---
> >>
> a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceImpl.java
> >>> +++
> >>
> b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/schemavalidation/PersonServiceImpl.java
> >>> @@ -26,18 +26,22 @@ import javax.jws.WebService;
> >>>    targetNamespace = "http://org.apache.cxf/service/PersonService";)
> >>> public class PersonServiceImpl implements PersonService {
> >>>    @Override
> >>> -    public void saveNoValidation(Person data) {
> >>> +    public Person saveNoValidation(Person data) {
> >>> +        return data;
> >>>    }
> >>>
> >>>    @Override
> >>> -    public void saveInheritEndpoint(Person data) {
> >>> +    public Person saveInheritEndpoint(Person data) {
> >>> +        return data;
> >>>    }
> >>>
> >>>    @Override
> >>> -    public void saveValidateIn(Person data) {
> >>> +    public Person saveValidateIn(Person data) {
> >>> +        return data;
> >>>    }
> >>>
> >>>    @Override
> >>> -    public void saveValidateOut(Person data) {
> >>> +    public Person saveValidateOut(Person data) {
> >>> +        return data;
> >>>    }
> >>> }
> >>>
> >>>
> >>
> http://git-wip-us.apache.org/repos/asf/cxf/blob/27ce514b/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom_schema_validation/MTOMProviderSchemaValidationTest.bak
> >>> ----------------------------------------------------------------------
> >>> diff --git
> >>
> a/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom_schema_validation/MTOMProviderSchemaValidationTest.bak
> >>
> b/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom_schema_validation/MTOMProviderSchemaValidationTest.bak
> >>> deleted file mode 100644
> >>> index 18e66ae..0000000
> >>> ---
> >>
> a/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom_schema_validation/MTOMProviderSchemaValidationTest.bak
> >>> +++ /dev/null
> >>> @@ -1,69 +0,0 @@
> >>> -/**
> >>> - * Licensed to the Apache Software Foundation (ASF) under one
> >>> - * or more contributor license agreements. See the NOTICE file
> >>> - * distributed with this work for additional information
> >>> - * regarding copyright ownership. The ASF licenses this file
> >>> - * to you under the Apache License, Version 2.0 (the
> >>> - * "License"); you may not use this file except in compliance
> >>> - * with the License. You may obtain a copy of the License at
> >>> - *
> >>> - * http://www.apache.org/licenses/LICENSE-2.0
> >>> - *
> >>> - * Unless required by applicable law or agreed to in writing,
> >>> - * software distributed under the License is distributed on an
> >>> - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >>> - * KIND, either express or implied. See the License for the
> >>> - * specific language governing permissions and limitations
> >>> - * under the License.
> >>> - */
> >>> -package org.apache.cxf.systest.mtom_schema_validation;
> >>> -
> >>> -import java.io.File;
> >>> -import java.net.URL;
> >>> -
> >>> -import javax.activation.DataHandler;
> >>> -import javax.activation.FileDataSource;
> >>> -import javax.xml.namespace.QName;
> >>> -import javax.xml.ws.soap.MTOMFeature;
> >>> -
> >>> -import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
> >>> -
> >>> -import org.junit.BeforeClass;
> >>> -import org.junit.Test;
> >>> -
> >>> -public final class MTOMProviderSchemaValidationTest extends
> >> AbstractBusClientServerTestBase {
> >>> -    public static final String PORT = "9001";
> >>> -        //Server.PORT;
> >>> -
> >>> -    private final QName serviceName = new QName("
> http://cxf.apache.org/";,
> >> "HelloWS");
> >>> -
> >>> -    @BeforeClass
> >>> -    public static void startservers() throws Exception {
> >>> -        //assertTrue("server did not launch correctly",
> >> launchServer(Server.class, true));
> >>> -    }
> >>> -    @Test
> >>> -    public void testSchemaValidation() throws Exception {
> >>> -        HelloWS port = createService();
> >>> -        Hello request = new Hello();
> >>> -        request.setArg0("value");
> >>> -        URL wsdl =
> >> getClass().getResource("/wsdl_systest/mtom_provider_validate.wsdl");
> >>> -        File attachment = new File(wsdl.getFile());
> >>> -        request.setFile(new DataHandler(new
> >> FileDataSource(attachment)));
> >>> -        HelloResponse response = port.hello(request);
> >>> -        assertEquals("Hello CXF", response.getReturn());
> >>> -    }
> >>> -
> >>> -    private HelloWS createService() throws Exception {
> >>> -        URL wsdl =
> >> getClass().getResource("/wsdl_systest/mtom_provider_validate.wsdl");
> >>> -        assertNotNull(wsdl);
> >>> -
> >>> -        HelloWSClient service = new HelloWSClient(wsdl, serviceName);
> >>> -        assertNotNull(service);
> >>> -
> >>> -        HelloWS port = service.getHello(new MTOMFeature());
> >>> -
> >>> -        updateAddressPort(port, PORT);
> >>> -
> >>> -        return port;
> >>> -    }
> >>> -}
> >>>
> >>
> >> --
> >> Daniel Kulp
> >> dk...@apache.org - http://dankulp.com/blog
> >> Talend Community Coder - http://coders.talend.com
> >>
> >>
>
> --
> Daniel Kulp
> dk...@apache.org - http://dankulp.com/blog
> Talend Community Coder - http://coders.talend.com
>
>

Reply via email to