Author: veithen
Date: Tue May 25 19:25:09 2010
New Revision: 948188

URL: http://svn.apache.org/viewvc?rev=948188&view=rev
Log:
Making some progress with the SOAP/UDP scenario with WS-Addressing based 
dispatching.

Modified:
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
    
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java
    
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
    axis/axis2/java/transports/trunk/src/site/apt/udp.apt

Modified: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java?rev=948188&r1=948187&r2=948188&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java
 Tue May 25 19:25:09 2010
@@ -22,6 +22,7 @@ import javax.xml.namespace.QName;
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisService;
@@ -53,8 +54,23 @@ public abstract class ProtocolEndpoint {
         return service;
     }
 
+    /**
+     * Get the name of the service to which messages received by this endpoint 
are pre-dispatched.
+     * 
+     * @return the name of the service, or <code>null</code> if message are 
not pre-dispatched
+     */
     public final String getServiceName() {
-        return service.getName();
+        return service == null ? null : service.getName();
+    }
+    
+    /**
+     * Get the Axis2 configuration context. This is a convenience method that 
can be used by
+     * subclasses to get the {...@link ConfigurationContext} object from the 
listener.
+     * 
+     * @return the configuration context
+     */
+    protected final ConfigurationContext getConfigurationContext() {
+        return listener.getConfigurationContext();
     }
 
     /**
@@ -93,6 +109,16 @@ public abstract class ProtocolEndpoint {
      */
     public abstract EndpointReference[] getEndpointReferences(AxisService 
service, String ip) throws AxisFault;
 
+    /**
+     * Get a short description of this endpoint suitable for inclusion in log 
messages.
+     * 
+     * @return a short description of the endpoint
+     */
+    // TODO: we should implement this method in all derived transports and 
make it abstract here
+    public String getDescription() {
+        return toString();
+    }
+    
     public MessageContext createMessageContext() throws AxisFault {
         MessageContext msgContext = listener.createMessageContext();
         

Modified: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java?rev=948188&r1=948187&r2=948188&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
 Tue May 25 19:25:09 2010
@@ -70,12 +70,10 @@ public abstract class AbstractDatagramTr
             dispatcher.addEndpoint(endpoint);
         } catch (IOException ex) {
             // TODO: passing endpoint.getService() is not correct because it 
may be null
-            throw new AxisFault("Unable to listen on endpoint "
-                    + endpoint.getEndpointReferences(endpoint.getService(), 
defaultIp)[0], ex);
+            throw new AxisFault("Unable to listen on endpoint " + 
endpoint.getDescription(), ex);
         }
         if (log.isDebugEnabled()) {
-            log.debug("Started listening on endpoint " +
-                    endpoint.getEndpointReferences(endpoint.getService(), 
defaultIp)[0] +
+            log.debug("Started listening on endpoint " + 
endpoint.getDescription() +
                     " [contentType=" + endpoint.getContentType() +
                     "; service=" + endpoint.getServiceName() + "]");
         }

Modified: 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java?rev=948188&r1=948187&r2=948188&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java
 Tue May 25 19:25:09 2010
@@ -44,6 +44,11 @@ public class Endpoint extends DatagramEn
     }
 
     @Override
+    public String getDescription() {
+        return "*:" + port;
+    }
+
+    @Override
     public boolean loadConfiguration(ParameterInclude params) throws AxisFault 
{
         port = ParamUtils.getOptionalParamInt(params, UDPConstants.PORT_KEY, 
-1);
         if (port == -1) {
@@ -63,7 +68,20 @@ public class Endpoint extends DatagramEn
                    throw new AxisFault("Unable to determine the host's IP 
address", ex);
                }
            }
-        return new EndpointReference[] { new EndpointReference("udp://" + ip + 
":" + getPort()
-                + "?contentType=" + getContentType()) };
+           StringBuilder epr = new StringBuilder("udp://");
+           epr.append(ip);
+           epr.append(':');
+           epr.append(getPort());
+           // If messages are predispatched to a service, then WS-Addressing 
will be used and we
+           // need to include the service path in the EPR.
+           if (getService() == null) {
+               epr.append('/');
+               epr.append(getConfigurationContext().getServiceContextPath());
+            epr.append('/');
+               epr.append(service.getName());
+           }
+           epr.append("?contentType=");
+           epr.append(getContentType());
+        return new EndpointReference[] { new EndpointReference(epr.toString()) 
};
     }
 }

Modified: 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java?rev=948188&r1=948187&r2=948188&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
 Tue May 25 19:25:09 2010
@@ -73,6 +73,9 @@ public class UDPSender extends AbstractT
         byte[] payload = messageFormatter.getBytes(msgContext, format);
         try {
             DatagramSocket socket = new DatagramSocket();
+            if (log.isDebugEnabled()) {
+                log.debug("Sending " + payload.length + " bytes to " + 
udpOutInfo.getAddress());
+            }
             try {
                 socket.send(new DatagramPacket(payload, payload.length, 
udpOutInfo.getAddress()));
                 if (!msgContext.getOptions().isUseSeparateListener() &&

Modified: axis/axis2/java/transports/trunk/src/site/apt/udp.apt
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/src/site/apt/udp.apt?rev=948188&r1=948187&r2=948188&view=diff
==============================================================================
--- axis/axis2/java/transports/trunk/src/site/apt/udp.apt (original)
+++ axis/axis2/java/transports/trunk/src/site/apt/udp.apt Tue May 25 19:25:09 
2010
@@ -57,9 +57,17 @@ JMS Transport
   [<<<transport.udp.maxPacketSize>>> (optional, defaults to 1024)]
   The maximum UDP packet size.
 
-** {Examples}
+* {Transport sender}
 
-*** {Enabling SOAP over UDP at the transport level}
+  The UDP transport sender can be enabled in <<<axis2.xml>>> using the 
following declaration:
+
++----------------------------+
+<transportSender name="udp" class="org.apache.axis2.transport.udp.UDPSender"/>
++----------------------------+
+
+* {Examples}
+
+** {Enabling SOAP over UDP at the transport level}
 
   The following declaration in <<<axis2.xml>>> enables SOAP over UDP on port 
3333 and
   allows all services (for which UDP is in the list of exposed transports) to 
receive
@@ -79,3 +87,33 @@ JMS Transport
 +----------------------------+
 <module ref="addressing"/>
 +----------------------------+
+
+  With the configuration shown above, the UDP transport would generate 
bindings with the
+  following EPR:
+
++----------------------------+
+udp://localhost:3333/axis2/services/Version?contentType=text/xml
++----------------------------+
+
+  The following example shows a message that can be sent to the Version 
service over UDP:
+
++----------------------------+
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
+                   xmlns:wsa="http://www.w3.org/2005/08/addressing";>
+    <SOAP-ENV:Header>
+        <wsa:MessageID>1234</wsa:MessageID>
+        
<wsa:To>udp://localhost:3333/axis2/services/Version?contentType=text/xml</wsa:To>
+        <wsa:Action>urn:getVersion</wsa:Action>
+    </SOAP-ENV:Header>
+    <SOAP-ENV:Body>
+    </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
++----------------------------+
+
+  On most Linux/Unix systems (including Mac OS X), the <<<nc>>> utility is 
available to send
+  UDP messages and can be used to test the transport. To do this, save the 
message into
+  <<<test-message.xml>>> and execute the following command:
+
++----------------------------+
+nc -u 127.0.0.1 3333 < test-message.xml
++----------------------------+


Reply via email to