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,