Hi Ruwan,
I now tried this approach with the following synapse-config-block:
<syn:sequence name="main">
<syn:makefault version="soap11">
<syn:code
xmlns:sf11="http://schemas.xmlsoap.org/soap/envelope/"
value="sf11:Client"/>
<syn:reason value="No service found for specified URL."/>
</syn:makefault>
<syn:property name="RESPONSE" value="true"/>
<syn:header name="To" expression="get-property('ReplyTo')"/>
<syn:send/>
</syn:sequence>
Is there anything wrong with this? It is more or less copied from the
example. I get the following exception:
2008-05-23 16:38:15,834 [10.137.148.73-carl] [HttpServerWorker-10] ERROR
HttpCoreNIOSender Malformed destination EPR :
java.net.MalformedURLException: no protocol:
at java.net.URL.<init>(URL.java:567)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at
org.apache.synapse.transport.nhttp.HttpCoreNIOSender.sendAsyncRequest(Ht
tpCoreNIOSender.java:317)
at
org.apache.synapse.transport.nhttp.HttpCoreNIOSender.invoke(HttpCoreNIOS
ender.java:256)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:448)
at
org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:138)
at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseE
nvironment.java:219)
at
org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.j
ava:154)
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)
Regards,
Eric
________________________________
From: Ruwan Linton [mailto:[EMAIL PROTECTED]
Sent: Friday, May 23, 2008 12:36 PM
To: [email protected]
Subject: Re: How to send back a fault from an in-sequence
Eric,
I still don't understand why do you need a script to do this. Is
there any other requirements except for sending a hessian fault back?
If not I would strongly suggest you to go with the existing
mediators and if there are any issues lets find them out and fix them.
Thanks,
Ruwan
On Fri, May 23, 2008 at 3:40 PM, Hubert, Eric
<[EMAIL PROTECTED]> wrote:
Hi Ruwan,
Thanks for your cross test! No, we didn't change any of
the libraries. If I find the time, I'll try the sample on my own and
contact the developer to find out more about his testing environment. I
guess he was testing locally. So maybe he uses another Java-Version or
something like that. If the problem does not happen in the integration
environment we may try to narrow it down.
Regards,
Eric
________________________________
From: Ruwan Linton [mailto:[EMAIL PROTECTED]
Sent: Friday, May 23, 2008 11:15 AM
To: [email protected]
Subject: Re: How to send back a fault from an
in-sequence
Hi Eric,
I just tried the sample 352 and was working fine for me.
May be this is a scripting problem.
Are you using some other scripting jar than what we ship
with Synapse/ESB?
Thanks,
Ruwan
On Fri, May 23, 2008 at 1:43 PM, Hubert, Eric
<[EMAIL PROTECTED]> wrote:
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
<[EMAIL PROTECTED]> wrote:
Hi Eric,
Please see my comments in line;
On Thu, May 22, 2008 at 8:53 PM, Hubert, Eric
<[EMAIL PROTECTED]> 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.
--
Ruwan Linton
http://www.wso2.org - "Oxygenating the Web Services
Platform"
--
Ruwan Linton
http://www.wso2.org - "Oxygenating the Web Services Platform"