You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2006/10/16 14:54:29 UTC

svn commit: r464472 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/binding/ api/src/main/java/org/apache/cxf/service/model/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/ rt/bindings/soap/src/main/resources/META-INF/ rt/bindin...

Author: ningjiang
Date: Mon Oct 16 05:54:27 2006
New Revision: 464472

URL: http://svn.apache.org/viewvc?view=rev&rev=464472
Log:
[JIRA CXF-18] PhaseTow: Implemented BindingInfoFactoryBeanManager to load the BingInfoFactoryBean just like BingFactoryManager. 
Moved AbstractBindingInfoFactoryBean.java form frontend/simple to api 
Moved SoapBindingInfoFactoryBean.java form frontend/simple to SoapBinding
Added XMLBindingInfoFactoryBean.java for creating XMLBinding in codefirst mode.

Added:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManager.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractBindingInfoFactoryBean.java   (contents, props changed)
      - copied, changed from r464370, incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/AbstractBindingInfoFactoryBean.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java   (contents, props changed)
      - copied, changed from r464370, incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/SoapBindingInfoFactoryBean.java
    incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingInfoFactoryBean.java   (with props)
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManagerImpl.java
Removed:
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/AbstractBindingInfoFactoryBean.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/SoapBindingInfoFactoryBean.java
Modified:
    incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/bus-extensions.xml
    incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension.xml
    incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/bus-extensions.xml
    incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension.xml
    incubator/cxf/trunk/rt/core/src/main/resources/META-INF/bus-extensions.xml
    incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ServerFactoryBean.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerXMLWrapTest.java

Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManager.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManager.java?view=auto&rev=464472
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManager.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManager.java Mon Oct 16 05:54:27 2006
@@ -0,0 +1,58 @@
+/**
+ * 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.binding;
+
+import org.apache.cxf.BusException;
+import org.apache.cxf.service.model.AbstractBindingInfoFactoryBean;
+
+/**
+ * The manager interface represents a repository for accessing 
+ * <code>BindingInfoFactoryBean</code>s.
+ *
+ * Provides methods necessary for registering, deregistering or retrieving of
+ * BindingFactoryBean.
+ */
+public interface BindingInfoFactoryBeanManager {
+
+    /**
+     * Registers a BindingInfoFactoryBean using the provided name.
+     *
+     * @param name The BindingURI of the AbstractBindingInfoFactoryBean.
+     * @param bindInfoFactoryBean The instance of the class that implements the
+     * BindingFactory interface.
+     */
+    void registerBindingInfoFactoryBean(String name, AbstractBindingInfoFactoryBean bindInfoFactoryBean);
+    
+    /**
+     * Deregisters the BindingInfoFactoryBean with the provided name.
+     *
+     * @param name The name of the BindingInfoFactoryBean.
+     */
+    void unregisterBindingInfoFactoryBean(String name);
+
+    /**
+     * Retrieves the BindingInfoFactoryBean registered with the given name.
+     *
+     * @param name The name of the BindingInfoFactoryBean.
+     * @return BindingInfoFactoryBean The registered BindingFactory.
+     * @throws BusException If there is an error retrieving the BindingInfoFactoryBean.
+     */
+    AbstractBindingInfoFactoryBean getBindingInfoFactoryBean(String name) throws BusException;
+}

Copied: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractBindingInfoFactoryBean.java (from r464370, incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/AbstractBindingInfoFactoryBean.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractBindingInfoFactoryBean.java?view=diff&rev=464472&p1=incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/AbstractBindingInfoFactoryBean.java&r1=464370&p2=incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractBindingInfoFactoryBean.java&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/AbstractBindingInfoFactoryBean.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractBindingInfoFactoryBean.java Mon Oct 16 05:54:27 2006
@@ -16,37 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.service.factory;
+package org.apache.cxf.service.model;
 
-import org.apache.cxf.service.model.BindingInfo;
-import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.cxf.service.Service;
 
 /**
  * An AbstractBindingFactory builds a binding for a Service.
  */
 public abstract class AbstractBindingInfoFactoryBean {
-    private AbstractServiceFactoryBean serviceFactory;
-    private ServiceInfo serviceInfo;
+    //private AbstractServiceFactoryBean serviceFactory;
+    private Service service;
     
     public abstract BindingInfo create();
-
-    public void setServiceFactory(AbstractServiceFactoryBean serviceFactory) {
-        this.serviceFactory = serviceFactory;
-    }
-
-    public AbstractServiceFactoryBean getServiceFactory() {
-        return serviceFactory;
-    }
     
-    public void setServiceInfo(ServiceInfo si) {
-        this.serviceInfo = si;
+    public abstract String getTransportURI();
+       
+    public void setService(Service si) {
+        this.service = si;
     }
 
-    protected ServiceInfo getServiceInfo() {
-        if (null != serviceInfo) {
-            return serviceInfo;
-        } else {
-            return getServiceFactory().getService().getServiceInfo();
-        }    
+    protected ServiceInfo getServiceInfo() {        
+        return service.getServiceInfo();        
     }
 }

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractBindingInfoFactoryBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractBindingInfoFactoryBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java (from r464370, incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/SoapBindingInfoFactoryBean.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java?view=diff&rev=464472&p1=incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/SoapBindingInfoFactoryBean.java&r1=464370&p2=incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/SoapBindingInfoFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java Mon Oct 16 05:54:27 2006
@@ -16,14 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.service.factory;
+package org.apache.cxf.binding.soap;
 
+import java.util.Collection;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
 import javax.xml.namespace.QName;
 
-import org.apache.cxf.binding.soap.Soap11;
-import org.apache.cxf.binding.soap.SoapVersion;
+import org.apache.cxf.Bus;
+import org.apache.cxf.binding.BindingInfoFactoryBeanManager;
 import org.apache.cxf.binding.soap.model.SoapBindingInfo;
 import org.apache.cxf.binding.soap.model.SoapOperationInfo;
+import org.apache.cxf.service.model.AbstractBindingInfoFactoryBean;
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.OperationInfo;
@@ -33,6 +38,31 @@
     private SoapVersion soapVersion = Soap11.getInstance();
     private String style = "document";
     private String use;
+    private Bus bus;
+    private Collection<String> activationNamespaces;    
+    
+    @Resource
+    public void setBus(Bus b) {
+        bus = b;
+    }
+    
+    @Resource
+    public void setActivationNamespaces(Collection<String> ans) {
+        activationNamespaces = ans;
+    }
+    
+    @PostConstruct
+    void register() {
+        if (null == bus) {
+            return;
+        }        
+        BindingInfoFactoryBeanManager bfm = bus.getExtension(BindingInfoFactoryBeanManager.class);
+        if (null != bfm) {
+            for (String ns : activationNamespaces) {
+                bfm.registerBindingInfoFactoryBean(ns, this);
+            }
+        }
+    }
     
     @Override
     public BindingInfo create() {
@@ -63,7 +93,7 @@
         return "";
     }
 
-    protected String getTransportURI() {
+    public String getTransportURI() {
         return "http://schemas.xmlsoap.org/wsdl/soap/http";
     }
 

Propchange: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/bus-extensions.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/bus-extensions.xml?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/bus-extensions.xml (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/bus-extensions.xml Mon Oct 16 05:54:27 2006
@@ -20,11 +20,21 @@
 <extensions xmlns="http://cxf.apache.org/bus/extension">
 
     <extension class="org.apache.cxf.binding.soap.SoapBindingFactory" deferred="true">
+        <namespace>http://schemas.xmlsoap.org/soap/</namespace>
         <namespace>http://schemas.xmlsoap.org/wsdl/soap/</namespace>
         <namespace>http://schemas.xmlsoap.org/wsdl/soap/http</namespace>
         <namespace>http://cxf.apache.org/transports/jms</namespace>
         <namespace>http://www.w3.org/2003/05/soap/bindings/HTTP/</namespace>
         <namespace>http://schemas.xmlsoap.org/wsdl/soap12/</namespace>
+    </extension>
+    
+     <extension class="org.apache.cxf.binding.soap.SoapBindingInfoFactoryBean" deferred="true">
+        <namespace>http://schemas.xmlsoap.org/soap/</namespace>
+        <namespace>http://schemas.xmlsoap.org/wsdl/soap/</namespace>      
+        <namespace>http://schemas.xmlsoap.org/wsdl/soap/http</namespace>
+        <namespace>http://cxf.apache.org/transports/jms</namespace>
+        <namespace>http://www.w3.org/2003/05/soap/bindings/HTTP/</namespace>
+        <namespace>http://schemas.xmlsoap.org/wsdl/soap12/</namespace>        
     </extension>
     
     <extension class="org.apache.cxf.binding.soap.SoapDestinationFactory" 

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension.xml?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension.xml (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension.xml Mon Oct 16 05:54:27 2006
@@ -41,6 +41,19 @@
         </property>
     </bean>
     
+    <bean class="org.apache.cxf.binding.soap.SoapBindingInfoFactoryBean" lazy-init="true">
+    	<property name="bus">
+            <ref bean="cxf"/>
+        </property>
+        <property name="activationNamespaces">
+            <set> 
+                <value>http://schemas.xmlsoap.org/soap/</value>              
+                <value>http://schemas.xmlsoap.org/wsdl/soap/</value>
+                <value>http://schemas.xmlsoap.org/wsdl/soap/http</value>               
+            </set>
+        </property>
+    </bean>
+    
     <bean class="org.apache.cxf.binding.soap.SoapDestinationFactory" lazy-init="true">
         <property name="bus">
             <ref bean="cxf"/>

Added: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingInfoFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingInfoFactoryBean.java?view=auto&rev=464472
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingInfoFactoryBean.java (added)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingInfoFactoryBean.java Mon Oct 16 05:54:27 2006
@@ -0,0 +1,87 @@
+/**
+ * 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.binding.xml;
+
+import java.util.Collection;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.binding.BindingInfoFactoryBeanManager;
+import org.apache.cxf.service.model.AbstractBindingInfoFactoryBean;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.OperationInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+
+public class XMLBindingInfoFactoryBean extends AbstractBindingInfoFactoryBean {
+    private Bus bus;
+    private Collection<String> activationNamespaces; 
+    
+    @Resource
+    public void setBus(Bus b) {
+        bus = b;
+    }
+    
+    @Resource
+    public void setActivationNamespaces(Collection<String> ans) {
+        activationNamespaces = ans;
+    }
+    
+    @PostConstruct
+    void register() {
+        if (null == bus) {
+            return;
+        }
+        BindingInfoFactoryBeanManager bfm = bus.getExtension(BindingInfoFactoryBeanManager.class);
+        if (null != bfm) {
+            for (String ns : activationNamespaces) {
+                bfm.registerBindingInfoFactoryBean(ns, this);
+            }
+        }
+    }
+
+    @Override
+    public BindingInfo create() {
+        ServiceInfo si = getServiceInfo();
+        BindingInfo info = new BindingInfo(si, "http://cxf.apache.org/bindings/xformat");        
+        info.setName(getBindingName());              
+        for (OperationInfo op : si.getInterface().getOperations()) {                       
+            BindingOperationInfo bop = 
+                info.buildOperation(op.getName(), op.getInputName(), op.getOutputName());
+            info.addOperation(bop);
+        }
+        
+        return info;
+    }
+    
+    protected QName getBindingName() {
+        ServiceInfo si = getServiceInfo();
+        return new QName(si.getName().getNamespaceURI(), 
+                         si.getName().getLocalPart() + "XMLBinding");
+    }
+
+    @Override
+    public String getTransportURI() {        
+        return "http://cxf.apache.org/bindings/xformat";
+    }
+
+}

Propchange: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingInfoFactoryBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingInfoFactoryBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/bus-extensions.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/bus-extensions.xml?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/bus-extensions.xml (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/bus-extensions.xml Mon Oct 16 05:54:27 2006
@@ -23,4 +23,8 @@
         <namespace>http://cxf.apache.org/bindings/xformat</namespace>       
     </extension>
     
+    <extension class="org.apache.cxf.binding.xml.XMLBindingInfoFactoryBean" deferred="true">
+        <namespace>http://cxf.apache.org/bindings/xformat</namespace>       
+    </extension>
+    
 </extensions>

Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension.xml?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension.xml (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension.xml Mon Oct 16 05:54:27 2006
@@ -31,4 +31,13 @@
             </set>
         </property>
     </bean>
+    
+    <bean class="org.apache.cxf.binding.xml.XMLBindingInfoFactoryBean" lazy-init="true">
+        <property name="bus" ref="cxf"/>
+        <property name="activationNamespaces">
+            <set>
+                <value>http://cxf.apache.org/bindings/xformat</value>
+            </set>
+        </property>
+    </bean>
 </beans>

Added: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManagerImpl.java?view=auto&rev=464472
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManagerImpl.java (added)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/BindingInfoFactoryBeanManagerImpl.java Mon Oct 16 05:54:27 2006
@@ -0,0 +1,113 @@
+/**
+ * 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.binding;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusException;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.extension.ExtensionManager;
+import org.apache.cxf.service.model.AbstractBindingInfoFactoryBean;
+
+public class BindingInfoFactoryBeanManagerImpl implements BindingInfoFactoryBeanManager {
+    private static final ResourceBundle BUNDLE = 
+        BundleUtils.getBundle(BindingInfoFactoryBeanManagerImpl.class);
+    
+    final Map<String, AbstractBindingInfoFactoryBean> bindingInfoFactoryBeans;
+    Properties factoryNamespaceMappings;       
+    ExtensionManager extensionManager;
+    Bus bus;
+    
+    public BindingInfoFactoryBeanManagerImpl() throws BusException {
+        bindingInfoFactoryBeans = new ConcurrentHashMap<String, AbstractBindingInfoFactoryBean>();
+    }
+    
+    @Resource
+    public void setExtensionManager(ExtensionManager em) {
+        extensionManager = em;
+    }
+    
+    @Resource
+    public void setBus(Bus b) {
+        bus = b;
+    }
+    
+    @PostConstruct
+    public void register() {
+        if (null != bus) {
+            bus.setExtension(this, BindingInfoFactoryBeanManager.class);
+        }
+    }
+    
+    AbstractBindingInfoFactoryBean loadBindingFactory(
+        String className, String ...namespaceURIs) throws BusException {
+        
+        AbstractBindingInfoFactoryBean factory = null;
+        try {
+            Class<? extends AbstractBindingInfoFactoryBean> clazz = 
+                Class.forName(className).asSubclass(AbstractBindingInfoFactoryBean.class);
+
+            factory = clazz.newInstance();
+
+            for (String namespace : namespaceURIs) {
+                registerBindingInfoFactoryBean(namespace, factory);
+            }
+        } catch (ClassNotFoundException cnfe) {
+            throw new BusException(cnfe);
+        } catch (InstantiationException ie) {
+            throw new BusException(ie);
+        } catch (IllegalAccessException iae) {
+            throw new BusException(iae);
+        }
+        return factory;
+    }
+
+    public AbstractBindingInfoFactoryBean getBindingInfoFactoryBean(String namespace) 
+        throws BusException {       
+        AbstractBindingInfoFactoryBean factory = bindingInfoFactoryBeans.get(namespace);
+        if (null == factory) { 
+            extensionManager.activateViaNS(namespace);            
+            factory = bindingInfoFactoryBeans.get(namespace);
+        }
+        if (null == factory) {
+            throw new BusException(new Message("NO_BINDING_INFO_FACTORY_BEAN_EXC", BUNDLE, namespace));
+        }
+        return factory;
+    }
+
+    public void registerBindingInfoFactoryBean(String name, 
+                                               AbstractBindingInfoFactoryBean factory) {        
+        bindingInfoFactoryBeans.put(name, factory);
+        
+    }
+
+    public void unregisterBindingInfoFactoryBean(String name) {
+        bindingInfoFactoryBeans.remove(name);        
+    }
+
+}

Modified: incubator/cxf/trunk/rt/core/src/main/resources/META-INF/bus-extensions.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/resources/META-INF/bus-extensions.xml?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/resources/META-INF/bus-extensions.xml (original)
+++ incubator/cxf/trunk/rt/core/src/main/resources/META-INF/bus-extensions.xml Mon Oct 16 05:54:27 2006
@@ -35,5 +35,7 @@
        	   interface="org.apache.cxf.buslifecycle.BusLifeCycleManager"/>   	   
     <extension class="org.apache.cxf.endpoint.ServerRegistryImpl"
        	   interface="org.apache.cxf.endpoint.ServerRegistry"/>
-    
+    <extension class="org.apache.cxf.binding.BindingInfoFactoryBeanManagerImpl"
+           interface="org.apache.cxf.binding.BindingInfoFactoryBeanManager"/>
+           
 </extensions>

Modified: incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml (original)
+++ incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml Mon Oct 16 05:54:27 2006
@@ -44,6 +44,11 @@
         <property name="bus" ref="cxf"/>
     </bean>
     
+    <bean id="org.apache.cxf.binding.BindingInfoFactoryBeanManager" class="org.apache.cxf.binding.BindingInfoFactoryBeanManagerImpl">
+        <property name="extensionManager" ref="org.apache.cxf.extension.ExtensionManager"/>
+        <property name="bus" ref="cxf"/>
+    </bean>
+    
     <bean id="org.apache.cxf.transport.DestinationFactoryManager" class="org.apache.cxf.transport.DestinationFactoryManagerImpl">
         <property name="extensionManager" ref="org.apache.cxf.extension.ExtensionManager"/>
         <property name="bus" ref="cxf"/>

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Mon Oct 16 05:54:27 2006
@@ -43,6 +43,8 @@
 import javax.xml.ws.spi.ServiceDelegate;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.BusException;
+import org.apache.cxf.binding.BindingInfoFactoryBeanManager;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.configuration.Configurer;
 import org.apache.cxf.endpoint.Client;
@@ -55,8 +57,7 @@
 import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
 import org.apache.cxf.service.Service;
-import org.apache.cxf.service.factory.AbstractBindingInfoFactoryBean;
-import org.apache.cxf.service.factory.SoapBindingInfoFactoryBean;
+import org.apache.cxf.service.model.AbstractBindingInfoFactoryBean;
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.service.model.ServiceInfo;
@@ -114,7 +115,11 @@
         } else {
             PortInfo portInfo =  getPortInfor(portName);
             if (null != portInfo) {
-                ei = createEndpointInfo(service, portName, portInfo);
+                try {
+                    ei = createEndpointInfo(service, portName, portInfo);
+                } catch (BusException e) {
+                    throw new WebServiceException(e);
+                }
             } else {
                 ei = si.getEndpoint(portName);
             }    
@@ -253,8 +258,12 @@
         } else {
             // first chech the endpointInfo from portInfos
             PortInfo portInfo = portInfos.get(portName);
-            if (null != portInfo) {
-                ei = createEndpointInfo(service, portName, portInfo);                
+            if (null != portInfo) {                
+                try {
+                    ei = createEndpointInfo(service, portName, portInfo);
+                } catch (BusException e) {
+                    throw new WebServiceException(e);
+                }                
             } else {
                 ei = si.getEndpoint(portName);
             }    
@@ -289,18 +298,22 @@
         return serviceEndpointInterface.cast(obj);
     }
 
-    private EndpointInfo createEndpointInfo(Service service, QName portName, PortInfo portInfo) {        
+    private EndpointInfo createEndpointInfo(Service service, QName portName, PortInfo portInfo)
+        throws BusException {        
+        
         EndpointInfo ei = null;
         String address = portInfo.getAddress();        
         //create bindingInfo from the bindingId
-        //TODO get the different BindingInfoFactoryBean from BindingInfoFactories
-        AbstractBindingInfoFactoryBean bindingFactory = new SoapBindingInfoFactoryBean();
-        bindingFactory.setServiceInfo(service.getServiceInfo());
+        BindingInfoFactoryBeanManager bfm = bus.getExtension(BindingInfoFactoryBeanManager.class);
+       
+        AbstractBindingInfoFactoryBean bindingFactory = 
+            bfm.getBindingInfoFactoryBean(portInfo.getBindingUri());
+        bindingFactory.setService(service);
         
         BindingInfo bindingInfo = bindingFactory.create();
         service.getServiceInfo().addBinding(bindingInfo);
-            
-        ei = new EndpointInfo(service.getServiceInfo(), portInfo.getBindingUri());
+        //TODO we may need to get the transportURI from Address    
+        ei = new EndpointInfo(service.getServiceInfo(), bindingFactory.getTransportURI());
         ei.setName(portName);
         ei.setAddress(address);
         ei.setBinding(bindingInfo);

Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ServerFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ServerFactoryBean.java?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ServerFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ServerFactoryBean.java Mon Oct 16 05:54:27 2006
@@ -24,11 +24,13 @@
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusException;
+import org.apache.cxf.binding.soap.SoapBindingInfoFactoryBean;
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.endpoint.EndpointException;
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.endpoint.ServerImpl;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.AbstractBindingInfoFactoryBean;
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.ChainInitiationObserver;
@@ -99,7 +101,7 @@
         destinationFactory = dfm.getDestinationFactory(transportId);
         
         // Get the Service from the ServiceFactory if specified        
-        bindingFactory.setServiceFactory(serviceFactory);
+        bindingFactory.setService(serviceFactory.getService());
         BindingInfo bindingInfo = bindingFactory.create();
         service.getServiceInfo().addBinding(bindingInfo);
         

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java Mon Oct 16 05:54:27 2006
@@ -148,9 +148,9 @@
 
         SOAPService service = new SOAPService(wsdl, serviceName);
         assertNotNull(service);*/
-        SOAPService service = new SOAPService(null, serviceName);
+        Service service = Service.create(serviceName);
         assertNotNull(service);
-        service.addPort(portName, "http://schemas.xmlsoap.org/soap/http", 
+        service.addPort(portName, "http://schemas.xmlsoap.org/soap/", 
                         "http://localhost:9006/SOAPDispatchService/SoapDispatchPort");
 
         Dispatch<DOMSource> disp = service.createDispatch(portName, DOMSource.class, Service.Mode.MESSAGE);
@@ -212,7 +212,7 @@
         assertNotNull(service);*/
         Service service = Service.create(serviceName);
         assertNotNull(service);
-        service.addPort(portName, "http://schemas.xmlsoap.org/soap/http", 
+        service.addPort(portName, "http://schemas.xmlsoap.org/soap/", 
                         "http://localhost:9006/SOAPDispatchService/SoapDispatchPort");
 
         Dispatch<DOMSource> disp = service.createDispatch(portName, DOMSource.class, Service.Mode.PAYLOAD);

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java Mon Oct 16 05:54:27 2006
@@ -121,7 +121,7 @@
     
     public void testAddPort() throws Exception {
         Service service = Service.create(serviceName);
-        service.addPort(fakePortName, "http://schemas.xmlsoap.org/soap/http", 
+        service.addPort(fakePortName, "http://schemas.xmlsoap.org/soap/", 
                         "http://localhost:9000/SoapContext/SoapPort");
         Greeter greeter = service.getPort(fakePortName, Greeter.class);
 

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerXMLWrapTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerXMLWrapTest.java?view=diff&rev=464472&r1=464471&r2=464472
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerXMLWrapTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerXMLWrapTest.java Mon Oct 16 05:54:27 2006
@@ -23,6 +23,7 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.ws.Endpoint;
+import javax.xml.ws.Service;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -36,8 +37,12 @@
 
 
 public class ClientServerXMLWrapTest extends TestCase {
-    
-    private final QName portName = new QName("http://apache.org/hello_world_xml_http/wrapped", "XMLPort");
+    private final QName serviceName = 
+        new QName("http://apache.org/hello_world_xml_http/wrapped", "XMLService");
+    private final QName portName = 
+        new QName("http://apache.org/hello_world_xml_http/wrapped", "XMLPort");
+    private final QName fakePortName = 
+        new QName("http://apache.org/hello_world_xml_http/wrapped", "FackPort");
 
     public static class Server extends TestServerBase {
         
@@ -79,6 +84,35 @@
         String response2 = new String("Bonjour");
         try {
             Greeter greeter = service.getPort(portName, Greeter.class);
+            String username = System.getProperty("user.name");
+            String reply = greeter.greetMe(username);
+
+            assertNotNull("no response received from service", reply);
+            assertEquals(response1 + username, reply);
+
+            reply = greeter.sayHi();
+            assertNotNull("no response received from service", reply);
+            assertEquals(response2, reply);
+
+            greeter.greetMeOneWay(System.getProperty("user.name"));
+
+        } catch (UndeclaredThrowableException ex) {
+            throw (Exception) ex.getCause();
+        }
+    }
+    
+    public void testAddPort() throws Exception {
+
+        Service service = Service.create(serviceName);
+        service.addPort(fakePortName, 
+                        "http://cxf.apache.org/bindings/xformat",
+                        "http://localhost:9032/XMLService/XMLPort");
+        assertNotNull(service);
+
+        String response1 = new String("Hello ");
+        String response2 = new String("Bonjour");
+        try {
+            Greeter greeter = service.getPort(fakePortName, Greeter.class);
             String username = System.getProperty("user.name");
             String reply = greeter.greetMe(username);
 



Re: Code First Binding Creation

Posted by Andrea Smyth <an...@iona.com>.
Why not have a version of the createService() method in the 
ServiceFactoryBeans (ReflectionServiceFactoryBean, 
JaxwsServiceFactoryBean etc, i.e. in an abstract base) that takes a 
bindingId as a parameter - which replaces/supersedes the namespace of 
the first child element of the wsdl:binding element that would be used 
in the wsdl first approach.
Applicaton code then does not have to be aware of the 
manager-factory-work pattern - only the factory beans have to.
This would also be helpful to build a service model and an endpoint from 
wsdls that do not actually contain a binding elements, e.g. wsrm.wsdl. 
<http://schemas.xmlsoap.org/ws/2005/02/rm/wsdl/wsrm.wsdl>

Andrea.


Dan Diephouse wrote:

> OK, hopefully this will be the last time I respond to my own message 
> :-) I think there is also a third option:
>
> JaxWsServiceFactoryBean serviceFactory = ...;
> ....
> BindingInfoFactoryManager bifm = ...
> BindingInfoFactory bif = bifm.getBindingInfoFactory("namespace");
> bif.createBinding(serviceFactory);
>
> Where createBinding creates a binding on serviceFactory.getService();
>
> Though I do get sick of all this indirection: Manager->Factory->Work, 
> this whole pattern seems to becoming really prevalent in our 
> architecture and it seems there should be a Better Way....
>
> - Dan
>
> Dan Diephouse wrote:
>
>> One other small issue, if we go with the manager approach it needs to 
>> create a new BindingInfoFactory when someone requests one as 
>> BindingInfoFactorys are stateful. So it'd be:
>>
>> void registerBindingInfoFactoryBean(String name, Class 
>> bindInfoFactoryBeanClass);
>>
>> as opposed to:
>>
>> void registerBindingInfoFactoryBean(String name, 
>> AbstractBindingInfoFactoryBean bindInfoFactoryBean);
>>
>> Cheers,
>> - Dan
>>
>> Dan Diephouse wrote:
>>
>>> I spent a bit of time looking at this today, and as I said earlier, 
>>> I'm not sure that the manager approach is the right one. But I'm not 
>>> sure what the right one is either :-). I like the discovery portion 
>>> of the manager approach, but I think the bindinginfofactories do 
>>> need to be coupled to the frontends and I also think there is some 
>>> power in the approach where you can do:
>>>
>>> sf = new ServerFactoryBean()
>>> bif = new SoapBindingInfoFactoryBean();
>>> bif.setStyle("document");
>>> sf.setBindingInfoFactory(bif);
>>>
>>> that is, I like how you can set up the binding easily via the API & 
>>> getters/setters.
>>>
>>> I'm wondering what the solution might be and here's what I've come 
>>> up with so far...
>>> 1. Keep the bean style approach and either a) require jax-ws to have 
>>> specific knowledge of the bindinginfofactory or b) have the user use 
>>> our internal APIs to specify their own bindinginfofactory
>>> 2. Have some sort of manager in the simple/jax-ws frontend
>>>
>>> I guess the two approaches don't have to be opposed. That is we 
>>> could try looking up a BindingInfoFactory from the manager or the 
>>> user could also specify their own.
>>>
>>> Thoughts? Other ideas?
>>>
>>> - Dan
>>>
>>> Dan Diephouse wrote:
>>>
>>>> ningjiang@apache.org wrote:
>>>>
>>>>> Author: ningjiang
>>>>> Date: Mon Oct 16 05:54:27 2006
>>>>> New Revision: 464472
>>>>>
>>>>> URL: http://svn.apache.org/viewvc?view=rev&rev=464472
>>>>> Log:
>>>>> [JIRA CXF-18] PhaseTow: Implemented BindingInfoFactoryBeanManager 
>>>>> to load the BingInfoFactoryBean just like BingFactoryManager. 
>>>>> Moved AbstractBindingInfoFactoryBean.java form frontend/simple to 
>>>>> api Moved SoapBindingInfoFactoryBean.java form frontend/simple to 
>>>>> SoapBinding
>>>>> Added XMLBindingInfoFactoryBean.java for creating XMLBinding in 
>>>>> codefirst mode.
>>>>>  
>>>>>
>>>> Finally got around to looking at this change and I'm not real keen 
>>>> on it.
>>>>
>>>> BindingInfoFactorys are highly tied to front ends and 
>>>> servicefactorys. For instance, in the Jax-Ws module we need a 
>>>> version of the SoapBindingInfoFactory which looks at the 
>>>> @SOAPBinding annotations. So it will need access to the information 
>>>> the service factory. We can't remove the setServiceFactory() method 
>>>> from the BindingInfoFactoryBean and replace it with the 
>>>> setService(). It is JAX-WS that needs to know about SOAP, not SOAP 
>>>> that needs to know about JAX-WS.
>>>>
>>>> I do understand that some discovery mechanism may be needed but I 
>>>> think trying to promote this as a top level concept isn't the right 
>>>> approach. I'm going to take a look a refactoring this a bit.
>>>>
>>>> Cheers,
>>>> - Dan
>>>>
>>>
>>>
>>
>>
>
>


Re: svn commit: r464472 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/binding/ api/src/main/java/org/apache/cxf/service/model/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/ rt/bindings/soap/src/main/resources/META-INF/ rt/bindin...

Posted by Dan Diephouse <da...@envoisolutions.com>.
ningjiang@apache.org wrote:

>Author: ningjiang
>Date: Mon Oct 16 05:54:27 2006
>New Revision: 464472
>
>URL: http://svn.apache.org/viewvc?view=rev&rev=464472
>Log:
>[JIRA CXF-18] PhaseTow: Implemented BindingInfoFactoryBeanManager to load the BingInfoFactoryBean just like BingFactoryManager. 
>Moved AbstractBindingInfoFactoryBean.java form frontend/simple to api 
>Moved SoapBindingInfoFactoryBean.java form frontend/simple to SoapBinding
>Added XMLBindingInfoFactoryBean.java for creating XMLBinding in codefirst mode.
>  
>
Finally got around to looking at this change and I'm not real keen on it.

BindingInfoFactorys are highly tied to front ends and servicefactorys. 
For instance, in the Jax-Ws module we need a version of the 
SoapBindingInfoFactory which looks at the @SOAPBinding annotations. So 
it will need access to the information the service factory. We can't 
remove the setServiceFactory() method from the BindingInfoFactoryBean 
and replace it with the setService(). It is JAX-WS that needs to know 
about SOAP, not SOAP that needs to know about JAX-WS.

I do understand that some discovery mechanism may be needed but I think 
trying to promote this as a top level concept isn't the right approach. 
I'm going to take a look a refactoring this a bit.

Cheers,
- Dan

-- 
Dan Diephouse
(616) 971-2053
Envoi Solutions LLC
http://netzooid.com