Missing attribute from schema; more namespace parser tests

This commit is contained in:
Gary Russell
2010-03-06 20:39:04 +00:00
parent 97a36d127d
commit 5d1325ae90
11 changed files with 445 additions and 16 deletions

View File

@@ -38,8 +38,6 @@ public abstract class AbstractInternetProtocolReceivingChannelAdapter
protected volatile int soReceiveBufferSize = -1;
protected volatile int soSendBufferSize = -1;
protected volatile int receiveBufferSize = 2048;
protected volatile boolean active;
@@ -72,10 +70,9 @@ public abstract class AbstractInternetProtocolReceivingChannelAdapter
}
/* (non-Javadoc)
* @see org.springframework.integration.ip.SocketOptions#setSoSendBufferSize(int)
* @see org.springframework.integration.ip.CommonSocketOptions#setSoSendBufferSize(int)
*/
public void setSoSendBufferSize(int soSendBufferSize) {
this.soSendBufferSize = soSendBufferSize;
}
public void setReceiveBufferSize(int receiveBufferSize) {

View File

@@ -41,8 +41,6 @@ public abstract class AbstractInternetProtocolSendingMessageHandler implements M
protected final int port;
protected int soReceiveBufferSize = -1;
protected volatile int soSendBufferSize = -1;
protected volatile int soTimeout = -1;
@@ -71,7 +69,6 @@ public abstract class AbstractInternetProtocolSendingMessageHandler implements M
* @param size
*/
public void setSoReceiveBufferSize(int size) {
this.soReceiveBufferSize = size;
}
/**

View File

@@ -82,7 +82,7 @@ public abstract class IpAdapterParserUtils {
static final String SO_LINGER = "so-linger";
static final String SO_TCP_NODELAY = "so-tcp-nodelay";
static final String SO_TCP_NODELAY = "so-tcp-no-delay";
static final String SO_TRAFFIC_CLASS = "so-traffic-class";

View File

@@ -17,8 +17,6 @@ package org.springframework.integration.ip.tcp;
import java.net.Socket;
import java.net.SocketException;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import org.springframework.integration.adapter.MessageMappingException;
import org.springframework.integration.core.Message;

View File

@@ -81,7 +81,7 @@ public class TcpNioSendingMessageHandler extends
* @throws ClassNotFoundException
*/
@SuppressWarnings("unchecked")
public void setCustomSocketWriteriClassName(
public void setCustomSocketWriterClassName(
String customSocketWriterClassName) throws ClassNotFoundException {
this.customSocketWriter = (Class<NioSocketWriter>) Class
.forName(customSocketWriterClassName);

View File

@@ -51,6 +51,8 @@ public class UnicastReceivingChannelAdapter extends AbstractInternetProtocolRece
protected volatile int poolSize = -1;
protected volatile int soSendBufferSize = -1;
private static Pattern addressPattern = Pattern.compile("([^:]*):([0-9]*)");
@@ -206,4 +208,8 @@ public class UnicastReceivingChannelAdapter extends AbstractInternetProtocolRece
}
}
public void setSoSendBufferSize(int soSendBufferSize) {
this.soSendBufferSize = soSendBufferSize;
}
}

View File

@@ -76,6 +76,8 @@ public class UnicastSendingMessageHandler extends
protected volatile Exception fatalException;
protected int soReceiveBufferSize = -1;
/**
* Basic constructor; no reliability; no acknowledgment.
@@ -295,4 +297,12 @@ public class UnicastSendingMessageHandler extends
}
}
/**
* @see {@link Socket#setReceiveBufferSize(int)} and {@link DatagramSocket#setReceiveBufferSize(int)}
* @param size
*/
public void setSoReceiveBufferSize(int size) {
this.soReceiveBufferSize = size;
}
}

View File

@@ -65,10 +65,11 @@ the custom message format. See java docs for TcpNetReceivingChannelAdapter and T
<xsd:attribute name="ack-host" type="xsd:string" />
<xsd:attribute name="ack-port" type="xsd:string" />
<xsd:attribute name="ack-timeout" type="xsd:string" />
<xsd:attribute name="min-acks-for-success" type="xsd:string" />
<xsd:attribute name="time-to-live" type="xsd:string" />
<xsd:attribute name="custom-socket-writer-class-name" type="xsd:string" />
<xsd:attribute name="so-linger" type="xsd:string" />
<xsd:attribute name="so-tcp-nodelay" type="xsd:boolean" />
<xsd:attribute name="so-tcp-no-delay" type="xsd:string" />
<xsd:attribute name="so-traffic-class" type="xsd:string" />
</xsd:extension>
</xsd:complexContent>
@@ -97,7 +98,7 @@ the custom message format. See java docs for TcpNetReceivingChannelAdapter and T
<xsd:attribute name="so-timeout" type="xsd:string" />
<xsd:attribute name="check-length" type="xsd:string" />
<xsd:attribute name="multicast" type="xsd:string" />
<xsd:attribute name="using-nio" type="xsd:boolean" />
<xsd:attribute name="using-nio" type="xsd:string" />
<xsd:attribute name="message-format">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
@@ -108,8 +109,8 @@ the custom message format. See java docs for TcpNetReceivingChannelAdapter and T
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="using-direct-buffers" type="xsd:boolean" />
<xsd:attribute name="so-keep-alive" type="xsd:boolean" />
<xsd:attribute name="using-direct-buffers" type="xsd:string" />
<xsd:attribute name="so-keep-alive" type="xsd:string" />
</xsd:complexType>

View File

@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:ip="http://www.springframework.org/schema/integration/ip"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/ip http://www.springframework.org/schema/integration/ip/spring-integration-ip.xsd">
<bean id="tcpIpUtils" class="org.springframework.integration.ip.util.SocketUtils" />
<int:channel id="udpChannel" />
<int:channel id="tcpChannel" />
<ip:inbound-channel-adapter id="testInUdp"
channel="udpChannel"
check-length="true"
message-format="stx-etx"
multicast="false"
pool-size="27"
port="#{tcpIpUtils.findAvailableUdpSocket(5000)}"
protocol="udp"
receive-buffer-size="29"
so-keep-alive="true"
so-receive-buffer-size="30"
so-send-buffer-size="31"
so-timeout="32"
/>
<ip:inbound-channel-adapter id="testInUdpMulticast"
channel="udpChannel"
check-length="true"
message-format="stx-etx"
multicast="true"
multicast-address="225.6.7.8"
pool-size="27"
port="#{tcpIpUtils.findAvailableUdpSocket(5100)}"
protocol="udp"
receive-buffer-size="29"
so-keep-alive="true"
so-receive-buffer-size="30"
so-send-buffer-size="31"
so-timeout="32"
/>
<ip:inbound-channel-adapter id="testInTcpNio"
channel="tcpChannel"
check-length="true"
custom-socket-reader-class-name="org.springframework.integration.ip.tcp.CustomNioSocketReader"
message-format="stx-etx"
pool-size="27"
port="#{tcpIpUtils.findAvailableServerSocket(5200)}"
protocol="tcp"
receive-buffer-size="29"
so-keep-alive="true"
so-receive-buffer-size="30"
so-timeout="32"
using-direct-buffers="false"
using-nio="true"
/>
<ip:inbound-channel-adapter id="testInTcpNioDirect"
channel="tcpChannel"
check-length="true"
custom-socket-reader-class-name="org.springframework.integration.ip.tcp.CustomNioSocketReader"
message-format="stx-etx"
pool-size="27"
port="#{tcpIpUtils.findAvailableServerSocket(5300)}"
protocol="tcp"
receive-buffer-size="29"
so-keep-alive="true"
so-receive-buffer-size="30"
so-timeout="32"
using-direct-buffers="true"
using-nio="true"
/>
<ip:inbound-channel-adapter id="testInTcpNet"
channel="tcpChannel"
check-length="true"
custom-socket-reader-class-name="org.springframework.integration.ip.tcp.CustomNetSocketReader"
message-format="stx-etx"
pool-size="27"
port="#{tcpIpUtils.findAvailableServerSocket(5400)}"
protocol="tcp"
receive-buffer-size="29"
so-keep-alive="true"
so-receive-buffer-size="30"
so-timeout="32"
/>
<ip:outbound-channel-adapter id="testOutUdp"
ack-host="somehost"
ack-port="#{tcpIpUtils.findAvailableUdpSocket(7000)}"
ack-timeout="51"
acknowledge="true"
channel="udpChannel"
check-length="true"
host="localhost"
port="#{tcpIpUtils.findAvailableUdpSocket(6000)}"
protocol="udp"
multicast="false"
so-receive-buffer-size="52"
so-send-buffer-size="53"
so-timeout="54"
/>
<ip:outbound-channel-adapter id="testOutUdpiMulticast"
ack-host="somehost"
ack-port="#{tcpIpUtils.findAvailableUdpSocket(7100)}"
ack-timeout="51"
acknowledge="true"
channel="udpChannel"
check-length="true"
host="225.6.7.8"
port="#{tcpIpUtils.findAvailableUdpSocket(6100)}"
protocol="udp"
multicast="true"
min-acks-for-success="2"
so-receive-buffer-size="52"
so-send-buffer-size="53"
so-timeout="54"
time-to-live="55"
/>
<ip:outbound-channel-adapter id="testOutTcpNio"
channel="tcpChannel"
host="localhost"
port="#{tcpIpUtils.findAvailableServerSocket(6200)}"
protocol="tcp"
so-send-buffer-size="53"
so-timeout="54"
custom-socket-writer-class-name="org.springframework.integration.ip.tcp.CustomNioSocketWriter"
message-format="stx-etx"
so-keep-alive="true"
so-linger="3"
so-tcp-no-delay="true"
so-traffic-class="27"
using-nio="true"
using-direct-buffers="false"
/>
<ip:outbound-channel-adapter id="testOutTcpNioDirect"
channel="tcpChannel"
host="localhost"
port="#{tcpIpUtils.findAvailableServerSocket(6300)}"
protocol="tcp"
so-send-buffer-size="53"
so-timeout="54"
custom-socket-writer-class-name="org.springframework.integration.ip.tcp.CustomNioSocketWriter"
message-format="stx-etx"
so-keep-alive="true"
so-linger="3"
so-tcp-no-delay="true"
so-traffic-class="27"
using-nio="true"
using-direct-buffers="true"
/>
<ip:outbound-channel-adapter id="testOutTcpNet"
channel="tcpChannel"
host="localhost"
port="#{tcpIpUtils.findAvailableServerSocket(6400)}"
protocol="tcp"
so-send-buffer-size="53"
so-timeout="54"
custom-socket-writer-class-name="org.springframework.integration.ip.tcp.CustomNetSocketWriter"
message-format="stx-etx"
so-keep-alive="true"
so-linger="3"
so-tcp-no-delay="true"
so-traffic-class="27"
/>
</beans>

View File

@@ -0,0 +1,242 @@
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.ip.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.ip.tcp.CustomNetSocketReader;
import org.springframework.integration.ip.tcp.CustomNetSocketWriter;
import org.springframework.integration.ip.tcp.CustomNioSocketReader;
import org.springframework.integration.ip.tcp.CustomNioSocketWriter;
import org.springframework.integration.ip.tcp.MessageFormats;
import org.springframework.integration.ip.tcp.TcpNetReceivingChannelAdapter;
import org.springframework.integration.ip.tcp.TcpNetSendingMessageHandler;
import org.springframework.integration.ip.tcp.TcpNioReceivingChannelAdapter;
import org.springframework.integration.ip.tcp.TcpNioSendingMessageHandler;
import org.springframework.integration.ip.udp.DatagramPacketMessageMapper;
import org.springframework.integration.ip.udp.MulticastReceivingChannelAdapter;
import org.springframework.integration.ip.udp.MulticastSendingMessageHandler;
import org.springframework.integration.ip.udp.UnicastReceivingChannelAdapter;
import org.springframework.integration.ip.udp.UnicastSendingMessageHandler;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Gary Russell
*
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class ParserUnitTests {
@Autowired
@Qualifier(value="testInUdp")
UnicastReceivingChannelAdapter udpIn;
@Autowired
@Qualifier(value="testInUdpMulticast")
MulticastReceivingChannelAdapter udpInMulticast;
@Autowired
@Qualifier(value="testInTcpNio")
TcpNioReceivingChannelAdapter tcpInNio;
@Autowired
@Qualifier(value="testInTcpNioDirect")
TcpNioReceivingChannelAdapter tcpInNioDirect;
@Autowired
@Qualifier(value="testInTcpNet")
TcpNetReceivingChannelAdapter tcpInNet;
@Autowired
@Qualifier(value="org.springframework.integration.ip.udp.UnicastSendingMessageHandler#0")
UnicastSendingMessageHandler udpOut;
@Autowired
@Qualifier(value="org.springframework.integration.ip.udp.MulticastSendingMessageHandler#0")
MulticastSendingMessageHandler udpOutMulticast;
@Autowired
@Qualifier(value="org.springframework.integration.ip.tcp.TcpNioSendingMessageHandler#0")
TcpNioSendingMessageHandler tcpOutNio;
@Autowired
@Qualifier(value="org.springframework.integration.ip.tcp.TcpNioSendingMessageHandler#1")
TcpNioSendingMessageHandler tcpOutNioDirect;
@Autowired
@Qualifier(value="org.springframework.integration.ip.tcp.TcpNetSendingMessageHandler#0")
TcpNetSendingMessageHandler tcpOutNet;
@Test
public void testInUdp() {
DirectFieldAccessor dfa = new DirectFieldAccessor(udpIn);
assertTrue(udpIn.getPort() >= 5000);
assertEquals(27, dfa.getPropertyValue("poolSize"));
assertEquals(29, dfa.getPropertyValue("receiveBufferSize"));
assertEquals(30, dfa.getPropertyValue("soReceiveBufferSize"));
assertEquals(31, dfa.getPropertyValue("soSendBufferSize"));
assertEquals(32, dfa.getPropertyValue("soTimeout"));
}
@Test
public void testInUdpMulticast() {
DirectFieldAccessor dfa = new DirectFieldAccessor(udpInMulticast);
assertTrue(udpInMulticast.getPort() >= 5100);
assertEquals("225.6.7.8", dfa.getPropertyValue("group"));
assertEquals(27, dfa.getPropertyValue("poolSize"));
assertEquals(29, dfa.getPropertyValue("receiveBufferSize"));
assertEquals(30, dfa.getPropertyValue("soReceiveBufferSize"));
assertEquals(31, dfa.getPropertyValue("soSendBufferSize"));
assertEquals(32, dfa.getPropertyValue("soTimeout"));
}
@Test
public void testInTcpNio() {
DirectFieldAccessor dfa = new DirectFieldAccessor(tcpInNio);
assertTrue(tcpInNio.getPort() >= 5200);
assertEquals(CustomNioSocketReader.class, dfa.getPropertyValue("customSocketReader"));
assertEquals(false, dfa.getPropertyValue("usingDirectBuffers"));
assertEquals(MessageFormats.FORMAT_STX_ETX, dfa.getPropertyValue("messageFormat"));
assertEquals(27, dfa.getPropertyValue("poolSize"));
assertEquals(true, dfa.getPropertyValue("soKeepAlive"));
assertEquals(29, dfa.getPropertyValue("receiveBufferSize"));
assertEquals(30, dfa.getPropertyValue("soReceiveBufferSize"));
assertEquals(32, dfa.getPropertyValue("soTimeout"));
}
@Test
public void testInTcpNioDirect() {
DirectFieldAccessor dfa = new DirectFieldAccessor(tcpInNioDirect);
assertTrue(tcpInNioDirect.getPort() >= 5300);
assertEquals(CustomNioSocketReader.class, dfa.getPropertyValue("customSocketReader"));
assertEquals(true, dfa.getPropertyValue("usingDirectBuffers"));
assertEquals(MessageFormats.FORMAT_STX_ETX, dfa.getPropertyValue("messageFormat"));
assertEquals(27, dfa.getPropertyValue("poolSize"));
assertEquals(true, dfa.getPropertyValue("soKeepAlive"));
assertEquals(29, dfa.getPropertyValue("receiveBufferSize"));
assertEquals(30, dfa.getPropertyValue("soReceiveBufferSize"));
assertEquals(32, dfa.getPropertyValue("soTimeout"));
}
@Test
public void testInTcpNet() {
DirectFieldAccessor dfa = new DirectFieldAccessor(tcpInNet);
assertTrue(tcpInNet.getPort() >= 5400);
assertEquals(CustomNetSocketReader.class, dfa.getPropertyValue("customSocketReader"));
assertEquals(MessageFormats.FORMAT_STX_ETX, dfa.getPropertyValue("messageFormat"));
assertEquals(27, dfa.getPropertyValue("poolSize"));
assertEquals(true, dfa.getPropertyValue("soKeepAlive"));
assertEquals(29, dfa.getPropertyValue("receiveBufferSize"));
assertEquals(30, dfa.getPropertyValue("soReceiveBufferSize"));
assertEquals(32, dfa.getPropertyValue("soTimeout"));
}
@Test
public void testOutUdp() {
DirectFieldAccessor dfa = new DirectFieldAccessor(udpOut);
assertTrue(udpOut.getPort() >= 6000);
assertEquals("localhost", dfa.getPropertyValue("host"));
int ackPort = (Integer) dfa.getPropertyValue("ackPort");
assertTrue("Expected ackPort >= 7000 was:" + ackPort, ackPort >= 7000);
DatagramPacketMessageMapper mapper = (DatagramPacketMessageMapper) dfa
.getPropertyValue("mapper");
String ackAddress = (String) new DirectFieldAccessor(mapper)
.getPropertyValue("ackAddress");
assertEquals("somehost:" + ackPort, ackAddress);
assertEquals(51, dfa.getPropertyValue("ackTimeout"));
assertEquals(true, dfa.getPropertyValue("waitForAck"));
assertEquals(52, dfa.getPropertyValue("soReceiveBufferSize"));
assertEquals(53, dfa.getPropertyValue("soSendBufferSize"));
assertEquals(54, dfa.getPropertyValue("soTimeout"));
}
@Test
public void testOutUdpMulticast() {
DirectFieldAccessor dfa = new DirectFieldAccessor(udpOutMulticast);
assertTrue(udpOutMulticast.getPort() >= 6100);
assertEquals("225.6.7.8", dfa.getPropertyValue("host"));
int ackPort = (Integer) dfa.getPropertyValue("ackPort");
assertTrue("Expected ackPort >= 7100 was:" + ackPort, ackPort >= 7100);
DatagramPacketMessageMapper mapper = (DatagramPacketMessageMapper) dfa
.getPropertyValue("mapper");
String ackAddress = (String) new DirectFieldAccessor(mapper)
.getPropertyValue("ackAddress");
assertEquals("somehost:" + ackPort, ackAddress);
assertEquals(51, dfa.getPropertyValue("ackTimeout"));
assertEquals(true, dfa.getPropertyValue("waitForAck"));
assertEquals(52, dfa.getPropertyValue("soReceiveBufferSize"));
assertEquals(53, dfa.getPropertyValue("soSendBufferSize"));
assertEquals(54, dfa.getPropertyValue("soTimeout"));
assertEquals(55, dfa.getPropertyValue("timeToLive"));
}
@Test
public void testOutTcpNio() {
DirectFieldAccessor dfa = new DirectFieldAccessor(tcpOutNio);
assertTrue(tcpOutNio.getPort() >= 6200);
assertEquals(MessageFormats.FORMAT_STX_ETX, dfa.getPropertyValue("messageFormat"));
assertEquals(CustomNioSocketWriter.class, dfa.getPropertyValue("customSocketWriter"));
assertEquals(true, dfa.getPropertyValue("soKeepAlive"));
assertEquals(3, dfa.getPropertyValue("soLinger"));
assertEquals(true, dfa.getPropertyValue("soTcpNoDelay"));
assertEquals(27, dfa.getPropertyValue("soTrafficClass"));
assertEquals(53, dfa.getPropertyValue("soSendBufferSize"));
assertEquals(54, dfa.getPropertyValue("soTimeout"));
assertEquals(false, dfa.getPropertyValue("usingDirectBuffers"));
}
@Test
public void testOutTcpNioDirect() {
DirectFieldAccessor dfa = new DirectFieldAccessor(tcpOutNioDirect);
assertTrue(tcpOutNioDirect.getPort() >= 6300);
assertEquals(MessageFormats.FORMAT_STX_ETX, dfa.getPropertyValue("messageFormat"));
assertEquals(CustomNioSocketWriter.class, dfa.getPropertyValue("customSocketWriter"));
assertEquals(true, dfa.getPropertyValue("soKeepAlive"));
assertEquals(3, dfa.getPropertyValue("soLinger"));
assertEquals(true, dfa.getPropertyValue("soTcpNoDelay"));
assertEquals(27, dfa.getPropertyValue("soTrafficClass"));
assertEquals(53, dfa.getPropertyValue("soSendBufferSize"));
assertEquals(54, dfa.getPropertyValue("soTimeout"));
assertEquals(true, dfa.getPropertyValue("usingDirectBuffers"));
}
@Test
public void testOutTcpNet() {
DirectFieldAccessor dfa = new DirectFieldAccessor(tcpOutNet);
assertTrue(tcpOutNet.getPort() >= 6400);
assertEquals(MessageFormats.FORMAT_STX_ETX, dfa.getPropertyValue("messageFormat"));
assertEquals(CustomNetSocketWriter.class, dfa.getPropertyValue("customSocketWriter"));
assertEquals(true, dfa.getPropertyValue("soKeepAlive"));
assertEquals(3, dfa.getPropertyValue("soLinger"));
assertEquals(true, dfa.getPropertyValue("soTcpNoDelay"));
assertEquals(27, dfa.getPropertyValue("soTrafficClass"));
assertEquals(53, dfa.getPropertyValue("soSendBufferSize"));
assertEquals(54, dfa.getPropertyValue("soTimeout"));
}
}

View File

@@ -167,7 +167,7 @@ public class TcpSendingMessageHandlerTests {
try {
TcpNioSendingMessageHandler handler = new TcpNioSendingMessageHandler("localhost", port);
handler.setMessageFormat(MessageFormats.FORMAT_CUSTOM);
handler.setCustomSocketWriteriClassName("org.springframework.integration.ip.tcp.CustomNioSocketWriter");
handler.setCustomSocketWriterClassName("org.springframework.integration.ip.tcp.CustomNioSocketWriter");
Message<String> message = MessageBuilder.withPayload(testString).build();
handler.handleMessage(message);
Thread.sleep(1000000000L);