[xgws-user] Problem with WS-Messenger
Yi Huang
yihuan_at_cs.indiana.edu
Tue, 27 Mar 2007 12:46:09 -0400
This is a multi-part message in MIME format.
------=_NextPart_000_0099_01C7706D.E5D387E0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hi,
Thanks for reporting the bug. I have reproduced the problem and fixed =
it.
You can replace the attached YFilterInfo.java in the wsmg.adapter.XPath
package with the attached file. Recompile and restart the server.
I also updated the file on the web site with the updated file.
Thanks,
Yi
-----Original Message-----
From: xgws-user-admin_at_cs.indiana.edu =
[mailto:xgws-user-admin_at_cs.indiana.edu]
On Behalf Of Alex Piqueras
Sent: Wednesday, March 21, 2007 1:28 PM
To: Yi Huang
Cc: xgws-user_at_cs.indiana.edu
Subject: Re: [xgws-user] Problem with WS-Messenger
Hi,
When I use:
subscriptionId1 =3D
client.subscribe(producer,consumer,topic,"//content[text()=3D\"Hello\"]")=
;
client.unSubscribe(producer,subscriptionId1);
I get the next stack trace:
SubscriptionID received=3D<wse:Identifier=20
xmlns:wse=3D"http://schemas.xmlsoap.org/ws/2004/08/eventing">Xsub1_at_117449=
74308
32</wse:Identifier>
SubscriptionId=3D<wse:Identifier=20
xmlns:wse=3D"http://schemas.xmlsoap.org/ws/2004/08/eventing">Xsub1_at_117449=
74308
32</wse:Identifier>
Exception in thread "main" xsul.invoker.DynamicInfosetInvokerException:=20
HTTP server error 500 Runtime exception when processing request=20
connection2on12345 body=3D"
<html>
<head>
<title>Runtime exception when processing request connection2on12345:=20
java.lang.Integer</title>
</head>
<body>
<h1>Runtime exception when processing request connection2on12345:=20
java.lang.Integer</h1>
<p><pre>java.lang.ClassCastException: java.lang.Integer
at=20
wsmg.adapter.XPath.YFilterInfo.removeSubscription(YFilterInfo.java:82)=
3;
at=20
wsmg.adapter.XPath.YFilterAdapter.handleUnsubscribe(YFilterAdapter.java:1=
74)
at=20
wsmg.processors.SubscriptionManager.removeSubscription(SubscriptionManage=
r.j
ava:548)
at=20
wsmg.processors.SubscriptionManager.unsubscribe(SubscriptionManager.java:=
533
)
at =
wsmg.WSMGService.executeSoapEnvelope(WSMGService.java:325)
at=20
wsmg.xsul.XSULDedicatedBrockerService.processHttpXml(XSULDedicatedBrocker=
Ser
vice.java:180)
at=20
xsul.processor.http.HttpDynamicInfosetProcessor.service(HttpDynamicInfose=
tPr
ocessor.java:189)
at=20
wsmg.xsul.XSULDedicatedBrockerService.service(XSULDedicatedBrockerService=
.ja
va:257)
at=20
xsul.processor.http.HttpDynamicInfosetProcessor$HdisServlet.service(HttpD=
yna
micInfosetProcessor.java:267)
at=20
xsul.http_server.impl.HttpMiniServerConnection.process(HttpMiniServerConn=
ect
ion.java:183)
at=20
xsul.http_server.impl.HttpMiniServerConnection.run(HttpMiniServerConnecti=
on.
java:112)
at java.lang.Thread.run(Unknown Source)
</pre></p>
</body>
</html>"
at=20
xsul.invoker.http.HttpDynamicInfosetInvoker.invokeXml(HttpDynamicInfosetI=
nvo
ker.java:369)
at xsul.ws_addressing.WsaInvoker.sendXml(WsaInvoker.java:318)
at=20
xsul.ws_addressing.WsaInvoker.invokeMessageOptimzed(WsaInvoker.java:233)
at =
xsul.ws_addressing.WsaInvoker.invokeMessage(WsaInvoker.java:224)
at=20
wsmg.CommonClientProcessing.unSubscribe(CommonClientProcessing.java:314)
at wsmg.WseClientAPI.unSubscribe(WseClientAPI.java:53)
at ejemplo.WseConsumer.main(WseConsumer.java:79)
However, when I use:
subscriptionId1 =3D client.subscribe(producer,consumer,topic,null);
client.unSubscribe(producer,subscriptionId1);
it works successfully. I don't know what is wrong.
Thank you for your help.
--=20
-------------------------------------------------------
Alejandro Piqueras Meseguer (apiqueras_at_dif.um.es)
Dept. Ingenier=EDa de la Informaci=F3n y las Comunicaciones
Facultad de Inform=E1tica
Universidad de Murcia=20
_______________________________________________
xgws-user mailing list
xgws-user_at_cs.indiana.edu
http://mailman.cs.indiana.edu/mailman/listinfo/xgws-user
------=_NextPart_000_0099_01C7706D.E5D387E0
Content-Type: application/octet-stream;
name="YFilterInfo.java"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="YFilterInfo.java"
package wsmg.adapter.XPath;=0A=
=0A=
import java.util.HashMap;=0A=
import java.util.LinkedList;=0A=
import java.util.List;=0A=
=0A=
import wsmg.SoapClientFault;=0A=
import wsmg.SubscriptionState;=0A=
import wsmg.adapter.ConsumerList;=0A=
import wsmg.adapter.ConsumerListManager;=0A=
import wsmg.config.WSMGParameter;=0A=
=0A=
import edu.berkeley.cs.db.yfilter.filter.EXfilterBasic;=0A=
import edu.berkeley.cs.db.yfilter.filter.SystemGlobals;=0A=
import edu.berkeley.cs.db.yfilterplus.queryparser.Query;=0A=
import edu.berkeley.cs.db.yfilterplus.queryparser.XPQuery;=0A=
import edu.berkeley.cs.db.yfilterplus.xmltree.XMLTree;=0A=
=0A=
public class YFilterInfo {=0A=
private EXfilterBasic yfilter=3Dnew EXfilterBasic();=0A=
private HashMap yFilterIdToXPath=3Dnew HashMap(); =0A=
private HashMap yFilterIdToQuery=3Dnew HashMap();=0A=
private HashMap xPathToYFilterId=3Dnew HashMap();=0A=
private ConsumerListManager consumerListmanager=3Dnew =
ConsumerListManager();=0A=
private int index =3D 0;=0A=
private int counter=3D0;=0A=
=0A=
public EXfilterBasic getYfilter() {=0A=
return yfilter;=0A=
}=0A=
public void setYfilter(EXfilterBasic yfilter) {=0A=
this.yfilter =3D yfilter;=0A=
}=0A=
public HashMap getYFilterIdToXPath() {=0A=
return yFilterIdToXPath;=0A=
}=0A=
public void setYFilterIdToXPath(HashMap filterIdToXPath) {=0A=
yFilterIdToXPath =3D filterIdToXPath;=0A=
}=0A=
=0A=
public void addXPathQuery(String xpathExpression, String subscriptionId,=0A=
SubscriptionState subscribeRequest) {=0A=
index++;=0A=
counter++;=0A=
if (WSMGParameter.debugYFilter)=0A=
System.out.println("QueryExp=3D" + xpathExpression); =0A=
Integer yFilterIdObj =3D (Integer) =
xPathToYFilterId.get(xpathExpression);=0A=
int yFilterId =3D -1;=0A=
if (yFilterIdObj !=3D null) {=0A=
yFilterId =3D yFilterIdObj.intValue();=0A=
} else {=0A=
Query query=3DXPQuery.parseQuery(xpathExpression, index);=0A=
if(query=3D=3Dnull){=0A=
throw new SoapClientFault("Invalid XPath =
expression:"+xpathExpression);=0A=
}=0A=
if (WSMGParameter.debugYFilter)=0A=
System.out.println("addSubscription " + xpathExpression=0A=
+ " query :" + query);=0A=
yFilterId =3D yfilter.addQuery(query);=0A=
if (WSMGParameter.debugYFilter)=0A=
yfilter.printQueryIndex();=0A=
xPathToYFilterId.put(xpathExpression, Integer.valueOf(yFilterId));=0A=
yFilterIdToXPath.put(new Integer(yFilterId), xpathExpression);=0A=
yFilterIdToQuery.put(new Integer(yFilterId), =0A=
query); =0A=
}=0A=
if (WSMGParameter.debugYFilter)=0A=
System.out.println("YFilterId=3D" + yFilterId);=0A=
=0A=
consumerListmanager.addToConsumerList(xpathExpression,=0A=
subscribeRequest, subscriptionId);=0A=
}=0A=
=0A=
public int removeSubscription(String subscriptionId){ =0A=
=0A=
String =
xPath=3DconsumerListmanager.getTokenBySubscriptionId(subscriptionId);=0A=
int =
result=3DconsumerListmanager.removeFromConsumerList(subscriptionId, =
xPath);=0A=
if(result=3D=3D0){=0A=
return 0;=0A=
}=0A=
int =
currentConsumerCount=3DconsumerListmanager.getConsumerListByToken(xPath).=
size();=0A=
if(currentConsumerCount=3D=3D0){=0A=
Integer yFilterId=3D(Integer)xPathToYFilterId.get(xPath);=0A=
Query q =3D (Query) yFilterIdToQuery.get(yFilterId);=0A=
yfilter.deleteQuery( q,=0A=
q.getQueryId( ) );=0A=
yFilterIdToQuery.remove(yFilterId);=0A=
}=0A=
counter--;=0A=
return result;=0A=
}=0A=
=0A=
public List getMatchingConsumerList(String messageString){=0A=
List matchingConsumerList=3Dnew LinkedList();=0A=
XMLTree tree =3D new XMLTree(new =
java.io.StringReader(messageString) );=0A=
if(WSMGParameter.debugYFilter)=0A=
tree.print();=0A=
yfilter.setEventSequence( tree.getEvents( ) );=0A=
yfilter.startParsing( );=0A=
=0A=
// print the matched queries //=0A=
if ( SystemGlobals.hasQueries )=0A=
{=0A=
if(WSMGParameter.debugYFilter)=0A=
yfilter.printQueryResults( System.out );=0A=
}=0A=
else=0A=
{=0A=
System.out.println( "no match" );=0A=
return matchingConsumerList;=0A=
}=0A=
=0A=
=0A=
java.util.Iterator it =3D yfilter.getMatchedQueries( =
).iterator( );=0A=
while ( it.hasNext( ) )=0A=
{=0A=
Integer qid =3D (Integer) it.next( );=0A=
// System.out.println("qid=3D"+qid);=0A=
=0A=
String xpath=3D(String)yFilterIdToXPath.get(qid);=0A=
ConsumerList consumerList =3D =
consumerListmanager.getConsumerListByToken(xpath);=0A=
=0A=
if (consumerList !=3D null) {// has subscription to this topic=0A=
matchingConsumerList.addAll(consumerList.getConsumerList());=0A=
}=0A=
}=0A=
yfilter.clear(); =0A=
return matchingConsumerList;=0A=
}=0A=
public int getCounter() {=0A=
return counter;=0A=
}=0A=
=0A=
=0A=
=0A=
}=0A=
------=_NextPart_000_0099_01C7706D.E5D387E0--