Package org.apache.juddi.v3.tck

Source Code of org.apache.juddi.v3.tck.UDDI_170_ValueSetValidation

/*
* Copyright 2013 The Apache Software Foundation.
*
* Licensed 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.juddi.v3.tck;

import java.net.InetAddress;
import java.rmi.RemoteException;
import java.util.Random;
import java.util.UUID;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Endpoint;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.v3.client.UDDIConstants;
import org.apache.juddi.v3.client.config.UDDIClient;
import org.apache.juddi.v3.client.transport.Transport;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import org.uddi.api_v3.AccessPoint;
import org.uddi.api_v3.BindingTemplate;
import org.uddi.api_v3.BindingTemplates;
import org.uddi.api_v3.BusinessDetail;
import org.uddi.api_v3.BusinessEntity;
import org.uddi.api_v3.BusinessService;
import org.uddi.api_v3.BusinessServices;
import org.uddi.api_v3.CategoryBag;
import org.uddi.api_v3.DeleteBusiness;
import org.uddi.api_v3.DeleteTModel;
import org.uddi.api_v3.Description;
import org.uddi.api_v3.DispositionReport;
import org.uddi.api_v3.ErrInfo;
import org.uddi.api_v3.KeyType;
import org.uddi.api_v3.KeyedReference;
import org.uddi.api_v3.Name;
import org.uddi.api_v3.Result;
import org.uddi.api_v3.SaveBusiness;
import org.uddi.api_v3.SaveTModel;
import org.uddi.api_v3.TModel;
import org.uddi.v3_service.DispositionReportFaultMessage;
import org.uddi.v3_service.UDDIInquiryPortType;
import org.uddi.v3_service.UDDIPublicationPortType;
import org.uddi.v3_service.UDDISecurityPortType;
import org.uddi.v3_service.UDDIValueSetValidationPortType;
import org.uddi.vs_v3.ValidateValues;

/**
*
* @author Alex O'Ree
*/
@WebService(name = "UDDI_ValueSetValidation_PortType", targetNamespace = "urn:uddi-org:v3_service")
public class UDDI_170_ValueSetValidation implements UDDIValueSetValidationPortType {
       
        private static UDDIInquiryPortType inquiry = null;
        private static UDDIPublicationPortType publication = null;
        static UDDISecurityPortType security = null;
        //static UDDIV vsvc = null;
        private static Log logger = LogFactory.getLog(UDDI_170_ValueSetValidation.class);
        private static String authInfoJoe = null;
        private static UDDIClient manager;
        private static boolean VALID = true;

        @BeforeClass
        public static void startRegistry() throws ConfigurationException {
               
                manager = new UDDIClient();
                manager.start();
               
                try {
                        Transport transport = manager.getTransport();
                        inquiry = transport.getUDDIInquiryService();
                        publication = transport.getUDDIPublishService();
                        security = transport.getUDDISecurityService();
                        authInfoJoe = TckSecurity.getAuthToken(security, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword());
                        if (!TckPublisher.isUDDIAuthMode()) {
                                TckSecurity.setCredentials((BindingProvider) inquiry, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword());
                                TckSecurity.setCredentials((BindingProvider) publication, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword());
                        }
                       
                } catch (Exception e) {
                        logger.error(e.getMessage(), e);
                        Assert.fail("Could not obtain authInfo token.");
                }
        }
       
        @AfterClass
        public static void stopRegistry() throws ConfigurationException {
                manager.stop();
        }
        final static String VSV_KEY = "uddi:juddi.apache.org:businesses-asf";
        //final static String VSV_BT_KEY = "uddi:juddi.apache.org:servicebindings-valueset-cp";
        final static String TMODEL = "validated.checked.tmodel";

        /**
         * this will confirm that the uddi registry will call out to me during a
         * vsv validation
         *
         * @throws Exception
         */
        @Test
        public void testVSV() throws Exception {
                Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
                System.out.println("testVSV");
                BusinessEntity SaveBusiness = null;
                BusinessEntity SaveVSVCallbackService = null;
                try {
                        Reset();
                        VALID = true;
                        SaveVSVCallbackService = SaveVSVCallbackService();
                        SaveCheckedTModel(TckTModel.JOE_PUBLISHER_KEY_PREFIX + TMODEL, SaveVSVCallbackService.getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0).getBindingKey());
                        logger.info("Saving a business using those values");
                        SaveBusiness = SaveBusiness(authInfoJoe, true, TckTModel.JOE_PUBLISHER_KEY_PREFIX + TMODEL);
                       
                       
                } catch (Exception ex) {
                        logger.error(ex);
                        Assert.fail("unexpected failure " + ex.getMessage());
                } finally {
                        if (SaveBusiness != null) {
                                DeleteBusiness(authInfoJoe, SaveBusiness.getBusinessKey());
                        }
                        if (SaveVSVCallbackService != null) {
                                DeleteBusiness(authInfoJoe, SaveVSVCallbackService.getBusinessKey());
                        }
                        DeleteCheckedTModel(TckTModel.JOE_PUBLISHER_KEY_PREFIX + TMODEL);
                }
                Assert.assertTrue(messagesReceived == 1);
        }
       
        @Test
        public void testVSVInvalid() throws Exception {
                Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
                System.out.println("testVSVInvalid");
                BusinessEntity SaveBusiness = null;
                BusinessEntity SaveVSVCallbackService = null;
                try {
                        Reset();
                        VALID = false;
                        SaveVSVCallbackService = SaveVSVCallbackService();
                        SaveCheckedTModel(TckTModel.JOE_PUBLISHER_KEY_PREFIX + TMODEL, SaveVSVCallbackService.getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0).getBindingKey());
                        logger.info("Saving a business using those values");
                        SaveBusiness = SaveBusiness(authInfoJoe, false, TckTModel.JOE_PUBLISHER_KEY_PREFIX + TMODEL);
                        Assert.assertTrue(messagesReceived == 1);
                        Assert.fail("unexpected success");
                } catch (Exception ex) {
                        logger.info("Expected failure " + ex.getMessage());
                } finally {
                        if (SaveBusiness != null) {
                                DeleteBusiness(authInfoJoe, SaveBusiness.getBusinessKey());
                        }
                        if (SaveVSVCallbackService != null) {
                                DeleteBusiness(authInfoJoe, SaveVSVCallbackService.getBusinessKey());
                        }
                        DeleteCheckedTModel(TckTModel.JOE_PUBLISHER_KEY_PREFIX + TMODEL);
                }
        }
       
        private BusinessEntity SaveBusiness(String authInfoJoe, boolean isValid, String key) throws Exception {
                SaveBusiness sb = new SaveBusiness();
                sb.setAuthInfo(authInfoJoe);
                BusinessEntity be = new BusinessEntity();
                be.getName().add(new Name("VSV", null));
                be.setCategoryBag(new CategoryBag());
                if (isValid) {
                        be.getCategoryBag().getKeyedReference().add(new KeyedReference(key, "name", "abcdefg"));
                } else {
                        be.getCategoryBag().getKeyedReference().add(new KeyedReference(key, "name", "qwerty"));
                }
                sb.getBusinessEntity().add(be);
                BusinessDetail saveBusiness = publication.saveBusiness(sb);
                return saveBusiness.getBusinessEntity().get(0);
        }
       
        private void SaveCheckedTModel(String key, String binding) throws Exception {
                TModel tm = new TModel();
                tm.setTModelKey(key);
                tm.setCategoryBag(new CategoryBag());
                tm.setName(new Name("My Custom validated key", "en"));
                tm.getDescription().add(new Description("valid values include 'one', 'two', 'three'", "en"));
                tm.getCategoryBag().getKeyedReference().add(
                        new KeyedReference(UDDIConstants.IS_VALIDATED_BY, UDDIConstants.IS_VALIDATED_BY_KEY_NAME, binding));
                SaveTModel stm = new SaveTModel();
                stm.setAuthInfo(authInfoJoe);
                stm.getTModel().add(tm);
                publication.saveTModel(stm);
        }
       
        @Override
        @WebMethod(operationName = "validate_values", action = "validate_values")
        @WebResult(name = "dispositionReport", targetNamespace = "urn:uddi-org:api_v3", partName = "body")
        @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
        public DispositionReport validateValues(
                @WebParam(name = "validate_values", targetNamespace = "urn:uddi-org:vs_v3", partName = "body") ValidateValues body)
                throws DispositionReportFaultMessage, RemoteException {
                messagesReceived++;
                if (VALID) {
                        DispositionReport dispositionReport = new DispositionReport();
                        dispositionReport.getResult().add(new Result());
                        return dispositionReport;
                }
                DispositionReport dispositionReport = new DispositionReport();
                Result r = new Result();
                r.setKeyType(KeyType.T_MODEL_KEY);
                r.setErrno(20200);
                r.setErrInfo(new ErrInfo());
                r.getErrInfo().setErrCode("E_invalidValue");
                r.getErrInfo().setValue("E_invalidValue");
               
                dispositionReport.getResult().add(r);
                throw new DispositionReportFaultMessage("error", dispositionReport);
        }
       
        private BusinessEntity SaveVSVCallbackService() throws Exception {
                SaveBusiness sb = new SaveBusiness();
                sb.setAuthInfo(authInfoJoe);
                BusinessEntity be = new BusinessEntity();
                be.getName().add(new Name("VSV business", null));
                be.setBusinessServices(new BusinessServices());
                BusinessService bs = new BusinessService();
                bs.getName().add(new Name("VSV callout", null));
                bs.setBindingTemplates(new BindingTemplates());
                BindingTemplate bt = new BindingTemplate();
                bt.setAccessPoint(new AccessPoint(url, "endPoint"));
                bs.getBindingTemplates().getBindingTemplate().add(bt);
                be.getBusinessServices().getBusinessService().add(bs);
                sb.getBusinessEntity().add(be);
               
                return publication.saveBusiness(sb).getBusinessEntity().get(0);
        }
       
        private void DeleteCheckedTModel(String string) throws Exception {
                DeleteTModel db = new DeleteTModel();
                db.setAuthInfo(authInfoJoe);
                db.getTModelKey().add(string);
                publication.deleteTModel(db);
        }
       
        private void DeleteBusiness(String authInfoJoe, String string) throws Exception {
                DeleteBusiness db = new DeleteBusiness();
                db.setAuthInfo(authInfoJoe);
                db.getBusinessKey().add(string);
                publication.deleteBusiness(db);
        }
        Endpoint ep = null;
        String url = null;
        int messagesReceived = 0;
       
        private void Reset() throws Exception {
                messagesReceived = 0;
                if (ep == null || !ep.isPublished()) {
                        int httpPort = 9600 + new Random().nextInt(99);
                        String hostname = TckPublisher.getProperties().getProperty("bindaddress");
                        if (hostname == null) {
                                hostname = InetAddress.getLocalHost().getHostName();
                        }
                        url = "http://" + hostname + ":" + httpPort + "/" + UUID.randomUUID().toString();
                        logger.info("Firing up embedded endpoint at " + url);
                        do {
                                try {
                                       
                                        ep = Endpoint.publish(url, this);
                                        httpPort = 9600 + new Random().nextInt(99);
                                } catch (Exception ex) {
                                        logger.warn(ex.getMessage());
                                }
                        } while (ep != null && !ep.isPublished());
                       
                }
               
        }

        /**
         * value set caching service TODO
         */
        //@Test
        public void testVSCUnknownItem() {
                /*
                 *  
                 * E_invalidKeyPassed: Signifies that the tModelKey passed did not match with
                 * the uddiKey of any known tModels.  The details on the invalid key SHOULD be
                 * included in the dispositionReport element.
                 *
                 * E_noValuesAvailable: Signifies that no values could be returned.
                 */
                //Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
        }
        //TODO ·         E_invalidValue: Signifies that the chunkToken value supplied is either invalid or has expired.
        //TODO maybe? ·         E_unsupported: Signifies that the Web service does not support this API.
        //this may be untestable unless the endpoint exists but isn't implemented
}
TOP

Related Classes of org.apache.juddi.v3.tck.UDDI_170_ValueSetValidation

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.