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,