[jbossws-commits] JBossWS SVN: r12930 - stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Wed Sep 8 05:59:00 EDT 2010


Author: richard.opalka at jboss.com
Date: 2010-09-08 05:58:59 -0400 (Wed, 08 Sep 2010)
New Revision: 12930

Modified:
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java
   stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactoryJAXWS.java
Log:
[JBWS-3122] implementing @WebServiceRef with @Addressing feature

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java	2010-09-08 09:56:23 UTC (rev 12929)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/NativeServiceRefBinderJAXWS.java	2010-09-08 09:58:59 UTC (rev 12930)
@@ -39,6 +39,8 @@
 import javax.xml.ws.WebServiceClient;
 import javax.xml.ws.WebServiceRef;
 import javax.xml.ws.WebServiceRefs;
+import javax.xml.ws.soap.Addressing;
+import javax.xml.ws.soap.AddressingFeature;
 
 import org.jboss.logging.Logger;
 import org.jboss.util.naming.Util;
@@ -66,11 +68,15 @@
 
       // Build the list of @WebServiceRef relevant annotations
       List<WebServiceRef> wsrefList = new ArrayList<WebServiceRef>();
+      Addressing addressing = null;
 
       if (anElement != null)
       {
          for (Annotation an : anElement.getAnnotations())
          {
+            if (an instanceof Addressing)
+               addressing = (Addressing)an;
+            
             if (an instanceof WebServiceRef)
                wsrefList.add((WebServiceRef)an);
 
@@ -82,6 +88,22 @@
             }
          }
       }
+      
+      if (addressing != null)
+      {
+         if (addressing.enabled())
+            serviceRef.setAddressingEnabled();
+         
+         if (addressing.required())
+            serviceRef.setAddressingRequired();
+         
+         if (addressing.responses() == AddressingFeature.Responses.ANONYMOUS)
+            serviceRef.setAddressingResponses("ANONYMOUS");
+         else if (addressing.responses() == AddressingFeature.Responses.NON_ANONYMOUS)
+            serviceRef.setAddressingResponses("NON_ANONYMOUS");
+         else 
+            serviceRef.setAddressingResponses("ALL");
+      }
 
       // Use the single @WebServiceRef
       if (wsrefList.size() == 1)

Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactoryJAXWS.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactoryJAXWS.java	2010-09-08 09:56:23 UTC (rev 12929)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ServiceObjectFactoryJAXWS.java	2010-09-08 09:58:59 UTC (rev 12930)
@@ -30,6 +30,9 @@
 import javax.naming.*;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.soap.AddressingFeature;
+
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
@@ -112,6 +115,20 @@
 
          // Receives either a javax.xml.ws.Service or a dynamic proxy
          Object target;
+         
+         // configure addressing
+         AddressingFeature addressingFeature = null;
+         if (serviceRef.isAddressingEnabled()) {
+            final boolean enabled = 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;
+            addressingFeature = new AddressingFeature(enabled, required, responses);
+         }
 
          // Get the URL to the wsdl
          URL wsdlURL = serviceRef.getWsdlLocation();
@@ -125,7 +142,11 @@
             {
                if (wsdlURL != null)
                {
-                  target = Service.create(wsdlURL, serviceQName);
+                  if (addressingFeature != null) {
+                     target = Service.create(wsdlURL, serviceQName, new WebServiceFeature[] { addressingFeature });
+                  } else {
+                     target = Service.create(wsdlURL, serviceQName);
+                  }
                }
                else
                {
@@ -137,12 +158,22 @@
             {
                if (wsdlURL != null)
                {
-                  Constructor ctor = serviceClass.getConstructor(new Class[] { URL.class, QName.class });
-                  target = ctor.newInstance(new Object[] { wsdlURL, serviceQName });
+                  if (addressingFeature != null) {
+                     Constructor ctor = serviceClass.getConstructor(new Class[] { URL.class, QName.class, WebServiceFeature[].class });
+                     target = ctor.newInstance(new Object[] { wsdlURL, serviceQName, new WebServiceFeature[] { addressingFeature } });
+                  } else {
+                     Constructor ctor = serviceClass.getConstructor(new Class[] { URL.class, QName.class });
+                     target = ctor.newInstance(new Object[] { wsdlURL, serviceQName });
+                  }
                }
                else
                {
-                  target = (Service)serviceClass.newInstance();
+                  if (addressingFeature != null) {
+                     Constructor ctor = serviceClass.getConstructor(new Class[] { WebServiceFeature[].class });
+                     target = ctor.newInstance(new Object[] { new WebServiceFeature[] { addressingFeature } });
+                  } else {
+                     target = (Service)serviceClass.newInstance();
+                  }
                }
             }
          }



More information about the jbossws-commits mailing list