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]

Reply via email to