diff --git a/build.gradle b/build.gradle index 4bf5cf0f7..6d3a140e3 100644 --- a/build.gradle +++ b/build.gradle @@ -49,6 +49,7 @@ configure(allprojects) { repositories { maven { url 'http://repo.spring.io/libs-release' } + mavenCentral() } dependencies { @@ -135,6 +136,10 @@ configure(subprojects) { subproject -> archives sourcesJar archives javadocJar } + + ext { + smackVersion = '4.0.0' + } } project('spring-xml') { @@ -210,7 +215,9 @@ project('spring-ws-support') { provided("javax.jms:jms-api:1.1-rev-1") provided("javax.mail:javax.mail-api:1.4.7") provided("com.sun.mail:javax.mail:1.4.7") - optional("org.igniterealtime.smack:smack:3.2.1") + optional("org.igniterealtime.smack:smack-tcp:$smackVersion") + optional("org.igniterealtime.smack:smack-resolver-javax:$smackVersion") + optional("org.igniterealtime.smack:smack-extensions:$smackVersion") testCompile("commons-httpclient:commons-httpclient:3.1") testRuntime("org.apache.activemq:activemq-core:4.1.2") { exclude group:'org.apache.geronimo.specs', module:'geronimo-jms_1.1_spec' diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppMessageReceiver.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppMessageReceiver.java index e4939e197..cc94b27b1 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppMessageReceiver.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppMessageReceiver.java @@ -16,14 +16,17 @@ package org.springframework.ws.transport.xmpp; +import java.io.IOException; + import org.jivesoftware.smack.PacketListener; +import org.jivesoftware.smack.SmackException; +import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.filter.PacketTypeFilter; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; - import org.springframework.ws.transport.support.AbstractStandaloneMessageReceiver; /** @@ -57,7 +60,7 @@ public void setConnection(XMPPConnection connection) { } @Override - protected void onActivate() throws XMPPException { + protected void onActivate() throws XMPPException, SmackException, IOException { if (!connection.isConnected()) { connection.connect(); } @@ -88,7 +91,12 @@ protected void onShutdown() { logger.info("Shutting down XMPP receiver [" + connection.getUser() + "]"); } if (connection.isConnected()) { - connection.disconnect(); + try { + connection.disconnect(); + } + catch (NotConnectedException e) { + // Ignore + } } } diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppReceiverConnection.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppReceiverConnection.java index 3263a05bf..3a3603d27 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppReceiverConnection.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppReceiverConnection.java @@ -23,9 +23,9 @@ import java.net.URISyntaxException; import java.util.Iterator; +import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Message; - import org.springframework.util.Assert; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.transport.AbstractReceiverConnection; @@ -139,6 +139,11 @@ protected OutputStream getResponseOutputStream() throws IOException { @Override protected void onSendAfterWrite(WebServiceMessage message) throws IOException { - connection.sendPacket(responseMessage); + try { + connection.sendPacket(responseMessage); + } + catch (NotConnectedException e) { + throw new IOException(e); + } } } diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppSenderConnection.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppSenderConnection.java index 0818e2ba8..870adf92c 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppSenderConnection.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/XmppSenderConnection.java @@ -24,6 +24,7 @@ import java.util.Iterator; import org.jivesoftware.smack.PacketCollector; +import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.filter.AndFilter; import org.jivesoftware.smack.filter.PacketFilter; @@ -31,7 +32,6 @@ import org.jivesoftware.smack.filter.ThreadFilter; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; - import org.springframework.util.Assert; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.transport.AbstractSenderConnection; @@ -128,7 +128,12 @@ protected OutputStream getRequestOutputStream() throws IOException { @Override protected void onSendAfterWrite(WebServiceMessage message) throws IOException { requestMessage.setFrom(connection.getUser()); - connection.sendPacket(requestMessage); + try { + connection.sendPacket(requestMessage); + } + catch (NotConnectedException e) { + throw new IOException(e); + } } /* diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBean.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBean.java index 412849d4e..9620c556b 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBean.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBean.java @@ -16,10 +16,14 @@ package org.springframework.ws.transport.xmpp.support; +import java.io.IOException; + import org.jivesoftware.smack.ConnectionConfiguration; +import org.jivesoftware.smack.SmackException; +import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; - +import org.jivesoftware.smack.tcp.XMPPTCPConnection; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; @@ -84,13 +88,13 @@ public void setResource(String resource) { } @Override - public void afterPropertiesSet() throws XMPPException { + public void afterPropertiesSet() throws XMPPException, SmackException, IOException { ConnectionConfiguration configuration = createConnectionConfiguration(host, port, serviceName); Assert.notNull(configuration, "'configuration' must not be null"); Assert.hasText(username, "'username' must not be empty"); Assert.hasText(password, "'password' must not be empty"); - connection = new XMPPConnection(configuration); + connection = new XMPPTCPConnection(configuration); connection.connect(); if (StringUtils.hasText(resource)) { connection.login(username, password, resource); @@ -102,7 +106,12 @@ public void afterPropertiesSet() throws XMPPException { @Override public void destroy() { - connection.disconnect(); + try { + connection.disconnect(); + } + catch (NotConnectedException e) { + // Ignore + } } @Override diff --git a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppTransportUtils.java b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppTransportUtils.java index 8d49fdf40..9bd611cbe 100644 --- a/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppTransportUtils.java +++ b/spring-ws-support/src/main/java/org/springframework/ws/transport/xmpp/support/XmppTransportUtils.java @@ -23,8 +23,8 @@ import org.springframework.util.Assert; import org.springframework.ws.transport.xmpp.XmppTransportConstants; - import org.jivesoftware.smack.packet.Message; +import org.jivesoftware.smackx.jiveproperties.JivePropertiesManager; /** * Collection of utility methods to work with Mail transports. @@ -62,17 +62,17 @@ public static String getErrorMessage(Message message) { } public static void addHeader(Message message, String name, String value) { - message.setProperty(name, value); + JivePropertiesManager.addProperty(message, name, value); } public static Iterator getHeaderNames(Message message) { Assert.notNull(message, "'message' must not be null"); - return message.getPropertyNames().iterator(); + return JivePropertiesManager.getPropertiesNames(message).iterator(); } public static Iterator getHeaders(Message message, String name) { Assert.notNull(message, "'message' must not be null"); - String value = message.getProperty(name).toString(); + String value = JivePropertiesManager.getProperty(message, name).toString(); if (value != null) { return Collections.singletonList(value).iterator(); } diff --git a/spring-ws-support/src/test/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBeanTest.java b/spring-ws-support/src/test/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBeanTest.java index dde429533..982ddb82e 100644 --- a/spring-ws-support/src/test/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBeanTest.java +++ b/spring-ws-support/src/test/java/org/springframework/ws/transport/xmpp/support/XmppConnectionFactoryBeanTest.java @@ -16,6 +16,9 @@ package org.springframework.ws.transport.xmpp.support; +import java.io.IOException; + +import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPException; import org.junit.Before; import org.junit.Test; @@ -30,12 +33,12 @@ public void createFactoryBean() { factoryBean = new XmppConnectionFactoryBean(); } @Test(expected = IllegalArgumentException.class) - public void noHost() throws XMPPException { + public void noHost() throws XMPPException, SmackException, IOException { factoryBean.afterPropertiesSet(); } @Test(expected = IllegalArgumentException.class) - public void noUsername() throws XMPPException { + public void noUsername() throws XMPPException, SmackException, IOException { factoryBean.setHost("jabber.org"); factoryBean.afterPropertiesSet(); }