Author: veithen
Date: Mon May 24 16:08:04 2010
New Revision: 947696

URL: http://svn.apache.org/viewvc?rev=947696&view=rev
Log:
WSCOMMONS-543: Decouple org.apache.axis2.transport.base.datagram from 
SocketAddress so that it's initial design is preserved.

Modified:
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramDispatcherCallback.java
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramOutTransportInfo.java
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/ProcessPacketTask.java
    
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
    
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPOutTransportInfo.java
    
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java

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=947696&r1=947695&r2=947696&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
 Mon May 24 16:08:04 2010
@@ -20,7 +20,6 @@ package org.apache.axis2.transport.base.
 
 import java.io.IOException;
 import java.net.SocketException;
-import java.net.SocketAddress;
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.transport.base.AbstractTransportListenerEx;
@@ -35,11 +34,11 @@ public abstract class AbstractDatagramTr
     protected void doInit() throws AxisFault {
         DatagramDispatcherCallback callback = new DatagramDispatcherCallback() 
{
 
-            public void receive(SocketAddress address,
-                                DatagramEndpoint endpoint,
+            public void receive(DatagramEndpoint endpoint,
                                 byte[] data,
-                                int length) {
-                workerPool.execute(new ProcessPacketTask(address, endpoint, 
data, length));
+                                int length,
+                                DatagramOutTransportInfo outInfo) {
+                workerPool.execute(new ProcessPacketTask(endpoint, data, 
length, outInfo));
             }
         };
 

Modified: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramDispatcherCallback.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramDispatcherCallback.java?rev=947696&r1=947695&r2=947696&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramDispatcherCallback.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramDispatcherCallback.java
 Mon May 24 16:08:04 2010
@@ -18,12 +18,22 @@
  */
 package org.apache.axis2.transport.base.datagram;
 
-import java.nio.channels.DatagramChannel;
-import java.net.SocketAddress;
-
 public interface DatagramDispatcherCallback {
-    void receive(SocketAddress address,
-                 DatagramEndpoint endpoint,
+    /**
+     * Receive a message and inject it into the Axis2 engine.
+     * 
+     * @param endpoint
+     *            the endpoint that received the message
+     * @param data
+     *            the data of the message
+     * @param length
+     *            the length of the message
+     * @param outInfo
+     *            The out transport information that should be used to send 
back a response. This
+     *            should only be set by transports that support an explicit 
back channel.
+     */
+    void receive(DatagramEndpoint endpoint,
                  byte[] data,
-                 int length);
+                 int length,
+                 DatagramOutTransportInfo outInfo);
 }

Modified: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramOutTransportInfo.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramOutTransportInfo.java?rev=947696&r1=947695&r2=947696&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramOutTransportInfo.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramOutTransportInfo.java
 Mon May 24 16:08:04 2010
@@ -18,21 +18,8 @@ package org.apache.axis2.transport.base.
 
 import org.apache.axis2.transport.OutTransportInfo;
 
-import java.nio.channels.DatagramChannel;
-import java.net.SocketAddress;
-
 public class DatagramOutTransportInfo implements OutTransportInfo {
-    //out transport for back chanel
-    protected SocketAddress sourceAddress;
-    protected String contentType;
-
-    public SocketAddress getSourceAddress() {
-        return sourceAddress;
-    }
-
-    public void setSourceAddress(SocketAddress sourceAddress) {
-        this.sourceAddress = sourceAddress;
-    }
+    private String contentType;
 
     public String getContentType() {
         return contentType;

Modified: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/ProcessPacketTask.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/ProcessPacketTask.java?rev=947696&r1=947695&r2=947696&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/ProcessPacketTask.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/ProcessPacketTask.java
 Mon May 24 16:08:04 2010
@@ -20,8 +20,6 @@ package org.apache.axis2.transport.base.
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.nio.channels.DatagramChannel;
-import java.net.SocketAddress;
 
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axis2.context.MessageContext;
@@ -45,19 +43,16 @@ public class ProcessPacketTask implement
     private final int length;
 
     //back channel data
-    private DatagramChannel datagramChannel;
-    private SocketAddress address;
+    private DatagramOutTransportInfo outInfo;
     
-    public ProcessPacketTask(SocketAddress address,
-                             DatagramEndpoint endpoint,
+    public ProcessPacketTask(DatagramEndpoint endpoint,
                              byte[] data,
-                             int length) {
+                             int length,
+                             DatagramOutTransportInfo outInfo) {
         this.endpoint = endpoint;
         this.data = data;
         this.length = length;
-
-        this.datagramChannel = datagramChannel;
-        this.address = address;
+        this.outInfo = outInfo;
     }
     
     public void run() {
@@ -68,12 +63,12 @@ public class ProcessPacketTask implement
             SOAPEnvelope envelope = 
TransportUtils.createSOAPMessage(msgContext, inputStream, 
endpoint.getContentType());
             msgContext.setEnvelope(envelope);
 
-            //create and out transport info object
-            DatagramOutTransportInfo datagramOutTransportInfo = new 
DatagramOutTransportInfo();
-            datagramOutTransportInfo.setContentType(endpoint.getContentType());
-            datagramOutTransportInfo.setSourceAddress(address);
-
-            msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, 
datagramOutTransportInfo);
+            if (outInfo != null) {
+                if (outInfo.getContentType() == null) {
+                    outInfo.setContentType(endpoint.getContentType());
+                }
+                msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, outInfo);
+            }
 
             AxisEngine.receive(msgContext);
             metrics.incrementMessagesReceived();

Modified: 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java?rev=947696&r1=947695&r2=947696&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
 Mon May 24 16:08:04 2010
@@ -20,7 +20,6 @@ package org.apache.axis2.transport.udp;
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
-import java.net.SocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.channels.DatagramChannel;
 import java.nio.channels.SelectionKey;
@@ -249,12 +248,12 @@ public class IODispatcher implements Dat
         try {
             byte[] data = new byte[endpoint.getMaxPacketSize()];
             ByteBuffer buffer = ByteBuffer.wrap(data);
-            SocketAddress address = channel.receive(buffer);
+            InetSocketAddress address = 
(InetSocketAddress)channel.receive(buffer);
             int length = buffer.position();
             if (log.isDebugEnabled()) {
                 log.debug("Received packet from " + address + " with length " 
+ length);
             }
-            callback.receive(address, endpoint, data, length);
+            callback.receive(endpoint, data, length, new 
UDPOutTransportInfo(address));
         } catch (IOException ex) {
             endpoint.getMetrics().incrementFaultsReceiving();
             log.error("Error receiving UDP packet", ex);

Modified: 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPOutTransportInfo.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPOutTransportInfo.java?rev=947696&r1=947695&r2=947696&view=diff
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPOutTransportInfo.java
 (original)
+++ 
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPOutTransportInfo.java
 Mon May 24 16:08:04 2010
@@ -18,19 +18,18 @@
  */
 package org.apache.axis2.transport.udp;
 
+import java.net.InetSocketAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
 
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.transport.OutTransportInfo;
 import org.apache.axis2.transport.base.datagram.DatagramOutTransportInfo;
 
 /**
  * Holder of information to send an outgoing message to a UDP destination.
  */
 public class UDPOutTransportInfo extends DatagramOutTransportInfo {
-    private String host;
-    private int port;
+    private InetSocketAddress address;
 
     public UDPOutTransportInfo(String eprString) throws AxisFault {
         URI epr;
@@ -45,24 +44,19 @@ public class UDPOutTransportInfo extends
         if (!params.startsWith("contentType=")) {
             throw new AxisFault("Invalid endpoint reference: no content type");
         }
-        host = epr.getHost();
-        port = epr.getPort();
-        contentType = params.substring(12);
+        address = new InetSocketAddress(epr.getHost(), epr.getPort());
+        setContentType(params.substring(12));
     }
-
-    public String getHost() {
-        return host;
-    }
-
-    public void setHost(String host) {
-        this.host = host;
+    
+    public UDPOutTransportInfo(InetSocketAddress address) {
+        this.address = address;
     }
 
-    public int getPort() {
-        return port;
+    public InetSocketAddress getAddress() {
+        return address;
     }
 
-    public void setPort(int port) {
-        this.port = port;
+    public void setAddress(InetSocketAddress address) {
+        this.address = address;
     }
 }

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=947696&r1=947695&r2=947696&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
 Mon May 24 16:08:04 2010
@@ -23,8 +23,6 @@ import java.io.InputStream;
 import java.io.ByteArrayInputStream;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.nio.ByteBuffer;
 
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.soap.SOAPEnvelope;
@@ -39,7 +37,6 @@ import org.apache.axis2.transport.OutTra
 import org.apache.axis2.transport.TransportUtils;
 import org.apache.axis2.transport.base.AbstractTransportSender;
 import org.apache.axis2.transport.base.BaseUtils;
-import org.apache.axis2.transport.base.datagram.DatagramOutTransportInfo;
 import org.apache.commons.logging.LogFactory;
 
 import javax.xml.stream.XMLStreamException;
@@ -63,55 +60,33 @@ public class UDPSender extends AbstractT
     @Override
     public void sendMessage(MessageContext msgContext, String targetEPR,
                             OutTransportInfo outTransportInfo) throws 
AxisFault {
+        UDPOutTransportInfo udpOutInfo;
         if ((targetEPR == null) && (outTransportInfo != null)) {
             // this can happen only at the server side and send the message 
using back chanel
-            DatagramOutTransportInfo datagramOutTransportInfo =
-                    (DatagramOutTransportInfo) outTransportInfo;
-            MessageFormatter messageFormatter = 
TransportUtils.getMessageFormatter(msgContext);
-            OMOutputFormat format = BaseUtils.getOMOutputFormat(msgContext);
-            format.setContentType(datagramOutTransportInfo.getContentType());
-            byte[] payload = messageFormatter.getBytes(msgContext, format);
-
-            ByteBuffer byteBuffer = ByteBuffer.allocate(payload.length);
-            byteBuffer.put(payload);
-
-            DatagramSocket socket;
-            try {
-                socket = new DatagramSocket();
-                try {
-                    socket.send(new DatagramPacket(payload, payload.length,
-                            datagramOutTransportInfo.getSourceAddress()));
-                } finally {
-                    socket.close();
-                }
-            } catch (IOException e) {
-                throw new AxisFault("Unable to send packet", e);
-            }
-
+            udpOutInfo = (UDPOutTransportInfo) outTransportInfo;
         } else {
-            UDPOutTransportInfo udpOutInfo = new 
UDPOutTransportInfo(targetEPR);
-            MessageFormatter messageFormatter = 
TransportUtils.getMessageFormatter(msgContext);
-            OMOutputFormat format = BaseUtils.getOMOutputFormat(msgContext);
-            format.setContentType(udpOutInfo.getContentType());
-            byte[] payload = messageFormatter.getBytes(msgContext, format);
+            udpOutInfo = new UDPOutTransportInfo(targetEPR);
+        }
+        MessageFormatter messageFormatter = 
TransportUtils.getMessageFormatter(msgContext);
+        OMOutputFormat format = BaseUtils.getOMOutputFormat(msgContext);
+        format.setContentType(udpOutInfo.getContentType());
+        byte[] payload = messageFormatter.getBytes(msgContext, format);
+        try {
+            DatagramSocket socket = new DatagramSocket();
             try {
-                DatagramSocket socket = new DatagramSocket();
-                try {
-                    socket.send(new DatagramPacket(payload, payload.length,
-                            InetAddress.getByName(udpOutInfo.getHost()), 
udpOutInfo.getPort()));
-                    if (!msgContext.getOptions().isUseSeparateListener() &&
-                            !msgContext.isServerSide()){
-                        waitForReply(msgContext, socket, 
udpOutInfo.getContentType());
-                    }
-                }
-                finally {
-                    socket.close();
+                socket.send(new DatagramPacket(payload, payload.length, 
udpOutInfo.getAddress()));
+                if (!msgContext.getOptions().isUseSeparateListener() &&
+                        !msgContext.isServerSide()){
+                    waitForReply(msgContext, socket, 
udpOutInfo.getContentType());
                 }
             }
-            catch (IOException ex) {
-                throw new AxisFault("Unable to send packet", ex);
+            finally {
+                socket.close();
             }
         }
+        catch (IOException ex) {
+            throw new AxisFault("Unable to send packet", ex);
+        }
     }
 
     private void waitForReply(MessageContext messageContext, DatagramSocket 
datagramSocket,


Reply via email to