src/share/jaxws_classes/com/sun/xml/internal/ws/db/DatabindingFactoryImpl.java

Thu, 31 Aug 2017 15:18:52 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:18:52 +0800
changeset 637
9c07ef4934dd
parent 384
8f2986ff0235
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    26 package com.sun.xml.internal.ws.db;
    28 import java.io.InputStream;
    29 import java.net.URL;
    30 import java.util.HashMap;
    31 import java.util.List;
    32 import java.util.Map;
    33 import java.util.Properties;
    35 import javax.xml.namespace.QName;
    36 import javax.xml.transform.Source;
    37 import javax.xml.ws.WebServiceException;
    38 import javax.xml.ws.WebServiceFeature;
    40 import org.xml.sax.EntityResolver;
    42 import com.oracle.webservices.internal.api.databinding.Databinding;
    43 import com.oracle.webservices.internal.api.databinding.Databinding.Builder;
    44 import com.oracle.webservices.internal.api.databinding.WSDLGenerator;
    45 import com.oracle.webservices.internal.api.databinding.DatabindingModeFeature;
    46 import com.sun.xml.internal.ws.api.BindingID;
    47 import com.sun.xml.internal.ws.api.WSBinding;
    48 import com.sun.xml.internal.ws.api.databinding.DatabindingConfig;
    49 import com.sun.xml.internal.ws.api.databinding.DatabindingFactory;
    50 import com.sun.xml.internal.ws.api.databinding.MetadataReader;
    51 import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort;
    52 import com.sun.xml.internal.ws.spi.db.DatabindingProvider;
    53 import com.sun.xml.internal.ws.util.ServiceFinder;
    55 /**
    56  * DatabindingFactoryImpl
    57  *
    58  * @author shih-chang.chen@oracle.com
    59  */
    60 public class DatabindingFactoryImpl extends DatabindingFactory {
    62         static final String WsRuntimeFactoryDefaultImpl = "com.sun.xml.internal.ws.db.DatabindingProviderImpl";
    64         protected Map<String, Object> properties = new HashMap<String, Object>();
    65         protected DatabindingProvider defaultRuntimeFactory;
    66         protected List<DatabindingProvider> providers;
    68     static private List<DatabindingProvider> providers() {
    69         List<DatabindingProvider> factories = new java.util.ArrayList<DatabindingProvider>();
    70         for (DatabindingProvider p : ServiceFinder.find(DatabindingProvider.class)) {
    71             factories.add(p);
    72         }
    73         return factories;
    74     }
    76         public DatabindingFactoryImpl() {
    77         }
    79         public Map<String, Object> properties() {
    80                 return properties;
    81         }
    83         <T> T property(Class<T> propType, String propName) {
    84                 if (propName == null) propName = propType.getName();
    85                 return propType.cast(properties.get(propName));
    86         }
    88     public DatabindingProvider provider(DatabindingConfig config) {
    89         String mode = databindingMode(config);
    90         if (providers == null)
    91             providers = providers();
    92         DatabindingProvider provider = null;
    93         if (providers != null) {
    94             for (DatabindingProvider p : providers)
    95                 if (p.isFor(mode))
    96                     provider = p;
    97         } if (provider == null) {
    98             provider = new DatabindingProviderImpl();
    99         }
   100         return provider;
   101     }
   103         public Databinding createRuntime(DatabindingConfig config) {
   104             DatabindingProvider provider = provider(config);
   105                 return provider.create(config);
   106         }
   108     public WSDLGenerator createWsdlGen(DatabindingConfig config) {
   109         DatabindingProvider provider = provider(config);
   110         return provider.wsdlGen(config);
   111     }
   113         String databindingMode(DatabindingConfig config) {
   114                 if ( config.getMappingInfo() != null &&
   115                      config.getMappingInfo().getDatabindingMode() != null)
   116                         return config.getMappingInfo().getDatabindingMode();
   117         if ( config.getFeatures() != null) for (WebServiceFeature f : config.getFeatures()) {
   118             if (f instanceof DatabindingModeFeature) {
   119                 DatabindingModeFeature dmf = (DatabindingModeFeature) f;
   120                 config.properties().putAll(dmf.getProperties());
   121                 return dmf.getMode();
   122             }
   123         }
   124                 return null;
   125         }
   127         ClassLoader classLoader() {
   128                 ClassLoader classLoader = property(ClassLoader.class, null);
   129                 if (classLoader == null) classLoader = Thread.currentThread().getContextClassLoader();
   130                 return classLoader;
   131         }
   133         Properties loadPropertiesFile(String fileName) {
   134                 ClassLoader classLoader = classLoader();
   135                 Properties p = new Properties();
   136                 try {
   137                         InputStream is = null;
   138                         if (classLoader == null) {
   139                                 is = ClassLoader.getSystemResourceAsStream(fileName);
   140                         } else {
   141                                 is = classLoader.getResourceAsStream(fileName);
   142                         }
   143                         if (is != null) {
   144                                 p.load(is);
   145                         }
   146                 } catch (Exception e) {
   147                         throw new WebServiceException(e);
   148                 }
   149                 return p;
   150         }
   152     public Builder createBuilder(Class<?> contractClass, Class<?> endpointClass) {
   153         return new ConfigBuilder(this, contractClass, endpointClass);
   154     }
   156     static class ConfigBuilder implements Builder {
   157         DatabindingConfig config;
   158         DatabindingFactoryImpl factory;
   160         ConfigBuilder(DatabindingFactoryImpl f, Class<?> contractClass, Class<?> implBeanClass) {
   161             factory = f;
   162             config = new DatabindingConfig();
   163             config.setContractClass(contractClass);
   164             config.setEndpointClass(implBeanClass);
   165         }
   166         public Builder targetNamespace(String targetNamespace) {
   167             config.getMappingInfo().setTargetNamespace(targetNamespace);
   168             return this;
   169         }
   170         public Builder serviceName(QName serviceName) {
   171             config.getMappingInfo().setServiceName(serviceName);
   172             return this;
   173         }
   174         public Builder portName(QName portName) {
   175             config.getMappingInfo().setPortName(portName);
   176             return this;
   177         }
   178         public Builder wsdlURL(URL wsdlURL) {
   179             config.setWsdlURL(wsdlURL);
   180             return this;
   181         }
   182         public Builder wsdlSource(Source wsdlSource) {
   183             config.setWsdlSource(wsdlSource);
   184             return this;
   185         }
   186         public Builder entityResolver(EntityResolver entityResolver) {
   187             config.setEntityResolver(entityResolver);
   188             return this;
   189         }
   190         public Builder classLoader(ClassLoader classLoader) {
   191             config.setClassLoader(classLoader);
   192             return this;
   193         }
   194         public Builder feature(WebServiceFeature... f) {
   195             config.setFeatures(f);
   196             return this;
   197         }
   198         public Builder property(String name, Object value) {
   199             config.properties().put(name, value);
   200             if (isfor(BindingID.class, name, value)) {
   201                 config.getMappingInfo().setBindingID((BindingID)value);
   202             }
   203             if (isfor(WSBinding.class, name, value)) {
   204                 config.setWSBinding((WSBinding)value);
   205             }
   206             if (isfor(WSDLPort.class, name, value)) {
   207                 config.setWsdlPort((WSDLPort)value);
   208             }
   209             if (isfor(MetadataReader.class, name, value)) {
   210                 config.setMetadataReader((MetadataReader)value);
   211             }
   212             return this;
   213         }
   214         boolean isfor(Class<?> type, String name, Object value) {
   215             return type.getName().equals(name) && type.isInstance(value);
   216         }
   218         public com.oracle.webservices.internal.api.databinding.Databinding build() {
   219             return factory.createRuntime(config);
   220         }
   221         public com.oracle.webservices.internal.api.databinding.WSDLGenerator createWSDLGenerator() {
   222             return factory.createWsdlGen(config);
   223         }
   224     }
   225 }

mercurial