Hi all,
I get a very strange error (on the client side) when I try to send
multiple (equals, in my case: the submitted requests are the same
of the
"echo" sample) requests to my service. The error happens *only* when
multiple requests are submitted, i.e., if the program sends only 1
requests no errors happen.
INFO StreamRequestMyServiceClient:main - Sending [2] requests
INFO StreamRequestMyServiceClient:send - Sent [2] requests
INFO StreamRequestMyServiceClient$QospCallback:onComplete -
Received
respose [1/2]
INFO StreamRequestMyServiceClient$QospCallback:onComplete -
<soapenv:Body
xmlns:soapenv="http://schemas.xmlsoap.org/soap/
envelope/"><client:echo
xmlns:client="http://org.ncl.ac.uk/qosp/clients/codestore"
xmlns:tns="http://ws.apache.org/axis2"><client:Text>QoSP Echo
String</client:Text></client:echo></soapenv:Body>
INFO StreamRequestMyServiceClient$QospCallback:onComplete - 1
are missing
ERROR StreamRequestMyServiceClient:logException - ERROR!:
ERROR StreamRequestMyServiceClient:logException -
org.apache.axis2.AxisFault: unknown
at org.apache.axis2.util.CallbackReceiver.receive
(CallbackReceiver.java:65)
at org.apache.axis2.engine.AxisEngine.receiveFault
(AxisEngine.java:599)
at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRe
quest(HTTPTransportUtils.java:282)
at org.apache.axis2.transport.http.HTTPWorker.service
(HTTPWorker.java:238)
at
org.apache.axis2.transport.http.server.DefaultHttpServiceProcessor.d
oService(DefaultHttpServiceProcessor.java:177)
at org.apache.http.protocol.HttpService.handleRequest
(HttpService.java:123)
at
org.apache.axis2.transport.http.server.DefaultHttpServiceProcessor.r
un(DefaultHttpServiceProcessor.java:236)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor
$Worker.runTask(ThreadPoolExecutor.java:650)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.Exception: org.apache.axis2.AxisFault
at
org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver.invokeBusines
sLogic(RawXMLINOnlyMessageReceiver.java:104)
at
org.apache.axis2.receivers.AbstractInMessageReceiver.receive
(AbstractInMessageReceiver.java:34)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:503)
at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRe
quest(HTTPTransportUtils.java:284)
at org.apache.axis2.transport.http.AxisServlet.doPost
(AxisServlet.java:144)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:178)
at
org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:105)
at
org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:869)
at
org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.processConnection
(Http11BaseProtocol.java:667)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket
(PoolTcpEndpoint.java:527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt
(LeaderFollowerWorkerThread.java:80)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
at org.apache.axis2.AxisFault.<init>(AxisFault.java:159)
... 10 more
The following chunk of code submits the requests:
/**
* Sends [EMAIL PROTECTED] #requests} requests to the cluster manager.
*/
private final void send() {
final OMElement payload = ClientUtils.getEchoOMElement();
// Creates and sets the options
Options options = new Options();
String routerEPR = System.getProperty("qosp.manager.epr");
if (routerEPR == null) {
throw new RuntimeException("Unable to get the router EPR");
}
routerEPR = routerEPR.concat("MyService");
options.setTo(new EndpointReference(routerEPR));
options.setAction("urn:echo");
// The boolean flag informs the axis2 engine to use two separate
// transport connection to retrieve the response.
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setUseSeparateListener(true);
options.setSoapVersionURI
(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
ServiceClient sender = null;
try {
sender = new ServiceClient();
sender.engageModule(RoutingConstants.MODULE_ADDRESSING);
sender.setOptions(options);
QospCallback callback = new QospCallback();
for (int i = 0; i < this.requests.get(); i++) {
sender.sendReceiveNonBlocking(payload, callback);
}
if (log.isInfoEnabled()) {
log.info("Sent [" + this.requests.get() + "] requests");
}
// Wait till the callback receives the response.
while (!callback.isComplete()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//
}
}
} catch (AxisFault e) {
if (log.isEnabledFor(Level.ERROR)) {
logException(e);
}
} finally{
try {
if (sender != null)
sender.finalizeInvoke();
} catch (AxisFault axisFault) {
//
}
}
} //-- send()
while this is the callback object used to retrieve asynchronous
responses:
/**
* Sets the completion status.
*
* @param complete The completion status.
*/
@Override
public void setComplete(boolean complete) {
super.setComplete((requests.decrementAndGet() == 0));
} //-- setComplete()
/**
* Gets the completion status.
*
* @return The completion status.
*/
@Override
public boolean isComplete() {
return (requests.get() == 0);
} //-- isComplete()
/**
* Handles asynchronous results.
*
* @param result The asynchronous result.
*/
@Override
public void onComplete(AsyncResult result) {
this.setComplete(true);
if (log.isInfoEnabled()) {
log.info("Received respose [" + (++ this.success)
+ "/" + this.toReceive + "]");
log.info(result.getResponseEnvelope().getBody().toString());
}
if (this.isComplete()) {
log.info("All requests are complete");
} else {
log.info(requests.get() + " are missing");
}
} //-- onComplete()
/**
* Handles asynchronous errors.
*
* @param e The exception.
*/
@Override
public void onError(Exception e) {
if (log.isEnabledFor(Level.ERROR)) {
logException(e);
}
} //-- onError()
Any idea?
Thanks in advance,
Michele
--------------------------------------------------------------------
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]