ok, two things:
1. I added a FilterSerializer and registered it as part of the WSN
capability initialization. This means that you should be able to change a
subscription's filter using SetResourceProperties so long as you add that
operation to your WSDL and make sure the capability is listed in muse.xml.
2. I updated the NotificationProducer implementation so that you can add
custom filter types. Here's what you have to do:
a. Implement the Filter interface (it has one method, accepts()) to do the
message analysis you want. In your case, your Filter class will be using
custom XPath functions on the message content.
b. Implement the FilterFactoryHandler interface (two methods) and have it
return a new instance of your Filter class when the XML provided has the
right dialect. It should look something like this:
public MyFilterHandler implements FilterFactoryHandler
{
public boolean accepts(QName filterName, String filterDialect)
{
return
filterName.equals(WsnConstants.MESSAGE_CONTENT_QNAME) &&
filterDialect.equals("some URI you made up");
}
public Filter newInstance(Element filterXML)
{
String expression = XmlUtils.extractText(filterXML);
return new MyFilter();
}
}
c. add the handler to the FilterFactory in one of your initialize()
methods:
FilterFactory.getInstance().addHandler(new MyFilterHandler());
This will make it so that your handler is queried during the subscribe()
requests and allowed to create your custom Filter objects if appropriate.
Your filter will then be used by the subscription resource to decide what
messages to send out.
As a bonus, you now get to test both scenarios and let me know if they
work. :) I am taking care of the regression testing for previous
projects.
Dan
dnguyen <[EMAIL PROTECTED]> wrote on 02/28/2007 05:06:20 PM:
>
> Whoops! Sorry about that...I copied the wrong thing from the muse.xml
file.
> I did use the Get capability, which is what the original post should
have
> had. That did not work for me. It looked like this:
>
> *********************************************
> <resource-type>
> <context-path>SubscriptionManager</context-path>
> <wsdl>
> <wsdl-file>wsdl/WS-BaseNotification-1_3.wsdl</wsdl-file>
> <wsdl-port-type>wsntw:SubscriptionManager</wsdl-port-type>
> </wsdl>
>
> <java-id-factory-class>org.apache.muse.core.routing.
> CounterResourceIdFactory</java-id-factory-class>
>
>
<java-resource-class>org.apache.muse.ws.resource.impl.SimpleWsResource</java-
> resource-class>
> <capability>
>
>
<capability-uri>http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata</capability-uri>
>
> <java-capability-class>org.apache.muse.ws.metadata.impl.
> SimpleMetadataExchange</java-capability-class>
> </capability>
> <capability>
>
>
<capability-uri>http://docs.oasis-open.org/wsrf/rpw-2/Get</capability-uri>
>
> <java-capability-class>org.apache.muse.ws.resource.properties.get.impl.
> SimpleGetCapability</java-capability-class>
> </capability>
> <capability>
>
>
<capability-uri>http://docs.oasis-open.org/wsrf/rpw-2/Set</capability-uri>
>
> <java-capability-class>org.apache.muse.ws.resource.properties.set.impl.
> SimpleSetCapability</java-capability-class>
> </capability>
> <capability>
>
>
<capability-uri>http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager</capability-uri>
>
> <java-capability-class>org.apache.muse.ws.notification.impl.
> SimpleSubscriptionManager</java-capability-class>
> <init-param>
> <param-name>trace-notifications</param-name>
> <param-value>true</param-value>
> </init-param>
> </capability>
> <capability>
>
> <capability-uri>http://docs.oasis-open.
> org/wsrf/rlw-2/ImmediateResourceTermination</capability-uri>
>
> <java-capability-class>org.apache.muse.ws.resource.lifetime.impl.
> SimpleImmediateTermination</java-capability-class>
> </capability>
> <capability>
>
> <capability-uri>http://docs.oasis-open.
> org/wsrf/rlw-2/ScheduledResourceTermination</capability-uri>
>
> <java-capability-class>org.apache.muse.ws.resource.lifetime.impl.
> SimpleScheduledTermination</java-capability-class>
> </capability>
> <init-param>
> <param-name>validate-wsrp-schema</param-name>
> <param-value>false</param-value>
> </init-param>
> </resource-type>
> ************************************************
>
>
> Vinh Nguyen (vinguye2) wrote:
> >
> > The operation you are calling is SetResourceProperties, but you are
> > adding a Get operation to muse.xml. You need to add the correct "Set"
> > operation to muse.xml. If you are using Axis2, you also need to add
the
> > appropriate action to services.xml.
> >
> >
> > -----Original Message-----
> > From: dnguyen [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, February 28, 2007 1:39 PM
> > To: [email protected]
> > Subject: Problem updating subscription resource property.
> >
> >
> > I am trying to update the filter in the SubscriptionClient through the
> > updateResourceProperty() method but not having any success. I get the
> > error
> > below:
> >
> >
> > ******************************
> > org.apache.muse.ws.addressing.soap.SoapFault: [ID =
> > 'ActionNotSupported'] The re source at 'SubscriptionManager' does not
> > expose an operation with the WS-Action
> >
'http://docs.oasis-open.org/wsrf/rpw-2/SetResourceProperties/SetResource
> > PropertiesRequest'
> > through any of its capabilities.
> > at
> >
org.apache.muse.core.AbstractResourceClient.invoke(AbstractResourceClien
> > t.java:279)
> > at
> >
org.apache.muse.core.AbstractResourceClient.invoke(AbstractResourceClien
> > t.java:235)
> > at
> >
org.apache.muse.ws.resource.remote.WsResourceClient.setResourcePropertie
> > s(WsResourceClient.java:175)
> > at
> >
org.apache.muse.ws.resource.remote.WsResourceClient.updateResourceProper
> > ty(WsResourceClient.java:202)
> > at org.apache.muse.test.wsn.WsnTestClient2.main(Unknown
Source)
> > ************************************
> >
> >
> > I then added this to the SubscriptionManager resource in the
> > wsn-producer muse.xml file:
> >
> >
> > *************************************
> > <capability>
> >
> >
<capability-uri>http://docs.oasis-open.org/wsrf/rpw-2/Get</capability-ur
> > i>
> >
> >
<java-capability-class>org.apache.muse.ws.resource.properties.get.impl.S
> > impleGetCapability</java-capability-class>
> > </capability>
> > ************************************
> >
> >
> > But I still get the same exception. I looked in the source code for
> > anything related to SetResourceProperties but didn't find anything
> > helpful.
> > I read that the WS-N spec states that the impl can throw an exception
in
> > this case, but it also says this is allowed. I am not sure if this is
> > allowable in Muse, but the error message indicates it is possible by
> > adding the correct capability. Also, I am not sure I am doing this
> > right. The example I am using is below
> >
> >
> > *******************************
> > package org.apache.muse.test.wsn;
> >
> > import javax.xml.namespace.QName;
> >
> > import java.net.InetAddress;
> > import java.net.URI;
> > import java.net.UnknownHostException;
> >
> > import org.apache.muse.ws.addressing.EndpointReference;
> > import
> > org.apache.muse.ws.notification.remote.NotificationProducerClient;
> > import org.apache.muse.ws.notification.remote.SubscriptionClient;
> > import org.apache.muse.ws.notification.impl.*;
> > import org.apache.muse.ws.notification.WsnConstants;
> > import org.apache.muse.util.xml.*;
> >
> >
> > public class WsnTestClient2
> > {
> > public static URI getLocalAddress(String contextPath, int port)
> > throws UnknownHostException
> > {
> > String ip = InetAddress.getLocalHost().getHostAddress();
> >
> > StringBuffer address = new StringBuffer();
> > address.append("http://");
> > address.append(ip);
> > address.append(':');
> > address.append(port);
> >
> > if (contextPath.charAt(0) != '/')
> > address.append('/');
> >
> > address.append(contextPath);
> >
> > return URI.create(address.toString());
> > }
> >
> > public static void main(String[] args)
> > {
> > try
> > {
> > //
> > // change these to point to different applications/servers
> > //
> > String webAppRoot = "/isr-producer/services";
> > int producer_port =
> > Integer.parseInt(System.getProperty("producer_port","8080"));
> > int consumer_port =
> > Integer.parseInt(System.getProperty("consumer_port","8080"));
> >
> > //
> > // create producer EPR/client, and use it to subscribe
> > // the consumer to all messages
> > //
> >
> > String contextPath = webAppRoot + "/IsrResource";
> > URI address = (args.length == 0) ?
> > getLocalAddress(contextPath,
> > producer_port) : URI.create(args[0] + contextPath);
> > EndpointReference epr = new EndpointReference(address);
> >
> > webAppRoot = "/isr-consumer/services";
> > contextPath = webAppRoot + "/IsrConsumer";
> > address = getLocalAddress(contextPath, consumer_port);
> > EndpointReference consumer = new
EndpointReference(address);
> >
> > //
> > // null filter == send all messages to consumer
> > //
> > NotificationProducerClient producer = new
> > NotificationProducerClient(epr);
> > producer.setTrace(true);
> >
> > SubscriptionClient subscription = null;
> >
> > while( true )
> > {
> > System.out.println( "s - subscribe, u - unsubscribe, v
-
> > view, q - quit" );
> >
> > char choice = (char)System.in.read();
> >
> > if( choice == 's' )
> > {
> > subscription = producer.subscribe(consumer, null,
> > null);
> > }
> > else if( choice == 'u' )
> > {
> > subscription.destroy();
> > }
> > else if( choice == 'v' )
> > {
> >
> >
System.out.println(XmlUtils.toString(subscription.getResourceProperty(Ws
> > nConstants.FILTER_QNAME)[0]));
> > }
> > else if( choice == 'f' )
> > {
> > QName messageName = new
> > QName("http://ws.apache.org/muse/test/wsrf", "MyTopic", "tns");
> >
> > subscription.updateResourceProperty(WsnConstants.FILTER_QNAME, new
> > Object[] { new TopicFilter(messageName) });
> > }
> > else if( choice == 'q' )
> > {
> > break;
> > }
> > }
> > }
> >
> > catch (Throwable error)
> > {
> > error.printStackTrace();
> > }
> > }
> > }
> >
> > --
> > View this message in context:
> >
http://www.nabble.com/Problem-updating-subscription-resource-property.-t
> > f3323382.html#a9239032
> > Sent from the Muse User mailing list archive at Nabble.com.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
>
> --
> View this message in context: http://www.nabble.com/Problem-updating-
> subscription-resource-property.-tf3323382.html#a9239571
> Sent from the Muse User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]