Package org.apache.cxf.systest.jaxws.schemavalidation

Source Code of org.apache.cxf.systest.jaxws.schemavalidation.JavaFirstSchemaValidationTest

/**
* 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.jaxws.schemavalidation;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.ws.soap.SOAPFaultException;

import org.apache.cxf.annotations.SchemaValidation.SchemaValidationType;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.feature.Feature;
import org.apache.cxf.feature.LoggingFeature;
import org.apache.cxf.feature.validation.DefaultSchemaValidationTypeProvider;
import org.apache.cxf.feature.validation.SchemaValidationFeature;
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.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);

    private static List<Server> serverList = new ArrayList<Server>();
    private static PersonServiceAnnotated annotatedClient;
    private static PersonService client;
    private static PersonServiceRPC rpcClient;

    @BeforeClass
    public static void startServers() throws Exception {
        Map<String, SchemaValidationType> operationMap = new HashMap<String, SchemaValidationType>();
        operationMap.put("saveInheritEndpoint", SchemaValidationType.BOTH);
        operationMap.put("saveNoValidation", SchemaValidationType.NONE);
        operationMap.put("saveValidateIn", SchemaValidationType.IN);
        operationMap.put("saveValidateOut", SchemaValidationType.OUT);
        DefaultSchemaValidationTypeProvider provider = new DefaultSchemaValidationTypeProvider(operationMap);

        SchemaValidationFeature feature = new SchemaValidationFeature(provider);

        createServer(PersonService.class, new PersonServiceImpl(), feature);

        createServer(PersonServiceAnnotated.class, new PersonServiceAnnotatedImpl());

        createServer(PersonServiceRPC.class, new PersonServiceRPCImpl(), feature, new LoggingFeature());

        annotatedClient = createClient(PersonServiceAnnotated.class);
        client = createClient(PersonService.class);
        rpcClient = createClient(PersonServiceRPC.class);
    }

    @AfterClass
    public static void cleanup() throws Exception {
        for (Server server : serverList) {
            server.stop();
        }
    }

    static String getAddress(Class<?> sei) {
        return "http://localhost:" + PORT + "/" + sei.getSimpleName();
    }
   

    @Test
    public void testRPCLit() throws Exception {
        Person person = new Person();
        person.setFirstName("Foo");
        person.setLastName("Bar");
        //this should work
        rpcClient.saveValidateOut(person);
       
        try {
            person.setFirstName(null);
            rpcClient.saveValidateOut(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Marshalling Error"));
            assertTrue(sfe.getMessage().contains("lastName"));
        }           
    }

   
    // so this is the default, we are inheriting from the service level SchemaValidation annotation
    // which is set to BOTH
    @Test
    public void testEndpointSchemaValidationAnnotated() {
        Person person = new Person();

        try {
            annotatedClient.saveInheritEndpoint(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        try {
            person.setFirstName(""); // empty string is valid
            annotatedClient.saveInheritEndpoint(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        person.setLastName(""); // empty string is valid
        annotatedClient.saveInheritEndpoint(person);
    }

    @Test
    public void testSaveValidateInAnnotated() {
        Person person = new Person();

        try {
            annotatedClient.saveValidateIn(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        try {
            person.setFirstName(""); // empty string is valid
            annotatedClient.saveValidateIn(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        person.setLastName(""); // empty string is valid
        annotatedClient.saveValidateIn(person);
    }

    // no validation at all is required
    @Test
    public void testSaveNoValidationAnnotated() {
        Person person = new Person();
        annotatedClient.saveNoValidation(person);

        person.setFirstName(""); // empty string is valid
        annotatedClient.saveNoValidation(person);

        person.setLastName(""); // empty string is valid
        annotatedClient.saveNoValidation(person);
    }

    // no validation is required for incoming
    @Test
    public void testSaveValidationOutAnnotated() {
        Person person = new Person();

        annotatedClient.saveValidateOut(person);

        person.setFirstName(""); // empty string is valid
        annotatedClient.saveValidateOut(person);

        person.setLastName(""); // empty string is valid
        annotatedClient.saveValidateOut(person);
    }

    // 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);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        try {
            person.setFirstName(""); // empty string is valid
            client.saveInheritEndpoint(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        person.setLastName(""); // empty string is valid
        client.saveInheritEndpoint(person);
    }

    @Test
    public void testSaveValidateInProvider() {
        Person person = new Person();

        try {
            client.saveValidateIn(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        try {
            person.setFirstName(""); // empty string is valid
            client.saveValidateIn(person);
        } catch (SOAPFaultException sfe) {
            // verify its server side and a schema validation
            assertTrue(sfe.getMessage().contains("Unmarshalling Error"));
        }

        person.setLastName(""); // empty string is valid
        client.saveValidateIn(person);
    }

    // no validation at all is required
    @Test
    public void testSaveNoValidationProvider() {
        Person person = new Person();
        client.saveNoValidation(person);

        person.setFirstName(""); // empty string is valid
        client.saveNoValidation(person);

        person.setLastName(""); // empty string is valid
        client.saveNoValidation(person);
    }

    // no validation is required for incoming
    @Test
    public void testSaveValidationOutProvider() {
        Person person = new Person();

        client.saveValidateOut(person);

        person.setFirstName(""); // empty string is valid
        client.saveValidateOut(person);

        person.setLastName(""); // empty string is valid
        client.saveValidateOut(person);
    }

    private static <T> T createClient(Class<T> serviceClass) {
        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));

        @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);
        }

        return newClient;
    }

    public static Server createServer(Class<?> serviceInterface, Object serviceImpl, Feature ... features)
        throws IOException {
        JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
        svrFactory.setServiceClass(serviceImpl.getClass());
        if (features != null) {
            svrFactory.getFeatures().addAll(Arrays.asList(features));
        }
        svrFactory.setAddress(getAddress(serviceInterface));
        svrFactory.setServiceBean(serviceImpl);
        Server server = svrFactory.create();
        serverList.add(server);
        return server;
    }
}
TOP

Related Classes of org.apache.cxf.systest.jaxws.schemavalidation.JavaFirstSchemaValidationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.