Ah ok. Maybe I'll just do that then to make quicker.
On 9/20/07, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > > The client API that you are using only works inside the JBI bus. > And it does not much than what you would do using a JAXWS client > generated from the WSDL using CXF. The api is just a tad simpler and > minimize the amount of parameters needed to perform the calls, but > still you need to create the pull point, register it, etc... > If you don't need dynamic registrations and pull points, you can just > create and deploy them in a SU on servicemix and just use soap to > retrieve the messages from the pullpoint. > > On 9/21/07, Ryan Moquin <[EMAIL PROTECTED]> wrote: > > I realize that, but the classes were already generated and included by > > servicemix. Is there a reason why I'd want to regenerate them rather > than > > use what servicemix has already included? Since servicemix supports > > pullpoints, I would assume that it also contains a client. I would > rather > > just use what's there, if something is already there. I could go the > way of > > generating the objects and then calling the methods to get the > notifications > > from the pullpoint, but from what I'm understanding, a pullpoint is just > > that, something that needs pulled from (initiated from the client side, > such > > as polling). This means a lot more maintenance on the client side and > > opportunity for bugs or problems (need to manage a thread, subscriptions > and > > whatever else comes up . I'd rather have an already tested client to > handle > > this for me since it's less maintenance on my end. > > > > On 9/20/07, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > > > > > > You forgot that WS-Notification just specifies a web service, which > > > means it defines a WSDL. The jaxb pojos are generated from the WSDL, > > > so you should be able to use whichever wsdl2java tool. > > > Then you should be able to call the WS-NotificationBroker using your > CXF > > > client. > > > > > > On 9/21/07, Ryan Moquin <[EMAIL PROTECTED]> wrote: > > > > Right, I have the soap endpoint, but what I'm wondering, is in the > > > > servicemix-wsn2005 jar there are all the already generated jaxb > classes, > > > is > > > > there a client in there I can use to handle the subscription and > pulling > > > > notifications for me? Or are my options, manually sending soap or > > > finding a > > > > 3rd party WSN client library. It doesn't appear CXF has support for > it. > > > > > > > > On 9/20/07, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > > > > > > > > > > From outside the JBI bus, you would deploy an http/soap binding > and > > > > > have your external client subscribe / publish through soap. > > > > > See http://incubator.apache.org/servicemix/example-scenario.html > > > > > > > > > > On 9/21/07, Ryan Moquin <[EMAIL PROTECTED]> wrote: > > > > > > Yeah, I was wondering how this ever worked as well because it > really > > > > > does > > > > > > make it look like it shouldn't ever work, but I figured there > must > > > be > > > > > > something going on here as a result of something I'm doing. > > > > > > > > > > > > I think that would be a good idea since jaxb objects seem to be > the > > > > > default > > > > > > anyhow. It can't get any worse than a marshaller that didn't > work > > > > > anyhow. > > > > > > :) > > > > > > > > > > > > I did raise a jira, and I'll update it with your explanation (to > > > make it > > > > > > more clear what's really happening) and then I'll get a patch > taken > > > care > > > > > of > > > > > > tonight since I really really need to get past this whole > sending > > > > > > notifications thing and on to something else and attach it to > the > > > jira. > > > > > :) > > > > > > > > > > > > While I'm at it, if I want to programmatically subscribe from an > > > > > appserver, > > > > > > do I go and create an instance of NotificationBroker? Or is > there > > > > > another > > > > > > class that I should be creating from my appserver to create the > > > > > > subscription? > > > > > > > > > > > > On 9/20/07, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > I was a bit puzzled when I first read your mail because this > would > > > > > > > have implied that the NotificationBroker has never worked > :-( But > > > now > > > > > > > I've understood the problem. > > > > > > > If you give a JBIContainer or ComponentContext when > constructing > > > the > > > > > > > NotifiationBroker object, it creates a client with a > JAXBMarshaler > > > > > > > which overrides the very method that fails. Unfortunately, > when > > > > > > > giving a ServiceMixClient, the marshaler is not changed and > the > > > > > > > DefaultMarshaler is used. > > > > > > > I guess it should be possible to set a jaxb marshaler on the > > > client > > > > > > > before constructing the NotificationBroker to workaround your > > > > > > > problem... but I guess it would be better if the the > marshaler is > > > > > > > automatically set to a JAXB one instead. > > > > > > > > > > > > > > I suppose the same thing may happen with the other class in > the > > > wsn > > > > > > > client api... > > > > > > > Wanna raise a jira and provide a patch ? > > > > > > > > > > > > > > On 9/21/07, Ryan Moquin <[EMAIL PROTECTED]> wrote: > > > > > > > > Ok, I think this is a bug in some form (that the very least > and > > > > > > > exception or > > > > > > > > message should be logged). It appears that servicemix > doesn't > > > like > > > > > my > > > > > > > > object is silently tosses it into the trash: > > > > > > > > > > > > > > > > This method (in NotificationBroker) gets executed with my > object > > > and > > > > > a > > > > > > > > org.oasis_open.docs.wsn.b_2.Notify is constructed: > > > > > > > > > > > > > > > > public void notify(String topic, Object msg) throws > JBIException > > > { > > > > > > > > Notify notify = new Notify(); > > > > > > > > NotificationMessageHolderType holder = new > > > > > > > > NotificationMessageHolderType(); > > > > > > > > if (topic != null) { > > > > > > > > TopicExpressionType topicExp = new > > > > > TopicExpressionType(); > > > > > > > > topicExp.getContent().add(topic); > > > > > > > > holder.setTopic(topicExp); > > > > > > > > } > > > > > > > > holder.setMessage(new > > > NotificationMessageHolderType.Message > > > > > ()); > > > > > > > > holder.getMessage().setAny(msg); > > > > > > > > notify.getNotificationMessage().add(holder); > > > > > > > > send(notify); > > > > > > > > } > > > > > > > > > > > > > > > > Eventually this method gets executed (in DefaultMarshaller) > with > > > the > > > > > > > Notify > > > > > > > > object that was created as the parameter in body, but since > the > > > > > Notify > > > > > > > > object isn't an instance of any of the 3 things it's looking > > > for, it > > > > > > > returns > > > > > > > > null (actually the message variable isn't even used in this > > > method): > > > > > > > > > > > > > > > > protected Source asContent(NormalizedMessage message, Object > > > body) { > > > > > > > > if (body instanceof Source) { > > > > > > > > return (Source) body; > > > > > > > > } else if (body instanceof String) { > > > > > > > > // lets assume String is the XML to send > > > > > > > > return new StringSource((String) body); > > > > > > > > } else if (body instanceof Node) { > > > > > > > > return new DOMSource((Node) body); > > > > > > > > } > > > > > > > > return null; > > > > > > > > } > > > > > > > > > > > > > > > > This null then is put into the message variable as the > content > > > (line > > > > > 56 > > > > > > > on > > > > > > > > DefaultMarshaller), hence my object gets tossed: > > > > > > > > > > > > > > > > Source content = asContent(message, body); > > > > > > > > message.setContent(content); > > > > > > > > > > > > > > > > This was all called by DefaultServicemixClient, which > returns > > > back > > > > > to > > > > > > > the > > > > > > > > following method, with the in variable now populated with > null > > > as > > > > > the > > > > > > > > content: > > > > > > > > > > > > > > > > protected void populateMessage(MessageExchange exchange, Map > > > > > > > > exchangeProperties, > > > > > > > > Map inMessageProperties, > > > Object > > > > > > > content) > > > > > > > > throws MessagingException { > > > > > > > > NormalizedMessage in = exchange.getMessage("in"); > > > > > > > > populateExchangeProperties(exchange, > > > exchangeProperties); > > > > > > > > populateMessageProperties(in, inMessageProperties); > > > > > > > > getMarshaler().marshal(exchange, in, content); > > > > > > > > } > > > > > > > > > > > > > > > > I'll jira this since an action item of some kind should > > > definitely > > > > > be > > > > > > > done, > > > > > > > > I'd go ahead and patch it but I'm not completely sure what > kind > > > of > > > > > class > > > > > > > > it's expecting in the asContent method yet. > > > > > > > > > > > > > > > > On 9/20/07, Ryan Moquin <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > > > > > I did debug my app and it is submitting an object that is > not > > > > > null, > > > > > > > which > > > > > > > > > is why this is puzzling. Initially I thought maybe I was > > > trying > > > > > to > > > > > > > through > > > > > > > > > a null object in there. I'll do some poking around and > see if > > > I > > > > > can > > > > > > > find > > > > > > > > > where it might be going haywire. > > > > > > > > > > > > > > > > > > On 9/20/07, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > > > > > > > The client does not send anything for an unknown reason. > > > > > > > > > > You can see that because the in message has a null > content. > > > > > > > > > > This is what causes the exception. > > > > > > > > > > I suggest to remote debug the app to see what happens... > > > > > > > > > > Just set the environment variable SERVICEMIX_DEBUG to > TRUE, > > > > > launch > > > > > > > > > > servicemix and debug from eclipse or your favorite > ide... > > > > > > > > > > > > > > > > > > > > On 9/20/07, Ryan Moquin <[EMAIL PROTECTED] > wrote: > > > > > > > > > > > I don't get much more, but here is what I see now: > > > > > > > > > > > > > > > > > > > > > > DEBUG - WSNComponent - Received > > > exchange: > > > > > > > status: > > > > > > > > > > Active, > > > > > > > > > > > role: provider > > > > > > > > > > > DEBUG - WSNComponent - Retrieved > > > correlation > > > > > id: > > > > > > > > > > null > > > > > > > > > > > ERROR - WSNComponent - Error > processing > > > > > exchange > > > > > > > > > > InOnly[ > > > > > > > > > > > id: ID:10.40.16.154-1152419544a-28:1 > > > > > > > > > > > status: Active > > > > > > > > > > > role: provider > > > > > > > > > > > endpoint: Broker > > > > > > > > > > > in: null > > > > > > > > > > > ] > > > > > > > > > > > java.lang.IllegalArgumentException: source parameter > must > > > not > > > > > be > > > > > > > null > > > > > > > > > > > at > > > > > > > javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal( > > > > > > > > > > > AbstractUnmarshallerImpl.java:98) > > > > > > > > > > > at > > > > > org.apache.servicemix.wsn.component.WSNEndpoint.process > > > > > > > ( > > > > > > > > > > > WSNEndpoint.java:128) > > > > > > > > > > > at > > > > > > > org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess( > > > > > > > > > > > AsyncBaseLifeCycle.java:538) > > > > > > > > > > > at > > > > > > > > > > > > > org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange( > > > > > > > > > > > AsyncBaseLifeCycle.java:490) > > > > > > > > > > > at > > > > > > > > > > > org.apache.servicemix.common.BaseLifeCycle.onMessageExchange > > > ( > > > > > > > > > > > BaseLifeCycle.java:46) > > > > > > > > > > > at > > > > > > > > > > > > > > > > > > > > > org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound > > > > > > > > > > ( > > > > > > > > > > > DeliveryChannelImpl.java:610) > > > > > > > > > > > at > > > > > > > org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting( > > > > > > > > > > > AbstractFlow.java :170) > > > > > > > > > > > at > > > > > > > org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting( > > > > > > > > > > > SedaFlow.java:167) > > > > > > > > > > > at > > > > > org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run > > > > > > > ( > > > > > > > > > > > SedaQueue.java:134) > > > > > > > > > > > at > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.runTask( > > > > > > > > > > > ThreadPoolExecutor.java:650) > > > > > > > > > > > at > > > java.util.concurrent.ThreadPoolExecutor$Worker.run( > > > > > > > > > > > ThreadPoolExecutor.java:675) > > > > > > > > > > > at java.lang.Thread.run (Thread.java:595) > > > > > > > > > > > DEBUG - DeliveryChannelImpl - Send ID: > > > > > > > > > > 10.40.16.154-1152419544a-28:1 > > > > > > > > > > > in DeliveryChannel{servicemix-wsn2005} > > > > > > > > > > > DEBUG - SedaFlow - Called Flow > send > > > > > > > > > > > DEBUG - SedaQueue - > > > > > > > > > > > > > > > > > [EMAIL PROTECTED] > > > > > > > > > > > exchange: I > > > > > > > > > > > nOnly[ > > > > > > > > > > > id: ID:10.40.16.154-1152419544a-28:1 > > > > > > > > > > > status: Error > > > > > > > > > > > role: consumer > > > > > > > > > > > endpoint: Broker > > > > > > > > > > > in: null > > > > > > > > > > > error: java.lang.IllegalArgumentException: source > > > parameter > > > > > must > > > > > > > not > > > > > > > > > > be > > > > > > > > > > > null > > > > > > > > > > > ] > > > > > > > > > > > DEBUG - DeliveryChannelImpl - Notifying > > > exchange > > > > > ID: > > > > > > > > > > > 10.40.16.154-1152419544a-28:1(e99889) in > DeliveryChannel{I > > > > > > > > > > > D:10.40.16.154-1152419544a-0:1} from > > > > > > > processInboundSynchronousExchange > > > > > > > > > > > DEBUG - DeliveryChannelImpl - Notified: ID: > > > > > > > > > > > 10.40.16.154-1152419544a-28 :1(e99889) in > > > DeliveryChannel{ID: > > > > > > > 10.40.1 > > > > > > > > > > > 6.154-1152419544a-0:1} from sendSync > > > > > > > > > > > > > > > > > > > > > > On 9/20/07, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > > > > > > > > > > > It seems that nothing is received by then > > > WS-Notification > > > > > > > component. > > > > > > > > > > > > > > > > > > > > > > Can you raise the log level to DEBUG and see what is > > > > > displayed ? > > > > > > > > > > > > > > > > > > > > > > > > On 9/20/07, Ryan Moquin <[EMAIL PROTECTED]> > wrote: > > > > > > > > > > > > > It's actually the JAXB objects I generated with > CXF > > > for my > > > > > > > > > > webservices. > > > > > > > > > > > > > Those should be JAXB2 elements. They are the > elements > > > I > > > > > > > return > > > > > > > > > > from my > > > > > > > > > > > > > webservice to a connected client. > > > > > > > > > > > > > > > > > > > > > > > > > > On 9/20/07, Guillaume Nodet < [EMAIL PROTECTED]> > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > What kind of object do you send ? IIRC it has to > be > > > a > > > > > DOM > > > > > > > > > > element or a > > > > > > > > > > > > > > JAXB2 pojo so that JAXB2 can marshal it to xml. > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 9/20/07, Ryan Moquin <[EMAIL PROTECTED]> > > > wrote: > > > > > > > > > > > > > > > I'm having some trouble when attempting to > publish > > > a > > > > > > > > > > > > notification. When > > > > > > > > > > > > > > I > > > > > > > > > > > > > > > do, I get this error: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ERROR - WSNComponent - Error > > > > > processing > > > > > > > > > > exchange > > > > > > > > > > > > > > InOnly[ > > > > > > > > > > > > > > > id: ID:192.168.1.2-11520deb240-28:0 > > > > > > > > > > > > > > > status: Active > > > > > > > > > > > > > > > role: provider > > > > > > > > > > > > > > > endpoint: Broker > > > > > > > > > > > > > > > in: null > > > > > > > > > > > > > > > ] > > > > > > > > > > > > > > > java.lang.IllegalArgumentException: source > > > parameter > > > > > must > > > > > > > not > > > > > > > > > > be > > > > > > > > > > > > null > > > > > > > > > > > > > > > at > > > > > > > > > > > javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal > > > > > > > > > > > > ( > > > > > > > > > > > > > > > AbstractUnmarshallerImpl.java:98) > > > > > > > > > > > > > > > at > > > > > > > > > > org.apache.servicemix.wsn.component.WSNEndpoint.process( > > > > > > > > > > > > > > > WSNEndpoint.java:128) > > > > > > > > > > > > > > > at > > > > > > > > > > > org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess > > > > > > > > > > > > ( > > > > > > > > > > > > > > > AsyncBaseLifeCycle.java:538) > > > > > > > > > > > > > > > at > > > > > > > > > > > > > > > > > > > > > > org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange( > > > > > > > > > > > > > > > AsyncBaseLifeCycle.java:490) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > My code that causes this is: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > private void sendNotification(Object > notification) > > > { > > > > > > > > > > > > > > > try { > > > > > > > > > > > > > > > if(wsnBroker == null) > > > > > > > > > > > > > > > createWsnBroker(); > > > > > > > > > > > > > > > wsnBroker.notify("notificationTopic", > > > > > notification); > > > > > > > > > > > > > > > } catch (Exception e) { > > > > > > > > > > > > > > > e.printStackTrace(); > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I've looked and my notification object isn't > null, > > > is > > > > > > > there > > > > > > > > > > > > something > > > > > > > > > > > > > > called > > > > > > > > > > > > > > > source somewhere that I need to set? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > > > > Guillaume Nodet > > > > > > > > > > > > > > ------------------------ > > > > > > > > > > > > > > Blog: http://gnodet.blogspot.com/ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > Cheers, > > > > > > > > > > > > Guillaume Nodet > > > > > > > > > > > > ------------------------ > > > > > > > > > > > > Blog: http://gnodet.blogspot.com/ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > Cheers, > > > > > > > > > > Guillaume Nodet > > > > > > > > > > ------------------------ > > > > > > > > > > Blog: http://gnodet.blogspot.com/ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > Cheers, > > > > > > > Guillaume Nodet > > > > > > > ------------------------ > > > > > > > Blog: http://gnodet.blogspot.com/ > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Cheers, > > > > > Guillaume Nodet > > > > > ------------------------ > > > > > Blog: http://gnodet.blogspot.com/ > > > > > > > > > > > > > > > > > > -- > > > Cheers, > > > Guillaume Nodet > > > ------------------------ > > > Blog: http://gnodet.blogspot.com/ > > > > > > > > -- > Cheers, > Guillaume Nodet > ------------------------ > Blog: http://gnodet.blogspot.com/ >
