[ https://issues.apache.org/jira/browse/SM-2033?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jean-Baptiste Onofré updated SM-2033: ------------------------------------- Fix Version/s: (was: 4.0) servicemix-utils-1.5.0 > WS-Notification subscriptions work on 3.3.2 but not on 4.2.0 > ------------------------------------------------------------ > > Key: SM-2033 > URL: https://issues.apache.org/jira/browse/SM-2033 > Project: ServiceMix > Issue Type: Bug > Components: servicemix-utils > Environment: Windows 7 + Cygwin > Reporter: Matthieu Cormier > Assignee: Jean-Baptiste Onofré > Fix For: servicemix-utils-1.5.0 > > Attachments: echoServer.zip, servicemix-utils-1.2.0.jar > > > In order to explain this issue I will first go through how service mix > behaves correctly in 3.3.2 and then explain how it works incorrectly in 4.2.0. > 1. To see publishing working you need a simple echo server. An echo server > is a simple server that listens on a port and prints what it receives to > standard output. This is very useful when establishing the behaviour of a > server. For this example we will run the echo server on port 4444. (see file > X) > 2. There is a documented issue in 3.3.2 with regard to WS-Notification. Jira > SM-1783 (https://issues.apache.org/jira/browse/SM-1783). This issue is > documented as fixed in the yet to be released 3.4. If you are testing with > 3.3.2 then you must patch the file FragmentStreamReader.class which is > located in servicemix-utils.jar. > 3. Once you have the echo server running and the servicemix-utils.jar > patched you are ready to run the server. Run the server located in > examples\wsn-http-binding using ..\..\bin\servicemix servicemix.xml or some > derivative. > 4. Once servicemix has started execute the following soap requests. > -- Subscribe Soap Message -- > <env:Envelope > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:wsa="http://www.w3.org/2005/08/addressing"> > <env:Header> > <wsa:ReplyTo> > <wsa:Address>http://localhost:4444</wsa:Address> > </wsa:ReplyTo> > <wsa:From> > <wsa:Address>http://localhost:4444</wsa:Address> > </wsa:From> > </env:Header> > <env:Body> > <wsnt:Subscribe > xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" > xmlns:ncex="http://www.consumer.org" > xmlns:npex="http://www.producer.org"> > <wsnt:ConsumerReference> > <wsa:Address> > http://localhost:4444 > </wsa:Address> > </wsnt:ConsumerReference> > <wsnt:Filter> > <wsnt:TopicExpression > > Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple"> > BrewProcess > </wsnt:TopicExpression> > </wsnt:Filter> > </wsnt:Subscribe> > </env:Body> > </env:Envelope> > -- End Subscribe Soap Message -- > This request will subscribe the echo server to any messages sent to the topic > BrewProcess. Then the following Soap request which will publish information > to the BrewProcess Topic. ServiceMix will see that there is a subscriber to > that topic and relay that message to localhost:4444 as defined in the > subscription request above. The echo server will be listening on port 4444 > and will receive and print out the message. > -- Notify Soap Message -- > <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:wsa="http://www.w3.org/2005/08/addressing"> > <env:Header> > </env:Header> > <env:Body> > <wsnt:Notify xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"> > <wsnt:NotificationMessage> > <wsnt:Topic > Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple"> > BrewProcess > </wsnt:Topic> > <wsnt:Message> > <alarm:Alarm xmlns:alarm="http://alarms.some-host"> > <Name>Kettle Overfill</Name> > <Desc>Kettle Overfill Alarm</Desc> > <Date>2007-09-22-12:00:30:100</Date> > <Severity>3</Severity> > <Value>110.2</Value> > <Ack>false</Ack> > </alarm:Alarm> > </wsnt:Message> > </wsnt:NotificationMessage> > </wsnt:Notify> > </env:Body> > </env:Envelope> > -- End Notify Soap Message -- > This is how things work in 3.3.2. When using 4.2.0 the following happens. > 1. You still need an echo server running > 2. Patching servicemix-utils.jar is not necessary in 4.2.0 > 3. Copy the file > apache-servicemix-3.3.2/examples/wsn-http-binding/hotdeploy/soap-demo-sa.zip > to apache-servicemix-4.2.0/deploy/soap-demo-sa.zip > 4. Start servicemix 4.2.0 > 5. Send the subscribe message as above which subscribes localhost:4444 to the > topic BrewProcess. You should see the following in the log that shows that > the subscription was sucessful. > 11:22:06,475 | INFO | wsn2005-thread-2 | ManagementEndpointRegistry | > ement.ManagementEndpointRegistry > 56 | Registering endpoint: > org.apache.servicemix.nmr.core.InternalEndpointWrapper@d6efc021 with > properties { > jbi.internal=true, WSDL_URL=document:4, > NAME={http://servicemix.org/wsnotification}Subscription:ID-192-168-0-1 > 79-12d51987db7-2-0, > INTERFACE_NAME={http://docs.oasis-open.org/wsn/bw-2}PausableSubscriptionManager, > service.i > d=270, objectClass=[Ljava.lang.String;@8bbb40, > ENDPOINT_NAME=ID-192-168-0-179-12d51987db7-2-0, SERVICE_NAME={h > ttp://servicemix.org/wsnotification}Subscription} > 6. Send the notify message as above. The message is not received by the > echo server and the following appears in the log file. > 11:26:24,041 | WARN | eMQ Session Task | NMR | > .servicemix.nmr.core.ChannelImpl > 293 | Error processing exchange [ > id: 9a4e64b1-3a2d-4af3-baea-944b884bdda4 > mep: InOnly > status: Active > role: Consumer > target: PropertyMatchingReference[{ENDPOINT_NAME=http://localhost:4444, > SERVICE_NAME={urn:servicemix:http > }HttpComponent}] > properties: [ > org.apache.servicemix.senderEndpoint = > {http://servicemix.org/wsnotification}Subscription:ID-192-168-0-1 > 79-12d51987db7-2-0 > javax.jbi.messaging.MessageExchange = > org.apache.servicemix.jbi.runtime.impl.InOnlyImpl@aafcb8 > javax.jbi.messaging.sendSync = <null> > javax.jbi.transaction.jta = <null> > javax.jbi.ServiceEndpoint = > org.apache.servicemix.common.ResolvedEndpoint@1b5abf7 > org.apache.servicemix.correlationId = > 9a4e64b1-3a2d-4af3-baea-944b884bdda4 > ] > In: [ > content: <?xml version="1.0" encoding="UTF-8"?><ns2:Notify > xmlns:ns2="http://docs.oasis-open.org/wsn/b-2" > xmlns="http://www.w3.org/2005/08/addressing" > xmlns:ns3="http://docs.oasis-open.org/wsrf/bf-2" xmlns:ns4="http: > //docs.oasis-open.org/wsrf/rp-2" > xmlns:ns5="http://docs.oasis-open.org/wsn/t-1"><ns2:NotificationMessage><ns2: > Topic Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple"> > BrewProcess > </ns2:Topic><ns2:Message><alarm:Alarm xmlns:alarm="http://alarms.some-host" > xmlns:env="http://schemas.xmlsoap. > org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" > xmlns:wsnt="http://docs.oasis-open.org/ws > n/b-2"><Name xmlns="" > xmlns:ns10="http://www.w3.org/2005/08/addressing">Kettle Overfill</Name><Desc > xmlns="" x > mlns:ns10="http://www.w3.org/2005/08/addressing">Kettle Overfill > Alarm</Desc><Date xmlns="" xmlns:ns10="http:/ > /www.w3.org/2005/08/addressing">2007-09-22-12:00:30:100</Date><Severity > xmlns="" xmlns:ns10="http://www.w3.org > /2005/08/addressing">3</Severity><Value xmlns="" > xmlns:ns10="http://www.w3.org/2005/08/addressing">110.2</Valu > e><Ack xmlns="" xmlns:ns10="http://www.w3.org/2005/08/addressing">false</Ack> > </alarm:Alarm></ns2:Message></ns2:NotificationMessage></ns2:Notify> > ] > ] > org.apache.servicemix.nmr.api.ServiceMixException: Could not dispatch > exchange. No matching endpoints. > at > org.apache.servicemix.nmr.core.FlowRegistryImpl.dispatch(FlowRegistryImpl.java:110) > at > org.apache.servicemix.nmr.core.ChannelImpl.dispatch(ChannelImpl.java:286) > at > org.apache.servicemix.nmr.core.ChannelImpl.send(ChannelImpl.java:117) > at > org.apache.servicemix.jbi.runtime.impl.DeliveryChannelImpl.send(DeliveryChannelImpl.java:178) > at > org.apache.servicemix.common.EndpointDeliveryChannel.send(EndpointDeliveryChannel.java:89) > at > org.apache.servicemix.wsn.jbi.JbiSubscription.doNotify(JbiSubscription.java:137) > at > org.apache.servicemix.wsn.jms.JmsSubscription.onMessage(JmsSubscription.java:193) > at > org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1088) > at > org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:127) > at > org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:197) > at > org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) > at > org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) > at java.lang.Thread.run(Thread.java:619) > 11:26:24,044 | WARN | eMQ Session Task | JmsSubscription | > rvicemix.wsn.jms.JmsSubscription > 197 | Error notifying consumer > org.apache.servicemix.nmr.api.ServiceMixException: Could not dispatch > exchange. No matching endpoints. > at > org.apache.servicemix.nmr.core.FlowRegistryImpl.dispatch(FlowRegistryImpl.java:110) > at > org.apache.servicemix.nmr.core.ChannelImpl.dispatch(ChannelImpl.java:286) > at > org.apache.servicemix.nmr.core.ChannelImpl.send(ChannelImpl.java:117) > at > org.apache.servicemix.jbi.runtime.impl.DeliveryChannelImpl.send(DeliveryChannelImpl.java:178) > at > org.apache.servicemix.common.EndpointDeliveryChannel.send(EndpointDeliveryChannel.java:89) > at > org.apache.servicemix.wsn.jbi.JbiSubscription.doNotify(JbiSubscription.java:137) > at > org.apache.servicemix.wsn.jms.JmsSubscription.onMessage(JmsSubscription.java:193) > at > org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1088) > at > org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:127) > at > org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:197) > at > org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) > at > org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) > at java.lang.Thread.run(Thread.java:619) -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira