Commit 7aa998ad authored by Gwenael Cattez's avatar Gwenael Cattez

new feature : propagate collection binding

parent f39c71c9
......@@ -27,6 +27,7 @@
package org.ow2.frascati.remote.introspection.binding;
import java.util.List;
import java.util.Map;
import org.objectweb.fractal.api.Interface;
......@@ -142,4 +143,12 @@ public interface BindingManagerItf
*/
public void setBindingAttribute(Interface itf, Map<String,String> stringHints, String attribute, String newValue) throws NoBindingKindException, UnsupportedBindingException, BindingProcessorException;
/**
* Get a list of the interface own by a binding component and bounded to itf
*
* @param itf a fractal interface
* @return a List of binding interface bounded to itf
*/
public List<Interface> getBindingInterfaces(Interface itf);
}
......@@ -120,7 +120,7 @@ public interface FractalUtilItf
public boolean isSCAComponent(Component component);
/**
* Check is a fractal interface is a controller interface
* Check if a fractal interface is a controller interface
* ie if it's a server interface named *-controller
*
* @param itf fractal interface
......@@ -128,6 +128,17 @@ public interface FractalUtilItf
*/
public boolean isFractalControllerInterface(Interface itf);
/**
* Check if a fractal interface is a multiple reference instance
* ie check interface name match "baseMultipleReferenceName-Digit"
* and interface owner have an multiple interface baseMultipleReferenceName
*
* @param itf fractal interface
* @return true if fractal interface is a controller interface, false otherwise
*/
public boolean isCollectionInterfaceInstance(Interface itf);
/**
* Get a reference to the fractal component designated by id.
*
......@@ -226,21 +237,27 @@ public interface FractalUtilItf
/**
* Get the object bound to a client fractal interface
*
* @param itf
* @return
* @param clientItf interface of the client
* @return The bounded object or null if not found
*/
public Object getServerInterface(Interface itf);
public Object getServerInterface(Interface clientItf);
public List<Object> getClientInterfaces(Interface itf);
/**
* Get a list of all fractal interfaces bound to a server fractal interface
*
* @param serverItf interface of the server
* @return
*/
public List<Interface> getClientInterfaces(Interface serverItf);
/**
* Get the name of the last interface bound to a collection Reference define by collectionName
* i.e collectionName-(highest index found)
*
*
* @param owner Owner of the collection
* @param collectionName name of the collection
* @return The last interfaceName bound to Collection
......
......@@ -101,4 +101,5 @@ com.sun.level = INFO
#org.objectweb.fractal.bf.level = FINE
org.ow2.frascati.remote.level = FINE
org.apache.log4j.level = INFO
\ No newline at end of file
org.apache.log4j.level = INFO
org.ow2.frascati.remote.introspection.util.level = FINE
\ No newline at end of file
......@@ -123,7 +123,6 @@
<!-- <version>1.5-SNAPSHOT</version> -->
<!-- <type>zip</type> -->
<!-- <classifier>frascati-contribution</classifier> -->
<!-- <overWrite>true</overWrite> -->
<!-- <destFileName>helloworld-multiple-reference.zip</destFileName> -->
<!-- </artifactItem> -->
<artifactItem>
......@@ -131,7 +130,13 @@
<artifactId>helloworld-multiple-reference</artifactId>
<version>1.5-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>helloworld-multiple-reference.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>org.ow2.frascati.examples</groupId>
<artifactId>helloworld-multiple-reference</artifactId>
<version>1.5-SNAPSHOT</version>
<type>jar</type>
<destFileName>helloworld-multiple-reference.jar</destFileName>
</artifactItem>
<artifactItem>
......@@ -139,7 +144,6 @@
<artifactId>helloworld-pojo</artifactId>
<version>1.5-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>helloworld-pojo.jar</destFileName>
</artifactItem>
<!-- <artifactItem> -->
......@@ -148,7 +152,6 @@
<!-- <version>1.5-SNAPSHOT</version> -->
<!-- <type>zip</type> -->
<!-- <classifier>frascati-contribution</classifier> -->
<!-- <overWrite>true</overWrite> -->
<!-- <destFileName>counter.zip</destFileName> -->
<!-- </artifactItem> -->
<!-- <artifactItem> -->
......@@ -157,7 +160,6 @@
<!-- <version>1.5-SNAPSHOT</version> -->
<!-- <type>zip</type> -->
<!-- <classifier>frascati-contribution</classifier> -->
<!-- <overWrite>true</overWrite> -->
<!-- <destFileName>helloworld-jms.zip</destFileName> -->
<!-- </artifactItem> -->
<!-- <artifactItem> -->
......@@ -166,7 +168,6 @@
<!-- <version>1.5-SNAPSHOT</version> -->
<!-- <type>zip</type> -->
<!-- <classifier>frascati-contribution</classifier> -->
<!-- <overWrite>true</overWrite> -->
<!-- <destFileName>helloworld-jsonrpc.zip</destFileName> -->
<!-- </artifactItem> -->
<!-- <artifactItem> -->
......@@ -175,7 +176,6 @@
<!-- <version>1.5-SNAPSHOT</version> -->
<!-- <type>zip</type> -->
<!-- <classifier>frascati-contribution</classifier> -->
<!-- <overWrite>true</overWrite> -->
<!-- <destFileName>helloworld-upnp.zip</destFileName> -->
<!-- </artifactItem> -->
<!-- <artifactItem> -->
......@@ -184,7 +184,6 @@
<!-- <version>1.5-SNAPSHOT</version> -->
<!-- <type>zip</type> -->
<!-- <classifier>frascati-contribution</classifier> -->
<!-- <overWrite>true</overWrite> -->
<!-- <destFileName>helloworld-binding-sca.zip</destFileName> -->
<!-- </artifactItem> -->
<!-- <artifactItem> -->
......@@ -193,7 +192,6 @@
<!-- <version>1.5-SNAPSHOT</version> -->
<!-- <type>zip</type> -->
<!-- <classifier>frascati-contribution</classifier> -->
<!-- <overWrite>true</overWrite> -->
<!-- <destFileName>helloworld-rmi.zip</destFileName> -->
<!-- </artifactItem> -->
<artifactItem>
......@@ -201,7 +199,6 @@
<artifactId>helloworld-ws-server</artifactId>
<version>1.5-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>helloworld-ws-server.jar</destFileName>
</artifactItem>
<artifactItem>
......@@ -209,7 +206,6 @@
<artifactId>helloworld-ws-client</artifactId>
<version>1.5-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<destFileName>helloworld-ws-client.jar</destFileName>
</artifactItem>
</artifactItems>
......
......@@ -173,6 +173,14 @@ public class RemoteScaDomainImpl implements RemoteScaDomain
{
throw new MyWebApplicationException(noSuchInterfaceException, "No interface found for for id : " + interfaceId);
}
Object serverObject=fractalUtil.getServerInterface(itf);
if(serverObject==null && fractalUtil.isCollectionInterfaceInstance(itf))
{
logger.warning("interface "+interfaceId+" is related to a fractal collection interface that is not bound");
throw new MyWebApplicationException("No interface found for for id : " + interfaceId);
}
logExiting("getFcInterface", itf);
return itf;
}
......
......@@ -27,6 +27,7 @@
package org.ow2.frascati.remote.introspection.binding;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
......@@ -405,8 +406,6 @@ public class BindingManagerImpl implements BindingManagerItf
}
/**
* @see org.ow2.frascati.remote.introspection.binding.BindingManagerItf#unbind(org.objectweb.fractal.api.Interface, java.lang.String, int)
*/
......@@ -489,32 +488,45 @@ public class BindingManagerImpl implements BindingManagerItf
private Interface propagateUnbind(Interface itf) throws NoSuchInterfaceException, IllegalBindingException, IllegalLifeCycleException
{
// InterfaceType interfaceType=(InterfaceType) itf.getFcItfType();
// if(interfaceType.isFcCollectionItf())
// {
// Interface deepestClientInterface=this.fractalUtil.getDeepestClient(itf);
// Interface deepestClientServerInterface=(Interface) this.fractalUtil.getServerInterface(deepestClientInterface);
// org.objectweb.fractal.api.Component deepestClientOwner;
// BindingController deepestOwnerBindingController;
//
// while(deepestClientServerInterface!=null)
// {
// deepestClientOwner=deepestClientInterface.getFcItfOwner();
// deepestOwnerBindingController=Fractal.getBindingController(deepestClientOwner);
// fractalUtil.stopComponent(deepestClientOwner);
// deepestOwnerBindingController.unbindFc(deepestClientInterface.getFcItfName());
// logger.info("unbind "+deepestClientInterface.getFcItfName()+" from "+fractalUtil.getComponentName(deepestClientOwner));
// fractalUtil.startComponent(deepestClientOwner);
// deepestClientInterface=deepestClientServerInterface;
// deepestClientServerInterface=(Interface) fractalUtil.getServerInterface(deepestClientInterface);
// }
// logger.info(deepestClientInterface.getFcItfName());
// return deepestClientInterface;
// }
logger.fine(" propagateUnbind "+itf.getFcItfName());
Interface clientInterface=itf;
List<Interface> clientInterfaces=fractalUtil.getClientInterfaces(itf);
while(!clientInterfaces.isEmpty())
{
clientInterface=(Interface) clientInterfaces.get(0);
clientInterfaces=fractalUtil.getClientInterfaces(clientInterface);
}
logger.fine("deepest clientInterface "+clientInterface.getFcItfName());
return itf;
}
Interface serverInterface = (Interface) fractalUtil.getServerInterface(clientInterface);
org.objectweb.fractal.api.Component clientOwner;
BindingController clientOwnerBindingController;
while (serverInterface != null)
{
clientOwner = clientInterface.getFcItfOwner();
clientOwnerBindingController = Fractal.getBindingController(clientOwner);
fractalUtil.stopComponent(clientOwner);
clientOwnerBindingController.unbindFc(clientInterface.getFcItfName());
logger.info("unbind " + clientInterface.getFcItfName() + " from " + fractalUtil.getComponentName(clientOwner));
fractalUtil.startComponent(clientOwner);
clientInterface = serverInterface;
serverInterface = (Interface) fractalUtil.getServerInterface(clientInterface);
String serverBindingName=fractalUtil.getComponentName(serverInterface.getFcItfOwner())+"/"+serverInterface.getFcItfName();
try
{
BindingProcessorItf processor= this.getBindingProcessor(serverInterface.getFcItfOwner());
logger.fine(serverBindingName+" is a "+processor.getBindingKind()+" binding, break");
break;
} catch (UnsupportedBindingComponentException unsupportedBindingComponentException)
{
logger.fine(serverBindingName+" is a fractal interface, keep going");
}
}
logger.info("propagateUnbind "+clientInterface.getFcItfName());
return clientInterface;
}
/**
* @see org.ow2.frascati.remote.introspection.binding.BindingManagerItf#setBindingAttribute(org.objectweb.fractal.api.Interface, java.lang.String, java.lang.String, java.lang.String)
*/
......@@ -554,4 +566,69 @@ public class BindingManagerImpl implements BindingManagerItf
{
logger.warning(" setBindingAttribute(Interface itf, Map<String, String> stringHints, String attribute, String newValue) not implemented yet");
}
/**
* @see org.ow2.frascati.remote.introspection.binding.BindingManagerItf#getBindingInterfaces(org.objectweb.fractal.api.Interface)
*/
public List<Interface> getBindingInterfaces(Interface itf)
{
String interfaceName = itf.getFcItfName();
Component owner = itf.getFcItfOwner();
String ownerName = fractalUtil.getComponentName(owner);
logger.finest("getBindingInterfaces owner : " + ownerName + " interface : " + interfaceName);
List<Interface> clientInterfaces = new ArrayList<Interface>();
List<org.objectweb.fractal.api.Component> children = null;
try
{
children = fractalUtil.getChildren(owner);
} catch (NoSuchInterfaceException noSuchInterfaceException)
{
logger.warning("NoSuchInterfaceException when trying to get children of component : " + fractalUtil.getComponentName(owner));
return clientInterfaces;
}
BindingController childBindingController = null;
Interface servant = null, client;
for (Component child : children)
{
try
{
childBindingController = Fractal.getBindingController(child);
} catch (NoSuchInterfaceException noSuchInterfaceException)
{
logger.fine("Can't get BindingController for component " + fractalUtil.getComponentName(child));
continue;
}
try
{
servant = (Interface) childBindingController.lookupFc(AbstractSkeleton.SERVANT_CLIENT_ITF_NAME);
} catch (NoSuchInterfaceException noSuchInterfaceException)
{
logger.fine("Can't find " + AbstractSkeleton.SERVANT_CLIENT_ITF_NAME + " interface on component " + fractalUtil.getComponentName(child));
continue;
}
if (servant != itf)
{
logger.fine(AbstractSkeleton.SERVANT_CLIENT_ITF_NAME + " interface " + servant.getFcItfName() + " on component " + fractalUtil.getComponentName(child)
+ " is not bound to " + itf.getFcItfName());
continue;
}
try
{
client = (Interface) child.getFcInterface(AbstractSkeleton.SERVANT_CLIENT_ITF_NAME);
logger.fine(fractalUtil.getComponentName(client.getFcItfOwner()) + "/" + client.getFcItfName() + " is client interface for " + itf.getFcItfName());
clientInterfaces.add(client);
} catch (NoSuchInterfaceException noSuchInterfaceException)
{
logger.fine("Can't find " + AbstractSkeleton.SERVANT_CLIENT_ITF_NAME + " interface on component " + fractalUtil.getComponentName(child));
continue;
}
}
return clientInterfaces;
}
}
......@@ -347,6 +347,34 @@ public class FractalUtilImpl implements FractalUtilItf
return (!itfType.isFcClientItf())&&(interfaceName.endsWith("-controller"));
}
/**
* @see org.ow2.frascati.remote.introspection.util.FractalUtilItf#isCollectionInterfaceInstance(org.objectweb.fractal.api.Interface)
*/
public boolean isCollectionInterfaceInstance(Interface itf)
{
logger.fine("isCollectionInterfaceInstance "+itf.getFcItfName());
String collectionInterfaceRegex = "(.*)-(0|[1-9]\\d*)";
String interfaceName=itf.getFcItfName();
InterfaceType itfType=(InterfaceType) itf.getFcItfType();
if(!(interfaceName.matches(collectionInterfaceRegex) && itfType.isFcCollectionItf()))
{
return false;
}
Component owner=itf.getFcItfOwner();
String baseCollectionInterfaceName=interfaceName.replaceAll(collectionInterfaceRegex, "$1");
try
{
owner.getFcInterface(baseCollectionInterfaceName);
return true;
}
catch (NoSuchInterfaceException noSuchInterfaceException)
{
return false;
}
}
/**
* Get the SCAPropertyController related to component
*
......@@ -552,29 +580,22 @@ public class FractalUtilImpl implements FractalUtilItf
/**
* @see org.ow2.frascati.remote.introspection.util.FractalUtilItf#getClientInterfaces(org.objectweb.fractal.api.Interface)
*/
public List<Object> getClientInterfaces(Interface itf)
public List<Interface> getClientInterfaces(Interface itf)
{
String interfaceName=itf.getFcItfName();
Component owner=itf.getFcItfOwner();
String ownerName=this.getComponentName(owner);
logger.finest("getPromotedInterface owner : "+ownerName+" interface : "+interfaceName);
logger.fine("getPromotedInterface owner : "+ownerName+" interface : "+interfaceName+" "+itf);
List<Object> clientInterfaces=new ArrayList<Object>();
List<org.objectweb.fractal.api.Component> children=null;
try
{
children=this.getChildren(owner);
}
catch(NoSuchInterfaceException noSuchInterfaceException)
{
logger.warning("NoSuchInterfaceException when trying to get children of component : "+this.getComponentName(owner));
return clientInterfaces;
}
List<Interface> clientInterfaces=new ArrayList<Interface>();
List<org.objectweb.fractal.api.Component> children=this.getSubComponents(owner);
logger.fine(ownerName+" have "+children.size()+" children");
BindingController childBindingController=null;
Interface servant=null,client;
Interface boundedOject;
for (Component child : children)
{
logger.fine("child : "+this.getComponentName(child));
try
{
childBindingController=Fractal.getBindingController(child);
......@@ -584,37 +605,23 @@ public class FractalUtilImpl implements FractalUtilItf
logger.fine("Can't get BindingController for component "+this.getComponentName(child));
continue;
}
try
for(String fc : childBindingController.listFc())
{
servant=(Interface) childBindingController.lookupFc(AbstractSkeleton.SERVANT_CLIENT_ITF_NAME);
}
catch (NoSuchInterfaceException noSuchInterfaceException)
{
logger.fine("Can't find "+AbstractSkeleton.SERVANT_CLIENT_ITF_NAME+" interface on component "+this.getComponentName(child));
continue;
}
if(servant!=itf)
{
logger.fine(AbstractSkeleton.SERVANT_CLIENT_ITF_NAME+" interface "+servant.getFcItfName()+" on component "+this.getComponentName(child)+" is not bound to "+itf.getFcItfName());
continue;
}
try
{
client=(Interface) child.getFcInterface(AbstractSkeleton.SERVANT_CLIENT_ITF_NAME);
logger.fine(this.getComponentName(client.getFcItfOwner())+"/"+client.getFcItfName()+" is client interface for "+itf.getFcItfName());
clientInterfaces.add(client);
}
catch (NoSuchInterfaceException noSuchInterfaceException)
{
logger.fine("Can't find "+AbstractSkeleton.SERVANT_CLIENT_ITF_NAME+" interface on component "+this.getComponentName(child));
continue;
try
{
boundedOject=(Interface) childBindingController.lookupFc(fc);
if(boundedOject!=null && boundedOject.getFcItfName().equals(itf.getFcItfName()))
{
clientInterfaces.add((Interface)child.getFcInterface(fc));
}
}
catch (NoSuchInterfaceException e)
{
logger.info("It should not happen");
}
}
}
}
return clientInterfaces;
}
......
......@@ -28,28 +28,19 @@ package org.ow2.frascati.remote.introspection.util;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import org.objectweb.fractal.api.Interface;
import org.objectweb.fractal.api.NoSuchInterfaceException;
import org.objectweb.fractal.api.control.BindingController;
import org.objectweb.fractal.api.control.ContentController;
import org.objectweb.fractal.api.control.LifeCycleController;
import org.objectweb.fractal.api.control.NameController;
import org.objectweb.fractal.api.type.ComponentType;
import org.objectweb.fractal.api.type.InterfaceType;
import org.objectweb.fractal.util.Fractal;
import org.osoa.sca.annotations.Reference;
import org.ow2.frascati.assembly.factory.processor.ScaPropertyTypeJavaProcessor;
import org.ow2.frascati.remote.introspection.binding.BindingAttribute;
import org.ow2.frascati.remote.introspection.binding.BindingBundle;
import org.ow2.frascati.remote.introspection.binding.BindingManagerItf;
import org.ow2.frascati.remote.introspection.binding.exception.UnsupportedBindingComponentException;
import org.ow2.frascati.remote.introspection.binding.processor.BindingProcessorException;
import org.ow2.frascati.remote.introspection.binding.processor.BindingProcessorItf;
import org.ow2.frascati.remote.introspection.exception.BadParameterTypeException;
import org.ow2.frascati.remote.introspection.exception.MyWebApplicationException;
import org.ow2.frascati.remote.introspection.resources.Attribute;
import org.ow2.frascati.remote.introspection.resources.Binding;
import org.ow2.frascati.remote.introspection.resources.Component;
......@@ -145,8 +136,8 @@ public class ResourceUtilImpl implements ResourceUtilItf
}
itf = (Interface) itfObject;
logger.fine("interface "+itf.getFcItfName());
itfType = (InterfaceType) itf.getFcItfType();
logger.fine("interface "+itf.getFcItfName() +" "+itfType.isFcCollectionItf());
if(itfType.isFcCollectionItf())
{
Object serverObject=fractalUtil.getServerInterface(itf);
......@@ -168,7 +159,6 @@ public class ResourceUtilImpl implements ResourceUtilItf
logger.fine("add interface "+itf.getFcItfName()+" to service resources");
compResource.getServices().add(getPortResource(itf));
}
}
}
......@@ -306,7 +296,7 @@ public class ResourceUtilImpl implements ResourceUtilItf
*/
private void addBindingsResource(org.objectweb.fractal.api.Interface itf, Collection<Binding> bindings)
{
logger.info(this.getClass().getName()+" addBindingsResource, interface "+itf.getFcItfName());
logger.info("addBindingsResource, interface "+itf.getFcItfName());
try
{
BindingBundle bindingBundle = bindingManager.getBindingBundle(itf);
......
......@@ -73,6 +73,7 @@ import org.ow2.frascati.util.FrascatiException;
*/
@RunWith(Suite.class)
@SuiteClasses({DeploymentTest.class, FractalUtilTest.class,SCAModelUtilTest.class,BindingManagerTest.class,ResourceUtilTest.class})
//@SuiteClasses({ResourceUtilTest.class})
public class IntrospectionTestSuite
{
/** REST binding URI */
......@@ -190,7 +191,6 @@ public class IntrospectionTestSuite
public static String deployComposite(String compositeFinaleName, String compositeName)
{
String compositePath=getResourcePath(compositeFinaleName+".jar");
System.out.println(compositePath);
String compositeFile = null;
try
{
......@@ -248,6 +248,19 @@ public class IntrospectionTestSuite
return port;
}
public static void assertPortNotExist(String portPath)
{
try
{
IntrospectionTestSuite.domain.getInterface(portPath);
fail("An exception was excepted");
}
catch(Exception webApplicationException)
{
assertEquals("No interface found for for id : "+portPath, webApplicationException.getMessage());
}
}
private static Binding getBinding(String portPath,BindingKind bindingKind)
{
Port port =assertPortExist(portPath);
......
......@@ -176,7 +176,8 @@ public abstract class BindingProcessorTest
private void initServer()
{
logEntering("initServer");
List<Object> clientInterfaces=fractalUtil.getClientInterfaces(this.serverInterfaceFc);
BindingManagerItf bindingManager=IntrospectionTestSuite.getBindingManager();
List<Interface> clientInterfaces=bindingManager.getBindingInterfaces(this.serverInterfaceFc);
assertEquals(1, clientInterfaces.size());
this.skeltonObject=clientInterfaces.get(0);
assertNotNull(this.skeltonObject);
......@@ -189,7 +190,6 @@ public abstract class BindingProcessorTest
try
{
BindingManagerItf bindingManager=IntrospectionTestSuite.getBindingManager();
this.bindingProcessor=bindingManager.getBindingProcessor(this.skeltonObject);
StringBuilder inconsistantBindingKing=new StringBuilder("Inconsistent BindingProcessor : ");
inconsistantBindingKing.append("The provided serverInterfacePath "+this.serverInterfacePath);
......@@ -242,7 +242,8 @@ public abstract class BindingProcessorTest
this.logEntering("removeServerBinding",this.serverInterfaceName, this.skeltonObject);
this.bindingProcessor.unexportService(serverComponentFc, serverInterfaceFc.getFcItfName(), this.skeltonObject);
List<Object> clientInterfaces=fractalUtil.getClientInterfaces(this.serverInterfaceFc);
BindingManagerItf bindingManager=IntrospectionTestSuite.getBindingManager();
List<Interface> clientInterfaces=bindingManager.getBindingInterfaces(this.serverInterfaceFc);
assertEquals(true, clientInterfaces.isEmpty());
this.skeltonObject=null;
this.skeltonInterfaceFc=null;
......
......@@ -71,26 +71,26 @@ public class WSBindingProcessorTest extends BindingProcessorTest
this.removeServerBinding();
Map<String,String> serverBindingHints=new HashMap<String, String>();
serverBindingHints.put("uri", "http://localhost:9001/HelloServiceReconfigured");
serverBindingHints.put("uri", "http://localhost:9299/HelloServiceReconfigured");
this.addServerBinding(serverBindingHints);
assertWSDLIsExposed(true,"http://localhost:9001/HelloServiceReconfigured?wsdl");
assertWSDLIsExposed(true,"http://localhost:9299/HelloServiceReconfigured?wsdl");
Map<String, String> clientBindingHints = new HashMap<String, String>();
clientBindingHints.put("uri", "http://localhost:9001/HelloServiceReconfigured");
clientBindingHints.put("wsdlLocation", "http://localhost:9001/HelloServiceReconfigured?wsdl");
clientBindingHints.put("uri", "http://localhost:9299/HelloServiceReconfigured");
clientBindingHints.put("wsdlLocation", "http://localhost:9299/HelloServiceReconfigured?wsdl");
clientBindingHints.put("wsdlElement", "http://annotated.helloworld.examples.frascati.ow2.org/#wsdl.port(HelloService/HelloServicePort)");
this.addClientBinding(clientBindingHints);
List<BindingAttribute> serverBindingAttributes = new ArrayList<BindingAttribute>();
BindingAttribute uriBindingAttribute = new BindingAttribute("uri", "http://localhost:9001/HelloServiceReconfiguredAttribute");
BindingAttribute uriBindingAttribute = new BindingAttribute("uri", "http://localhost:9299/HelloServiceReconfiguredAttribute");
serverBindingAttributes.add(uriBindingAttribute);
this.setServerAttribute(serverBindingAttributes);
//FIXME setting wsdl attribute does not work, wsdl is still expose on the previous URL
// assertWSDLIsExposed(false,"http://localhost:9001/HelloServiceReconfigured?wsdl");
// assertWSDLIsExposed(true,"http://localhost:9001/HelloServiceReconfiguredAttribute?wsdl");
// assertWSDLIsExposed(false,"http://localhost:9299/HelloServiceReconfigured?wsdl");
// assertWSDLIsExposed(true,"http://localhost:9299/HelloServiceReconfiguredAttribute?wsdl");
List<BindingAttribute> setBindingAttributesToSet=new ArrayList<BindingAttribute>();
BindingAttribute wsdlLocationBindingAttribute=new BindingAttribute("wsdlLocation", "http://localhost:9001/HelloServiceReconfiguredAttribute?wsdl");
BindingAttribute wsdlLocationBindingAttribute=new