You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@synapse.apache.org by Jeremy Girard <jg...@sqli.com> on 2007/12/03 17:14:58 UTC

Response problème

Hi all,

 

I try to catch all services which does not match to a registered proxy and
then send back a soap fault message.

 

To do this I put in my synapse.xml : 

 

<filter source="get-property('To')" regex=".*/.*">

        <makefault>

                <code value="tns:Receiver"

 
xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>

                <reason value="Wrong service" />                

        </makefault>    

        <log level="full" />    

        <send/>

</filter>

 

It works fine, wrong call to webservice are caught but I’ve got the
following exception

 

[HttpServerWorker-1] ERROR Axis2Sender - Unexpected error during sending
message out

org.apache.axis2.AxisFault: Address information does not exist in the
Endpoint Reference (EPR).The system cannot infer the transport mechanism.

        at
org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:
65)

        at
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.ex
ecuteImpl(DynamicAxisOperation.java:118)

        at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)

        at
org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPCl
ient.java:250)

        at
org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:55)

        at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvir
onment.java:200)

        at
org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:
97)

        at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat
or.java:60)

        at
org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.j
ava:71)

        at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat
or.java:60)

        at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.
java:122)

        at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2Syn
apseEnvironment.java:154)

        at
org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageR
eceiver.java:89)

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

        at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HT
TPTransportUtils.java:275)

        at
org.apache.synapse.transport.nhttp.ServerWorker.processPost(ServerWorker.jav
a:218)

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

        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.ja
va:650)

        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
75)

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

 

and my soap fault is not sent.

 

Thanks in advance,

 

Jeremy

 


Re: Response problème

Posted by "Asankha C. Perera" <as...@wso2.com>.
Hi Jeremy

The makefault mediator simply replaces the message with a SOAP fault. To
send the error back to the caller, you need to remove the 'To' header
and mark the message as a RESPONSE to change the direction. (Check
sample # 5 as well) I have copied the update you require below

asankha

> <filter source="get-property('To')" regex=".*/.*">
>
>         <makefault>
>
>                 <code value="tns:Receiver"
>
>  
> xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
>
>                 <reason value="Wrong service" />                
>
>         </makefault>    
>   

*        <property name="RESPONSE" value="true"/>
        <header name="To" action="remove"/>*

>         <log level="full" />    
>
>         <send/>
>
> </filter>
>
>