Author: richard.opalka(a)jboss.com
Date: 2010-09-23 04:35:22 -0400 (Thu, 23 Sep 2010)
New Revision: 13012
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java
Log:
[JBWS-3133] ServiceRef & PortComponentRef UMDM now respects @Addressing, @MTOM and
@RespectBinding MDs
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java
===================================================================
---
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java 2010-09-23
08:31:11 UTC (rev 13011)
+++
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceObjectFactory.java 2010-09-23
08:35:22 UTC (rev 13012)
@@ -28,6 +28,7 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
+import java.util.Collection;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
@@ -52,12 +53,13 @@
import org.jboss.logging.Logger;
import org.jboss.wsf.spi.WSFException;
import org.jboss.wsf.spi.deployment.UnifiedVirtualFile;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedPortComponentRefMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedServiceRefMetaData;
import org.jboss.wsf.stack.cxf.client.configuration.JBossWSSpringBusFactory;
/**
* This ServiceObjectFactory reconstructs a javax.xml.ws.Service
- * for a given WSDL when the webservice client does a JNDI lookup
+ * for a given WSDL when the webservice client does a JNDI lookup.
*
* @see ServiceReferenceable
*
@@ -89,185 +91,358 @@
* @see javax.naming.spi.NamingManager#getObjectInstance
* @see javax.naming.spi.NamingManager#getURLContext
*/
- @SuppressWarnings(value="unchecked")
- public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable
environment) throws Exception
+ @SuppressWarnings(value = "unchecked")
+ public Object getObjectInstance(final Object obj, final Name name, final Context
nameCtx, final Hashtable environment)
+ throws Exception
{
try
{
- Reference ref = (Reference)obj;
-
- // Get the target class name
- String targetClassName =
(String)ref.get(ServiceReferenceable.TARGET_CLASS_NAME).getContent();
-
- // Unmarshall the UnifiedServiceRef
- UnifiedServiceRefMetaData serviceRef = unmarshallServiceRef(ref);
-
- Bus bus;
- //Reset bus before constructing Service
- BusFactory.setDefaultBus(null);
- URL cxfConfig = getCXFConfiguration(serviceRef.getVfsRoot());
- if (cxfConfig != null)
+ // references
+ final Reference ref = (Reference) obj;
+ final UnifiedServiceRefMetaData serviceRef = unmarshallServiceRef(ref);
+ // class names
+ final String serviceImplClass = this.getServiceClassName(ref, serviceRef);
+ final String targetClassName = this.getTargetClassName(ref, serviceRef,
serviceImplClass);
+ // class instances
+ final Class<?> serviceClass = this.getClass(serviceImplClass);
+ final Class<?> targetClass = this.getClass(targetClassName);
+ // construct service
+ final Bus bus = this.getBus(serviceRef);
+ final Service serviceInstance = this.instantiateService(serviceRef,
serviceClass);
+ if (serviceRef.getHandlerChain() != null)
{
- SpringBusFactory busFactory = new JBossWSSpringBusFactory();
- bus = busFactory.createBus(cxfConfig);
- BusFactory.setThreadDefaultBus(bus);
+ serviceInstance.setHandlerResolver(new HandlerResolverImpl(bus,
serviceRef.getHandlerChain(),
+ serviceInstance.getClass()));
}
- else
+ // construct port
+ final boolean instantiatePort = targetClassName != null &&
!targetClassName.equals(serviceImplClass);
+ if (instantiatePort)
{
- bus = BusFactory.getThreadDefaultBus();
+ final QName portQName = this.getPortQName(targetClassName, serviceImplClass,
serviceRef);
+ final WebServiceFeature[] portFeatures = this.getFeatures(targetClassName,
serviceImplClass, serviceRef);
+
+ return instantiatePort(serviceClass, targetClass, serviceInstance, portQName,
portFeatures);
}
- //Add extension to configure stub properties using the UnifiedServiceRefMetaData
- Configurer configurer = bus.getExtension(Configurer.class);
- bus.setExtension(new ServiceRefStubPropertyConfigurer(serviceRef, configurer),
Configurer.class);
-
- String serviceRefName = serviceRef.getServiceRefName();
- QName serviceQName = serviceRef.getServiceQName();
+ return serviceInstance;
+ }
+ catch (Exception ex)
+ {
+ WSFException.rethrow("Cannot create service", ex);
+ }
- String serviceImplClass = serviceRef.getServiceImplClass();
- if (serviceImplClass == null)
- serviceImplClass =
(String)ref.get(ServiceReferenceable.SERVICE_IMPL_CLASS).getContent();
+ return null;
+ }
- // If the target defaults to javax.xml.ws.Service, use the service as the
target
- if (Service.class.getName().equals(targetClassName))
- targetClassName = serviceImplClass;
+ private Class<?> getClass(final String className) throws ClassNotFoundException
+ {
+ if (className != null)
+ {
+ return Thread.currentThread().getContextClassLoader().loadClass(className);
+ }
- log.debug("getObjectInstance [name=" + serviceRefName +
",service=" + serviceImplClass + ",target=" + targetClassName +
"]");
+ return null;
+ }
- // Load the service class
- ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
- Class serviceClass = ctxLoader.loadClass(serviceImplClass);
- Class targetClass = (targetClassName != null ?
ctxLoader.loadClass(targetClassName) : null);
+ private Bus getBus(final UnifiedServiceRefMetaData serviceRefMD)
+ {
+ final Bus bus;
+ // Always reset bus before constructing Service
+ BusFactory.setDefaultBus(null);
- if (Service.class.isAssignableFrom(serviceClass) == false)
- throw new IllegalArgumentException("WebServiceRef type '" +
serviceClass + "' is not assignable to javax.xml.ws.Service");
+ final URL cxfConfig = this.getCXFConfiguration(serviceRefMD.getVfsRoot());
+ if (cxfConfig != null)
+ {
+ final SpringBusFactory busFactory = new JBossWSSpringBusFactory();
+ bus = busFactory.createBus(cxfConfig);
+ BusFactory.setThreadDefaultBus(bus);
+ }
+ else
+ {
+ bus = BusFactory.getThreadDefaultBus();
+ }
- List<WebServiceFeature> features = new
LinkedList<WebServiceFeature>();
-
- // configure @Addressing feature
- if (serviceRef.isAddressingEnabled()) {
- final boolean required = serviceRef.isAddressingRequired();
- final String refResponses = serviceRef.getAddressingResponses();
- AddressingFeature.Responses responses = AddressingFeature.Responses.ALL;
- if ("ANONYMOUS".equals(refResponses))
- responses = AddressingFeature.Responses.ANONYMOUS;
- if ("NON_ANONYMOUS".equals(refResponses))
- responses = AddressingFeature.Responses.NON_ANONYMOUS;
-
- features.add(new AddressingFeature(true, required, responses));
- }
+ //Add extension to configure stub properties using the UnifiedServiceRefMetaData
+ Configurer configurer = bus.getExtension(Configurer.class);
+ bus.setExtension(new ServiceRefStubPropertyConfigurer(serviceRefMD, configurer),
Configurer.class);
- // configure @MTOM feature
- if (serviceRef.isMtomEnabled()) {
- features.add(new MTOMFeature(true, serviceRef.getMtomThreshold()));
- }
+ return bus;
+ }
- // configure @RespectBinding feature
- if (serviceRef.isRespectBindingEnabled()) {
- features.add(new RespectBindingFeature(true));
+ private String getServiceClassName(final Reference ref, final
UnifiedServiceRefMetaData serviceRefMD)
+ {
+ String serviceClassName = serviceRefMD.getServiceImplClass();
+ if (serviceClassName == null)
+ serviceClassName = (String)
ref.get(ServiceReferenceable.SERVICE_IMPL_CLASS).getContent();
+
+ return serviceClassName;
+ }
+
+ private String getTargetClassName(final Reference ref, final UnifiedServiceRefMetaData
serviceRefMD,
+ final String serviceImplClass)
+ {
+ String targetClassName = serviceRefMD.getServiceRefType();
+ if (targetClassName == null)
+ targetClassName = (String)
ref.get(ServiceReferenceable.TARGET_CLASS_NAME).getContent();
+
+ if (Service.class.getName().equals(targetClassName))
+ targetClassName = serviceImplClass;
+
+ return targetClassName;
+ }
+
+ private Object instantiatePort(final Class<?> serviceClass, final Class<?>
targetClass, final Service target,
+ final QName portQName, final WebServiceFeature[] features) throws
NoSuchMethodException,
+ InstantiationException, IllegalAccessException, InvocationTargetException
+ {
+ Object retVal = null;
+
+ Object port = null;
+ if (serviceClass != Service.class)
+ {
+ for (Method method : serviceClass.getDeclaredMethods())
+ {
+ String methodName = method.getName();
+ Class<?> retType = method.getReturnType();
+ if (methodName.startsWith("get") &&
targetClass.isAssignableFrom(retType))
+ {
+ port = method.invoke(target, new Object[0]);
+ retVal = port;
+ break;
+ }
}
+ }
- // Receives either a javax.xml.ws.Service or a dynamic proxy
- Object target;
- URL wsdlURL = serviceRef.getWsdlLocation();
- WebServiceFeature[] wsFeatures = features.size() == 0 ? null :
features.toArray(new WebServiceFeature[] {});
+ if (port == null)
+ {
+ Method method = getMethodFor(portQName, features, serviceClass);
+ Object[] args = getArgumentsFor(portQName, features, targetClass);
+ port = method.invoke(target, args);
+ retVal = port;
+ }
+
+ return retVal;
+ }
+
+ private Service instantiateService(final UnifiedServiceRefMetaData serviceRefMD, final
Class<?> serviceClass)
+ throws NoSuchMethodException, InstantiationException, IllegalAccessException,
InvocationTargetException
+ {
+ final WebServiceFeature[] features = getFeatures(serviceRefMD);
+ final URL wsdlURL = serviceRefMD.getWsdlLocation();
+ final QName serviceQName = serviceRefMD.getServiceQName();
+
+ Service target = null;
+ if (serviceClass == Service.class)
+ {
// Generic javax.xml.ws.Service
- if (serviceClass == Service.class)
+ if (wsdlURL != null)
{
- if (wsdlURL != null)
+ if (features != null)
{
- if (wsFeatures != null) {
- target = Service.create(wsdlURL, serviceQName, wsFeatures);
- } else {
- target = Service.create(wsdlURL, serviceQName);
- }
+ target = Service.create(wsdlURL, serviceQName, features);
}
else
{
- throw new IllegalArgumentException("Cannot create generic
javax.xml.ws.Service without wsdlLocation: " + serviceRefName);
+ target = Service.create(wsdlURL, serviceQName);
}
}
- // Generated javax.xml.ws.Service subclass
else
{
- if (wsdlURL != null)
+ throw new IllegalArgumentException("Cannot create generic
javax.xml.ws.Service without wsdlLocation: "
+ + serviceRefMD);
+ }
+ }
+ else
+ {
+ // Generated javax.xml.ws.Service subclass
+ if (wsdlURL != null)
+ {
+ if (features != null)
{
- if (wsFeatures != null) {
- Constructor ctor = serviceClass.getConstructor(new Class[] { URL.class,
QName.class, WebServiceFeature[].class });
- target = ctor.newInstance(new Object[] { wsdlURL, serviceQName,
wsFeatures });
- } else {
- Constructor ctor = serviceClass.getConstructor(new Class[] { URL.class,
QName.class });
- target = ctor.newInstance(new Object[] { wsdlURL, serviceQName });
- }
+ Constructor<?> ctor = serviceClass.getConstructor(new Class[]
+ {URL.class, QName.class, WebServiceFeature[].class});
+ target = (Service) ctor.newInstance(new Object[]
+ {wsdlURL, serviceQName, features});
}
else
{
- if (wsFeatures != null) {
- Constructor ctor = serviceClass.getConstructor(new Class[] {
WebServiceFeature[].class });
- target = ctor.newInstance(new Object[] { wsFeatures });
- } else {
- target = (Service)serviceClass.newInstance();
- }
+ Constructor<?> ctor = serviceClass.getConstructor(new Class[]
+ {URL.class, QName.class});
+ target = (Service) ctor.newInstance(new Object[]
+ {wsdlURL, serviceQName});
}
}
-
- if (targetClassName != null && targetClassName.equals(serviceImplClass)
== false)
+ else
{
- try
+ if (features != null)
{
- Object port = null;
- if (serviceClass != Service.class)
- {
- for (Method method : serviceClass.getDeclaredMethods())
- {
- String methodName = method.getName();
- Class retType = method.getReturnType();
- if (methodName.startsWith("get") &&
targetClass.isAssignableFrom(retType))
- {
- port = method.invoke(target, new Object[0]);
- target = port;
- break;
- }
- }
- }
-
- if (port == null)
- {
- Method method = serviceClass.getMethod("getPort", new Class[]
{ Class.class });
- port = method.invoke(target, new Object[] { targetClass });
- target = port;
- }
+ Constructor<?> ctor = serviceClass.getConstructor(new Class[]
+ {WebServiceFeature[].class});
+ target = (Service) ctor.newInstance(new Object[]
+ {features});
}
- catch (InvocationTargetException ex)
+ else
{
- throw ex.getTargetException();
+ target = (Service) serviceClass.newInstance();
}
}
+ }
- if ((serviceRef.getHandlerChain() != null) && (target instanceof
Service))
+ return target;
+ }
+
+ private WebServiceFeature[] getFeatures(final String targetClassName, final String
serviceClassName,
+ final UnifiedServiceRefMetaData serviceRefMD)
+ {
+ if (targetClassName != null && !targetClassName.equals(serviceClassName))
+ {
+ final Collection<UnifiedPortComponentRefMetaData> portComponentRefs =
serviceRefMD.getPortComponentRefs();
+ for (final UnifiedPortComponentRefMetaData portComponentRefMD :
portComponentRefs)
{
- ((Service)target).setHandlerResolver(new HandlerResolverImpl(bus,
serviceRef.getHandlerChain(), target.getClass()));
+ if
(targetClassName.equals(portComponentRefMD.getServiceEndpointInterface()))
+ {
+ return getFeatures(portComponentRefMD);
+ }
}
-
-
- return target;
}
- catch (Throwable ex)
+
+ return null;
+ }
+
+ private QName getPortQName(final String targetClassName, final String
serviceClassName,
+ final UnifiedServiceRefMetaData serviceRefMD)
+ {
+ if (targetClassName != null && !targetClassName.equals(serviceClassName))
{
- WSFException.rethrow("Cannot create service", ex);
- return null;
+ final Collection<UnifiedPortComponentRefMetaData> portComponentRefs =
serviceRefMD.getPortComponentRefs();
+ for (final UnifiedPortComponentRefMetaData portComponentRefMD :
portComponentRefs)
+ {
+ if
(targetClassName.equals(portComponentRefMD.getServiceEndpointInterface()))
+ {
+ return portComponentRefMD.getPortQName();
+ }
+ }
}
+
+ return null;
}
-
- private UnifiedServiceRefMetaData unmarshallServiceRef(Reference ref) throws
ClassNotFoundException, NamingException
+
+ private Method getMethodFor(final QName portQName, final WebServiceFeature[] features,
final Class<?> serviceClass)
+ throws NoSuchMethodException
{
- UnifiedServiceRefMetaData sref;
- RefAddr refAddr = ref.get(ServiceReferenceable.SERVICE_REF_META_DATA);
- ByteArrayInputStream bais = new
ByteArrayInputStream((byte[])refAddr.getContent());
+ if ((portQName == null) && (features == null))
+ return serviceClass.getMethod("getPort", new Class[]
+ {Class.class});
+ if ((portQName != null) && (features == null))
+ return serviceClass.getMethod("getPort", new Class[]
+ {QName.class, Class.class});
+ if ((portQName == null) && (features != null))
+ return serviceClass.getMethod("getPort", new Class[]
+ {Class.class, WebServiceFeature[].class});
+ if ((portQName != null) && (features != null))
+ return serviceClass.getMethod("getPort", new Class[]
+ {QName.class, Class.class, WebServiceFeature[].class});
+
+ throw new IllegalStateException();
+ }
+
+ private Object[] getArgumentsFor(final QName portQName, final WebServiceFeature[]
features,
+ final Class<?> targetClass) throws NoSuchMethodException
+ {
+ if ((portQName == null) && (features == null))
+ return new Object[]
+ {targetClass};
+ if ((portQName != null) && (features == null))
+ return new Object[]
+ {portQName, targetClass};
+ if ((portQName == null) && (features != null))
+ return new Object[]
+ {targetClass, features};
+ if ((portQName != null) && (features != null))
+ return new Object[]
+ {portQName, targetClass, features};
+
+ throw new IllegalStateException();
+ }
+
+ private WebServiceFeature[] getFeatures(final UnifiedServiceRefMetaData serviceRef)
+ {
+ List<WebServiceFeature> features = new
LinkedList<WebServiceFeature>();
+
+ // configure @Addressing feature
+ if (serviceRef.isAddressingEnabled())
+ {
+ final boolean required = serviceRef.isAddressingRequired();
+ final String refResponses = serviceRef.getAddressingResponses();
+ AddressingFeature.Responses responses = AddressingFeature.Responses.ALL;
+ if ("ANONYMOUS".equals(refResponses))
+ responses = AddressingFeature.Responses.ANONYMOUS;
+ if ("NON_ANONYMOUS".equals(refResponses))
+ responses = AddressingFeature.Responses.NON_ANONYMOUS;
+
+ features.add(new AddressingFeature(true, required, responses));
+ }
+
+ // configure @MTOM feature
+ if (serviceRef.isMtomEnabled())
+ {
+ features.add(new MTOMFeature(true, serviceRef.getMtomThreshold()));
+ }
+
+ // configure @RespectBinding feature
+ if (serviceRef.isRespectBindingEnabled())
+ {
+ features.add(new RespectBindingFeature(true));
+ }
+
+ WebServiceFeature[] wsFeatures = features.size() == 0 ? null : features.toArray(new
WebServiceFeature[]
+ {});
+ return wsFeatures;
+ }
+
+ private WebServiceFeature[] getFeatures(final UnifiedPortComponentRefMetaData
portComponentRefMD)
+ {
+ List<WebServiceFeature> features = new
LinkedList<WebServiceFeature>();
+ // configure @Addressing feature
+ if (portComponentRefMD.isAddressingEnabled())
+ {
+ final boolean required = portComponentRefMD.isAddressingRequired();
+ final String refResponses = portComponentRefMD.getAddressingResponses();
+ AddressingFeature.Responses responses = AddressingFeature.Responses.ALL;
+ if ("ANONYMOUS".equals(refResponses))
+ responses = AddressingFeature.Responses.ANONYMOUS;
+ if ("NON_ANONYMOUS".equals(refResponses))
+ responses = AddressingFeature.Responses.NON_ANONYMOUS;
+
+ features.add(new AddressingFeature(true, required, responses));
+ }
+
+ // configure @MTOM feature
+ if (portComponentRefMD.isMtomEnabled())
+ {
+ features.add(new MTOMFeature(true, portComponentRefMD.getMtomThreshold()));
+ }
+
+ // configure @RespectBinding feature
+ if (portComponentRefMD.isRespectBindingEnabled())
+ {
+ features.add(new RespectBindingFeature(true));
+ }
+
+ return features.size() == 0 ? null : features.toArray(new WebServiceFeature[]
+ {});
+ }
+
+ private UnifiedServiceRefMetaData unmarshallServiceRef(final Reference ref) throws
ClassNotFoundException,
+ NamingException
+ {
+ final UnifiedServiceRefMetaData sref;
+ final RefAddr refAddr = ref.get(ServiceReferenceable.SERVICE_REF_META_DATA);
+ final ByteArrayInputStream bais = new ByteArrayInputStream((byte[])
refAddr.getContent());
try
{
ObjectInputStream ois = new ObjectInputStream(bais);
- sref = (UnifiedServiceRefMetaData)ois.readObject();
+ sref = (UnifiedServiceRefMetaData) ois.readObject();
ois.close();
}
catch (IOException e)
@@ -275,33 +450,30 @@
throw new NamingException("Cannot unmarshall service ref meta data, cause:
" + e.toString());
}
- /* Verify it. There is some know coinstraints
- if(sref.getServiceQName() == null)
- throw new IllegalArgumentException("ServiceQName may not be null. " +
- "Specify a service QName in the <service-ref> declaration, or
thorugh the @WebServiceClient annotation.");
- */
-
return sref;
}
-
- public URL getCXFConfiguration(UnifiedVirtualFile vfsRoot)
+
+ private URL getCXFConfiguration(final UnifiedVirtualFile vfsRoot)
{
URL url = null;
try
{
url = vfsRoot.findChild("WEB-INF/jbossws-cxf.xml").toURL();
}
- catch (Exception e) {}
-
+ catch (Exception e)
+ {
+ }
+
if (url == null)
{
try
{
url = vfsRoot.findChild("META-INF/jbossws-cxf.xml").toURL();
}
- catch (Exception e) {}
+ catch (Exception e)
+ {
+ }
}
return url;
}
}
-
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java
===================================================================
---
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java 2010-09-23
08:31:11 UTC (rev 13011)
+++
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceRefBinderJAXWS.java 2010-09-23
08:35:22 UTC (rev 13012)
@@ -106,31 +106,6 @@
}
}
- if (addressingAnnotation != null)
- {
- if (addressingAnnotation.enabled())
- serviceRef.setAddressingEnabled();
-
- if (addressingAnnotation.required())
- serviceRef.setAddressingRequired();
-
- if (addressingAnnotation.responses() == AddressingFeature.Responses.ANONYMOUS)
- serviceRef.setAddressingResponses("ANONYMOUS");
- else if (addressingAnnotation.responses() ==
AddressingFeature.Responses.NON_ANONYMOUS)
- serviceRef.setAddressingResponses("NON_ANONYMOUS");
- else
- serviceRef.setAddressingResponses("ALL");
- }
-
- if ((mtomAnnotation != null) && mtomAnnotation.enabled()) {
- serviceRef.setMtomEnabled();
- serviceRef.setMtomThreshold(mtomAnnotation.threshold());
- }
-
- if ((respectBindingAnnotation != null) &&
respectBindingAnnotation.enabled()) {
- serviceRef.setRespectBindingEnabled();
- }
-
// Use the single @WebServiceRef
if (wsrefList.size() == 1)
{
@@ -252,6 +227,22 @@
}
}
+ if (addressingAnnotation != null)
+ {
+ serviceRef.setAddressingEnabled(addressingAnnotation.enabled());
+ serviceRef.setAddressingRequired(addressingAnnotation.required());
+ serviceRef.setAddressingResponses(addressingAnnotation.responses().toString());
+ }
+
+ if (mtomAnnotation != null) {
+ serviceRef.setMtomEnabled(mtomAnnotation.enabled());
+ serviceRef.setMtomThreshold(mtomAnnotation.threshold());
+ }
+
+ if (respectBindingAnnotation != null) {
+ serviceRef.setRespectBindingEnabled(respectBindingAnnotation.enabled());
+ }
+
// Do not use rebind, the binding should be unique
// [JBWS-1499] - Revisit WebServiceRefHandler JNDI rebind
Referenceable serviceReferenceable = buildServiceReferenceable(serviceImplClass,
targetClassName, serviceRef);
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java
===================================================================
---
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java 2010-09-23
08:31:11 UTC (rev 13011)
+++
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/ServiceReferenceable.java 2010-09-23
08:35:22 UTC (rev 13012)
@@ -86,4 +86,13 @@
}
return baos.toByteArray();
}
+
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("\n").append(getClass().getName());
+ sb.append("\n serviceImplClass=" + serviceImplClass);
+ sb.append("\n targetClassName=" + targetClassName);
+ sb.append("\n serviceRef=" + this.serviceRef);
+ return sb.toString();
+ }
}