synapse-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hubert, Eric" <eric.hub...@jamba.net>
Subject RE: How to send back a fault from an in-sequence
Date Fri, 23 May 2008 08:13:32 GMT
Hi Ruwan,

 

It seems to me as we have been on the right track on this. We will check
to use this way, which looks more or less like we tried to achieve using
the scripting approach. We followed synapse example 352, but there we
always received an exception. I'll go and grep it. Yes, here it is:

 

2008-05-23 10:41:04,358 [127.0.0.1-berjbolle-lx1] [I/O dispatcher 5]
INFO PipeImpl Using native OS Pipes for event-driven to stream IO
bridging

2008-05-23 10:41:04,451 [127.0.0.1-berjbolle-lx1] [HttpServerWorker-1]
ERROR ScriptMediator The script engine returned an error executing the
inlined js script function mediate

com.sun.phobos.script.util.ExtendedScriptException:
org.mozilla.javascript.EvaluatorException: The choice of Java
constructor setTo matching JavaScript argument types (null) is
ambiguous; candidate constructors are:

    void setTo(java.lang.String)

    void setTo(org.apache.axis2.addressing.EndpointReference) (<Unknown
Source>#2)in: <Unknown Source>at line no: 2

        at
com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledS
cript.java:68)

        at javax.script.CompiledScript.eval(CompiledScript.java:64)

        at
org.apache.synapse.mediators.bsf.ScriptMediator.mediateForInlineScript(S
criptMediator.java:248)

        at
org.apache.synapse.mediators.bsf.ScriptMediator.invokeScript(ScriptMedia
tor.java:195)

        at
org.apache.synapse.mediators.bsf.ScriptMediator.mediate(ScriptMediator.j
ava:168)

        at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMe
diator.java:58)

        at
org.apache.synapse.mediators.filters.InMediator.mediate(InMediator.java:
60)

        at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMe
diator.java:58)

        at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMedia
tor.java:125)

        at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis
2SynapseEnvironment.java:176)

        at
org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMess
ageReceiver.java:89)

        at
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)

        at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostReques
t(HTTPTransportUtils.java:275)

        at
org.apache.synapse.transport.nhttp.ServerWorker.processPost(ServerWorker
.java:238)

        at
org.apache.synapse.transport.nhttp.ServerWorker.run(ServerWorker.java:19
4)

        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecuto
r.java:650)

        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:675)

        at java.lang.Thread.run(Thread.java:595)

Caused by: org.mozilla.javascript.EvaluatorException: The choice of Java
constructor setTo matching JavaScript argument types (null) is
ambiguous; candidate constructors are:

    void setTo(java.lang.String)

    void setTo(org.apache.axis2.addressing.EndpointReference) (<Unknown
Source>#2)

        at
org.mozilla.javascript.DefaultErrorReporter.runtimeError(DefaultErrorRep
orter.java:98)

        at
org.mozilla.javascript.Context.reportRuntimeError(Context.java:966)

        at
org.mozilla.javascript.Context.reportRuntimeError(Context.java:1022)

        at
org.mozilla.javascript.Context.reportRuntimeError3(Context.java:1000)

        at
org.mozilla.javascript.NativeJavaMethod.findFunction(NativeJavaMethod.ja
va:385)

        at
org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:156)

        at
org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66)

        at org.mozilla.javascript.gen.c3._c0(<Unknown Source>:2)

        at org.mozilla.javascript.gen.c3.call(<Unknown Source>)

        at
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:340)

        at
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2758)

        at org.mozilla.javascript.gen.c3.call(<Unknown Source>)

        at org.mozilla.javascript.gen.c3.exec(<Unknown Source>)

        at
com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledS
cript.java:55)

        ... 17 more

 

So while looking at this stack it seems as if the replyTo would be null.
Maybe this is only some scripting problem. Could someone please check
the example. If it is also not working for someone else, we should file
a JIRA. Or can this not work from within the main-sequence for some
reason? Basically it is the same as your decribed mediator sequence but
with scripting, or am I wrong?

 

 

Regards,

   Eric

 

________________________________

Small modification;

On Thu, May 22, 2008 at 9:21 PM, Ruwan Linton <ruwan.linton@gmail.com>
wrote:

Hi Eric,

Please see my comments in line;

On Thu, May 22, 2008 at 8:53 PM, Hubert, Eric <eric.hubert@jamba.net>
wrote:

Hi,

how can we send back a fault from an in-sequence? Regarding the Hessian
support, is there a way to generate a Hessian fault?


If the incoming message is a hessian message and if you 

*	create a SOAP fault, 
*	set the RESPONSE=true property and 
*	copy the ReplyTo as To 

I forgot to mention that you will obviously need to send as well to send
back the generated response,

So the set of mediators required are [makefault, property, header, send]

Thanks,
Ruwan 

	*	 

	as described in the Sample 5
<http://synapse.apache.org/Synapse_Samples.html#Sample5>  then you will
be able to send back a hessian fault.

		
		
		Background:
		1) In a switch mediator within the in-sequence we want
to send back a
		fault for the default case and log this.

	
	Can be easily done as described above.
	 

		
		
		2) If the requested URL does not match with any proxy
service
		definitions, Synapse sends back a 202 response to the
client. If we got
		it right synapse always uses the main-sequence if no
other sequence
		matches. So also for this case we would like to send
back a fault from
		within the in-sequence of the main-sequence.


A minor correction to this at first, if the message is not dispatched to
any of the proxy services on Synapse then the message will be directed
to the main sequence of synapse. (synapse dose not match over any other
sequences but just the proxy services for incoming messages)

If you just have proxy services (service mediation only) and no message
mediation (messages coming into main sequence), then you can assume a
message reaching the main sequence as a fault message and send back a
fault, using the same strategy as described above inside the main
sequence.


Mime
View raw message