I will add the property anyway as it occurs to me this would be a problem for anyone who has defined a client specific sei and already reversed the directions.
Unless you want me to remove the client reverse direction code completely I will get the property and any test changes committed this weekend. On 29/11/2014 2:11 PM, "Jason Pell" <[email protected]> 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. This does > seem counter intuitive especially as IN might have been specified because > the response may be incomplete and so can't be validated. > > An IN for service is the OUT for client. > > The previous code was just plain wrong for client side - my code by the > way :-) > > This particular piece is only a few lines in ServiceUtils so I am happy to > remove it if you are still -1 > > 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" <[email protected]> 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, [email protected] 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 <[email protected]> >> > Authored: Thu Nov 27 16:54:01 2014 +1100 >> > Committer: Jason Pell <[email protected]> >> > 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 >> [email protected] - http://dankulp.com/blog >> Talend Community Coder - http://coders.talend.com >> >>
