diff --git a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/OperationInvokingMessageHandler.java b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/OperationInvokingMessageHandler.java index 68e20b0e3e..dde0011a48 100644 --- a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/OperationInvokingMessageHandler.java +++ b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/OperationInvokingMessageHandler.java @@ -152,38 +152,35 @@ public class OperationInvokingMessageHandler extends AbstractReplyProducingMessa } /** - * First checks for the presence of a {@link JmxHeaders#OBJECT_NAME} header, - * then falls back to this handler's {@link #defaultObjectName} if available. + * First checks if defaultObjectName is set, otherwise falls back on {@link JmxHeaders#OBJECT_NAME} header. */ private ObjectName resolveObjectName(Message message) { - ObjectName objectName = null; - Object objectNameHeader = message.getHeaders().get(JmxHeaders.OBJECT_NAME); - if (objectNameHeader instanceof ObjectName) { - objectName = (ObjectName) objectNameHeader; - } - else if (objectNameHeader instanceof String) { - try { - objectName = ObjectNameManager.getInstance(objectNameHeader); + ObjectName objectName = this.defaultObjectName; + if (objectName == null){ + Object objectNameHeader = message.getHeaders().get(JmxHeaders.OBJECT_NAME); + if (objectNameHeader instanceof ObjectName) { + objectName = (ObjectName) objectNameHeader; } - catch (MalformedObjectNameException e) { - throw new IllegalArgumentException(e); + else if (objectNameHeader instanceof String) { + try { + objectName = ObjectNameManager.getInstance(objectNameHeader); + } + catch (MalformedObjectNameException e) { + throw new IllegalArgumentException(e); + } } } - else { - objectName = this.defaultObjectName; - } Assert.notNull(objectName, "Failed to resolve ObjectName."); return objectName; } /** - * First checks for the presence of a {@link JmxHeaders#OPERATION_NAME} header, - * then falls back to this handler's {@link #defaultOperationName} if available. + * First checks if defaultOperationName is set, otherwise falls back on {@link JmxHeaders#OPERATION_NAME} header. */ private String resolveOperationName(Message message) { - String operationName = message.getHeaders().get(JmxHeaders.OPERATION_NAME, String.class); - if (operationName == null) { - operationName = this.defaultOperationName; + String operationName = this.defaultOperationName; + if (operationName == null){ + operationName = message.getHeaders().get(JmxHeaders.OPERATION_NAME, String.class); } Assert.notNull(operationName, "Failed to resolve operation name."); return operationName; diff --git a/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd b/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd index dcab9bde80..8877b83f4c 100644 --- a/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd +++ b/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd @@ -26,15 +26,16 @@ - - - - - - - - - + + + + + + + + + + @@ -44,12 +45,13 @@ - - - - - - + + + + + + + @@ -60,11 +62,12 @@ - - - - - + + + + + + @@ -75,13 +78,14 @@ - - - - - - - + + + + + + + + @@ -92,10 +96,12 @@ - - - - + + + + + + @@ -107,35 +113,70 @@ - - - - - The MBeanServer to which this Control Bus should export MBeans. - - - - - - - The domain name for the MBeans exported by this Control Bus. - - - - - - - The Message Channel that can be used to send operation commands to - this Control Bus. It must implement SubscribableChannel. - - - - - - - - + + + + + + + The domain name for the MBeans exported by this Control Bus. + + + + + + + The Message Channel that can be used to send operation commands to + this Control Bus. It must implement SubscribableChannel. + + + + + + + + + + + + + + + Defines inbound operation invoking type + + + + + + + + + + + + + + Defines outbound operation invoking type + + + + + + + + + + + + + + + Defines the name of the MBeanServer bean to connect to. + + + + \ No newline at end of file diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/OperationInvokingMessageHandlerTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/OperationInvokingMessageHandlerTests.java index 053a0766db..df6afdeaad 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/OperationInvokingMessageHandlerTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/OperationInvokingMessageHandlerTests.java @@ -71,12 +71,12 @@ public class OperationInvokingMessageHandlerTests { handler.setServer(this.server); handler.setDefaultObjectName(this.objectName); handler.setOutputChannel(outputChannel); + handler.setDefaultOperationName("x"); handler.afterPropertiesSet(); Map params = new HashMap(); params.put("p1", "foo"); params.put("p2", "bar"); - Message message = MessageBuilder.withPayload(params) - .setHeader(JmxHeaders.OPERATION_NAME, "x").build(); + Message message = MessageBuilder.withPayload(params).build(); handler.handleMessage(message); Message reply = outputChannel.receive(0); assertNotNull(reply); @@ -90,9 +90,9 @@ public class OperationInvokingMessageHandlerTests { handler.setServer(this.server); handler.setDefaultObjectName(this.objectName); handler.setOutputChannel(outputChannel); + handler.setDefaultOperationName("y"); handler.afterPropertiesSet(); - Message message = MessageBuilder.withPayload("foo") - .setHeader(JmxHeaders.OPERATION_NAME, "y").build(); + Message message = MessageBuilder.withPayload("foo").build(); handler.handleMessage(message); } @@ -103,11 +103,11 @@ public class OperationInvokingMessageHandlerTests { handler.setServer(this.server); handler.setDefaultObjectName(this.objectName); handler.setOutputChannel(outputChannel); + handler.setDefaultOperationName("x"); handler.afterPropertiesSet(); Map params = new HashMap(); params.put("p1", "foo"); - Message message = MessageBuilder.withPayload(params) - .setHeader(JmxHeaders.OPERATION_NAME, "x").build(); + Message message = MessageBuilder.withPayload(params).build(); handler.handleMessage(message); Message reply = outputChannel.receive(0); assertNotNull(reply); @@ -121,10 +121,10 @@ public class OperationInvokingMessageHandlerTests { handler.setServer(this.server); handler.setDefaultObjectName(this.objectName); handler.setOutputChannel(outputChannel); + handler.setDefaultOperationName("x"); handler.afterPropertiesSet(); List params = Arrays.asList(new Object[] { "foo", new Integer(123) }); - Message message = MessageBuilder.withPayload(params) - .setHeader(JmxHeaders.OPERATION_NAME, "x").build(); + Message message = MessageBuilder.withPayload(params).build(); handler.handleMessage(message); Message reply = outputChannel.receive(0); assertNotNull(reply); diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests-context.xml index 89f5ceb3db..b3eee9823e 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests-context.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests-context.xml @@ -16,14 +16,10 @@ - - - - - - + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests.java index 7e13a5d532..238bbcac34 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingChannelAdapterParserTests.java @@ -21,7 +21,6 @@ import static org.junit.Assert.assertEquals; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.core.Message; import org.springframework.integration.core.MessageChannel; @@ -33,6 +32,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Mark Fisher + * @author Oleg Zhurakousky * @since 2.0 */ @ContextConfiguration @@ -40,54 +40,39 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; public class OperationInvokingChannelAdapterParserTests { @Autowired - private MessageChannel withDefaultsChannel; + private MessageChannel input; @Autowired - private MessageChannel withoutDefaultsChannel; - - @Autowired - private TestBean testBeanForDefaults; - - @Autowired - private TestBean testBeanForNoDefaults; - + private TestBean testBean; @After public void resetLists() { - testBeanForDefaults.messages.clear(); - testBeanForNoDefaults.messages.clear(); + testBean.messages.clear(); } @Test public void adapterWithDefaults() throws Exception { - assertEquals(0, testBeanForDefaults.messages.size()); - assertEquals(0, testBeanForNoDefaults.messages.size()); - withDefaultsChannel.send(new StringMessage("test1")); - withDefaultsChannel.send(new StringMessage("test2")); - withDefaultsChannel.send(new StringMessage("test3")); - assertEquals(3, testBeanForDefaults.messages.size()); - assertEquals(0, testBeanForNoDefaults.messages.size()); + assertEquals(0, testBean.messages.size()); + input.send(new StringMessage("test1")); + input.send(new StringMessage("test2")); + input.send(new StringMessage("test3")); + assertEquals(3, testBean.messages.size()); } - + @Test - public void adapterWithoutDefaults() throws Exception { - assertEquals(0, testBeanForDefaults.messages.size()); - assertEquals(0, testBeanForNoDefaults.messages.size()); - withoutDefaultsChannel.send(createMessageWithHeaders("1")); - withoutDefaultsChannel.send(createMessageWithHeaders("2")); - withoutDefaultsChannel.send(createMessageWithHeaders("3")); - assertEquals(0, testBeanForDefaults.messages.size()); - assertEquals(3, testBeanForNoDefaults.messages.size()); + // Headers should be ignored + public void adapterWitJmxHeaders() throws Exception { + assertEquals(0, testBean.messages.size()); + input.send(this.createMessage("1")); + input.send(this.createMessage("2")); + input.send(this.createMessage("3")); + assertEquals(3, testBean.messages.size()); } - - - private static Message createMessageWithHeaders(String payload) { - String objectName = "org.springframework.integration.jmx.config:name=testBeanForNoDefaults,type=TestBean"; + + private Message createMessage(String payload){ return MessageBuilder.withPayload(payload) - .setHeader(JmxHeaders.OBJECT_NAME, objectName) - .setHeader(JmxHeaders.OPERATION_NAME, "test") - .build(); + .setHeader(JmxHeaders.OBJECT_NAME, "org.springframework.integration.jmx.config:type=TestBean,name=foo") + .setHeader(JmxHeaders.OPERATION_NAME, "blah").build(); } - } diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests-context.xml index dbc4728ce2..4506a57a72 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests-context.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests-context.xml @@ -16,39 +16,26 @@ - + - + - + - + - - - - - - - - - - - - - + - - - - + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests.java index a1347938e9..4b0dfe5cd2 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/OperationInvokingOutboundGatewayTests.java @@ -41,83 +41,54 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) public class OperationInvokingOutboundGatewayTests { @Autowired - @Qualifier("noDefaultInput") - private MessageChannel noDefaultInput; + @Qualifier("withReplyChannel") + private MessageChannel withReplyChannel; + @Autowired + @Qualifier("withReplyChannelOutput") + private PollableChannel withReplyChannelOutput; @Autowired - @Qualifier("noDefaultOutput") - private PollableChannel noDefaultOutput; + @Qualifier("withNoReplyChannel") + private MessageChannel withNoReplyChannel; @Autowired - @Qualifier("noDefaultInputA") - private MessageChannel noDefaultInputA; + @Qualifier("withNoReplyChannelOutput") + private PollableChannel withNoReplyChannelOutput; @Autowired - @Qualifier("noDefaultOutputA") - private PollableChannel noDefaultOutputA; - - @Autowired - @Qualifier("defaultInput") - private MessageChannel defaultInput; - - @Autowired - @Qualifier("defaultOutput") - private PollableChannel defaultOutput; - - @Autowired - private TestBean testBeanForDefaultsGateway; + private TestBean testBean; - @Autowired - private TestBean testBeanForNoDefaultsGateway; @After public void resetLists() { - testBeanForDefaultsGateway.messages.clear(); - testBeanForNoDefaultsGateway.messages.clear(); + testBean.messages.clear(); } @Test - public void adapterWithoutNoDefaultsAndReturn() throws Exception { - noDefaultInput.send(createMessageWithHeadersForReturnCase("1")); - assertEquals(1, ((List)noDefaultOutput.receive().getPayload()).size()); - noDefaultInput.send(createMessageWithHeadersForReturnCase("2")); - assertEquals(2, ((List)noDefaultOutput.receive().getPayload()).size()); - noDefaultInput.send(createMessageWithHeadersForReturnCase("3")); - assertEquals(3, ((List)noDefaultOutput.receive().getPayload()).size()); + public void gatewayWithReplyChannel() throws Exception { + withReplyChannel.send(new StringMessage("1")); + assertEquals(1, ((List)withReplyChannelOutput.receive().getPayload()).size()); + withReplyChannel.send(new StringMessage("2")); + assertEquals(2, ((List)withReplyChannelOutput.receive().getPayload()).size()); + withReplyChannel.send(new StringMessage("3")); + assertEquals(3, ((List)withReplyChannelOutput.receive().getPayload()).size()); } - @Test - public void adapterWithoutNoDefaultsAndReturnAndReplyChannel() throws Exception { - noDefaultInputA.send(createMessageWithHeadersForReturnCaseAndReplyChannel("1", noDefaultOutputA)); - assertEquals(1, ((List)noDefaultOutputA.receive().getPayload()).size()); - noDefaultInputA.send(createMessageWithHeadersForReturnCaseAndReplyChannel("2", noDefaultOutputA)); - assertEquals(2, ((List)noDefaultOutputA.receive().getPayload()).size()); - noDefaultInputA.send(createMessageWithHeadersForReturnCaseAndReplyChannel("3", noDefaultOutputA)); - assertEquals(3, ((List)noDefaultOutputA.receive().getPayload()).size()); - } - - @Test - public void adapterWithoutDefaultsAndReturn() throws Exception { - defaultInput.send(new StringMessage("1")); - assertEquals(1, ((List)defaultOutput.receive().getPayload()).size()); - defaultInput.send(new StringMessage("2")); - assertEquals(2, ((List)defaultOutput.receive().getPayload()).size()); - defaultInput.send(new StringMessage("3")); - assertEquals(3, ((List)defaultOutput.receive().getPayload()).size()); - } - - private static Message createMessageWithHeadersForReturnCase(String payload) { - String objectName = "org.springframework.integration.jmx.config:name=testBeanForNoDefaultsGateway,type=TestBean"; - return MessageBuilder.withPayload(payload) - .setHeader(JmxHeaders.OBJECT_NAME, objectName) - .setHeader(JmxHeaders.OPERATION_NAME, "testWithReturn") - .build(); - } - - private static Message createMessageWithHeadersForReturnCaseAndReplyChannel(String payload, MessageChannel replyChannel) { - String objectName = "org.springframework.integration.jmx.config:name=testBeanForNoDefaultsGateway,type=TestBean"; - return MessageBuilder.withPayload(payload) - .setHeader(JmxHeaders.OBJECT_NAME, objectName) - .setHeader(JmxHeaders.OPERATION_NAME, "testWithReturn") - .setReplyChannel(replyChannel) - .build(); - } +// @Test +// public void adapterWithoutNoDefaultsAndReturnAndReplyChannel() throws Exception { +// noDefaultInputA.send(createMessageWithHeadersForReturnCaseAndReplyChannel("1", noDefaultOutputA)); +// assertEquals(1, ((List)noDefaultOutputA.receive().getPayload()).size()); +// noDefaultInputA.send(createMessageWithHeadersForReturnCaseAndReplyChannel("2", noDefaultOutputA)); +// assertEquals(2, ((List)noDefaultOutputA.receive().getPayload()).size()); +// noDefaultInputA.send(createMessageWithHeadersForReturnCaseAndReplyChannel("3", noDefaultOutputA)); +// assertEquals(3, ((List)noDefaultOutputA.receive().getPayload()).size()); +// } +// +// @Test +// public void adapterWithoutDefaultsAndReturn() throws Exception { +// defaultInput.send(new StringMessage("1")); +// assertEquals(1, ((List)defaultOutput.receive().getPayload()).size()); +// defaultInput.send(new StringMessage("2")); +// assertEquals(2, ((List)defaultOutput.receive().getPayload()).size()); +// defaultInput.send(new StringMessage("3")); +// assertEquals(3, ((List)defaultOutput.receive().getPayload()).size()); +// } }