You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by Soactive Inc <so...@gmail.com> on 2006/06/25 09:47:28 UTC

Implementing a Web service proxy

I am trying to implement a simple service proxy on top of Axis2 and ran into
the Synapse project recently.

The following are the requirements of the proxy:

1. The proxy is on the server side and sits in between a client accessing a
Web service and the actual Web service endpoint.

2. The server on which the proxy service is hosted does not contain any of
the service endpoints.

3. The proxy receives requests from the clients and redirects the calls to
the endpoints.

4. The service proxy is itself implemented as a Web service.

I realize that the above requirements are all satisfied using the Synapse
intermediary server. I am now trying to implement this service proxy using
the essential pieces of Synapse without the need to install Synapse (since I
need the proxy to be lightweight and don't need all of the other features
implemented within Synapse). So, to achieve this desired functionality, I
did the following:

a) Implemented a dispatcher class.

b) Registered the dispatcher within Axis2.xml.

c) Implemented a receiver class and invoking the mediate method within the
dispatcher class.

d) Registered this custom receiver in services.xml.

I am appending the content of the various files below. Can someone suggest
if I'm missing something in the above steps. Axis2 seems to be complaining
that the WSDL is missing or that I am not using the RPC message receiver and
I don't see any of this code being executed either.

Best,
Ron

----

// SoapDispatcher.java

package com.myco.framework.service;

import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.HandlerDescription;
import org.apache.axis2.engine.AbstractDispatcher;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.xml.namespace.QName;

/**
 * This is the Axis2 Dispatcher which is registered with the Axis2 engine.
It dispatches
 * each and every message received to the MessageReceiver for processing.
 */
public class SoapDispatcher extends AbstractDispatcher {

    private static final long serialVersionUID = -6970206989111592645L;

    private static final String myco_SERVICE_NAME = "SoapGateway";

    private static final QName MEDIATE_OPERATION_NAME = new
QName("mediate");

    public void initDispatcher() {
        QName qn = new QName("http://service.framework.myco.com",
"SoapDispatcher");
        HandlerDescription hd = new HandlerDescription(qn);
        super.init(hd);
    }

    public AxisService findService(MessageContext mc) throws AxisFault {
        AxisConfiguration ac = mc.getConfigurationContext
().getAxisConfiguration();
        AxisService as = ac.getService(myco_SERVICE_NAME);
        return as;
    }

    public AxisOperation findOperation(AxisService svc, MessageContext mc)
throws AxisFault {
        AxisOperation ao = svc.getOperation(MEDIATE_OPERATION_NAME);
        return ao;
    }
}


=======

axis2.xml

<axisconfig name="SoapAxisJava2.0">
    <!-- ================================================= -->
    <!-- Parameters -->
    <!-- ================================================= -->
    <parameter name="hotdeployment" locked="false">true</parameter>
    <parameter name="hotupdate" locked="false">false</parameter>
    <parameter name="enableMTOM" locked="false">false</parameter>
    <parameter name="sendStacktraceDetailsWithFaults"
locked="false">true</parameter>

    <!-- Uncomment this to enable REST support -->
    <!--    <parameter name="enableREST" locked="false">true</parameter>-->

    <parameter name="userName" locked="false">admin</parameter>
    <parameter name="password" locked="false">axis2</parameter>

    <!-- Always engage addressing for Soap -->
    <module ref="addressing"/>

    <!-- ================================================= -->
    <!-- Message Receivers -->
    <!-- ================================================= -->
    <!--This is the Deafult Message Receiver for the system , if you want to
have MessageReceivers for -->
    <!--all the other MEP implement it and add the correct entry to here ,
so that you can refer from-->
    <!--any operation -->
    <!--Note : You can ovride this for particular service by adding the same
element with your requirement-->
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                         class="
org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                         class="
org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    </messageReceivers>
    <!-- ================================================= -->
    <!-- Transport Ins -->
    <!-- ================================================= -->
    <transportReceiver name="http"
                       class="
org.apache.axis2.transport.http.SimpleHTTPServer">
        <parameter name="port" locked="false">6060</parameter>
        <!--If you want to give your own host address for EPR generation-->
        <!--uncommet following paramter , and set as you required.-->
        <!--<parameter name="hostname" locked="false">http://myApp.com/ws
</parameter>-->
    </transportReceiver>

    <transportReceiver name="tcp"
                       class="org.apache.axis2.transport.tcp.TCPServer">
        <parameter name="port" locked="false">6061</parameter>
        <!--If you want to give your own host address for EPR generation-->
        <!--uncommet following paramter , and set as you required.-->
        <!--<parameter name="hostname"
locked="false">tcp://myApp.com/ws</parameter>-->
    </transportReceiver>

    <!-- ================================================= -->
    <!-- Transport Outs -->
    <!-- ================================================= -->

    <transportSender name="tcp"
                     class="
org.apache.axis2.transport.tcp.TCPTransportSender"/>
    <transportSender name="local"
                     class="
org.apache.axis2.transport.local.LocalTransportSender"/>
    <transportSender name="jms"
                     class="org.apache.axis2.transport.jms.JMSSender"/>
    <transportSender name="http"
                     class="
org.apache.axis2.transport.http.CommonsHTTPTransportSender">
        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
        <parameter name="Transfer-Encoding"
locked="false">chunked</parameter>
    </transportSender>
    <transportSender name="https"
                     class="
org.apache.axis2.transport.http.CommonsHTTPTransportSender">
        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
        <parameter name="Transfer-Encoding"
locked="false">chunked</parameter>
    </transportSender>

    <!-- ================================================= -->
    <!-- Phases  -->
    <!-- ================================================= -->
    <phaseOrder type="inflow">
        <!--  System pre defined phases       -->
         <phase name="Transport">
            <!--<handler name="RequestURIBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.RequestURIBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->
            <!--<handler name="SOAPActionBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->
        </phase>
        <phase name="Security"/>
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase
">
            <handler name="SoapDispatcher"
                     class="com.myco.framework.service.SoapDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <!--<handler name="AddressingBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.AddressingBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->

            <!--<handler name="SOAPMessageBodyBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->

            <handler name="InstanceDispatcher"
                     class="org.apache.axis2.engine.InstanceDispatcher">
                <order phase="PostDispatch"/>
            </handler>
        </phase>
        <!--  System pre defined phases       -->
        <!--   After Postdispatch phase module author or or service author
can add any phase he want      -->
        <phase name="OperationInPhase"/>
    </phaseOrder>
    <phaseOrder type="outflow">
        <!--      user can add his own phases to this area  -->
        <phase name="OperationOutPhase"/>
        <!--system predefined phase-->
        <!--these phase will run irrespective of the service-->
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
    </phaseOrder>
    <phaseOrder type="INfaultflow">
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase
">

            <handler name="SoapDispatcher"
                     class="com.myco.framework.service.SoapDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <!--<handler name="RequestURIBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.RequestURIBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->

            <!--<handler name="SOAPActionBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->

            <!--<handler name="AddressingBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.AddressingBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->

            <!--<handler name="SOAPMessageBodyBasedDispatcher"-->
                     <!--class="
org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">-->
                <!--<order phase="Dispatch"/>-->
            <!--</handler>-->
            <handler name="InstanceDispatcher"
                     class="org.apache.axis2.engine.InstanceDispatcher">
                <order phase="PostDispatch"/>
            </handler>
        </phase>
        <!--      user can add his own phases to this area  -->
        <phase name="OperationInFaultPhase"/>
    </phaseOrder>
    <phaseOrder type="Outfaultflow">
        <!--      user can add his own phases to this area  -->
        <phase name="OperationOutFaultPhase"/>
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
    </phaseOrder>
</axisconfig>

==========

//SoapMessageReceiver.java

package com.myco.framework.service;

import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.engine.MessageReceiver;

/**
 * This message receiver should be configured in the Axis2 configuration as
the
 * default message receiver, which will handle all incoming messages through
the
 * synapse mediation
 */
public class SoapMessageReceiver implements MessageReceiver {

    public void receive(org.apache.axis2.context.MessageContext mc) throws
AxisFault {

        System.out.println("##### Soap Message Receiver received a new
message...");
        System.out.println("Received To: " + (mc.getTo() != null ?
            mc.getTo().getAddress() : "null"));
        System.out.println("SOAPAction: " + (mc.getWSAAction() != null ?
            mc.getWSAAction() : "null"));
        System.out.println("Body : \n" + mc.getEnvelope());
    }
}

=======
services.xml

  <service name="synapse">

    <operation name="mediate" >
          <messageReceiver class="
com.myco.framework.service.SoapMessageReceiver" />
    </operation>

  </service>

====

Re: Implementing a Web service proxy

Posted by Paul Fremantle <pz...@gmail.com>.
Ron

Saminda has written a nice article on how this works with Synapse:
http://www.wso2.net/tutorials/synapse/java/2006/06/26/wsdl-mediation-proxy-services-on-synapse

Paul


On 6/28/06, Soactive Inc <so...@gmail.com> wrote:
> Folks,
>
> I was able to successfully create a simple service proxy class. Essentially,
> its implemented as a combination of a Dispatcher class and a Receiver class.
>
> However, now all service requests to the server even ones that don't access
> the proxy's endpoint are being redirected to the proxy. Is there a way to
> disallow for that and specifically tie the receiver/dispatcher to a specific
> endpoint binding address within axis2.xml? I believe Synapse has a similar
> issue in that all of the requests get directed to Synapse.
>
> Thanks,
> Ron
>
>
> On 6/26/06, Paul Fremantle < pzfreo@gmail.com> wrote:
> > Ron
> >
> > We are just adding the "proxy" model to Synapse where we explicitly
> > host proxy endpoints. However, you can implement a proxy with M2 as
> > well, and the user guide
> > http://wiki.apache.org/incubator/Synapse/SynapseUserGuide
> will take
> > you through the samples.
> >
> > As Asankha said, the new "proxy services" make that easier.
> >
> > Paul
> >
> > On 6/26/06, Asankha C. Perera <asankha@wso2.com > wrote:
> > >
> > >  Ron
> > >
> > >  The documentation is still in progress, as we are currently
> implementing
> > > Proxy services in Synapse.. and for example..just finished enhancing the
> JMS
> > > transport of Axis to make Proxy services be able to be created on JMS as
> > > well for Synapse.. so please be patient :-).. also you would be able to
> find
> > > documentation currently in progress at
> > > http://wiki.apache.org/incubator/Synapse/InProgress .
> Proxy
> > > services are not available on the last M2 release of Synapse, but will
> be
> > > available in our next release which I'm sure you will like very much!
> > >
> > >  asankha
> > >
> > >
> > >  Soactive Inc wrote:
> > > Thanks to everyone that has replied to my email. I agree with you that
> > > Synapse is aiming at solving the problem that I have articulated in my
> > > email. However, the documentation on how to make this happen in a
> generic
> > > manner is, at best, inadequate. I would appreciate if someone can
> provide me
> > > a step-by-step description on how to achieve a simple, generic Web
> service
> > > proxy functionality either in a reply email or in the form of a
> document. If
> > > I cannot use Synapse for implementing this simple scenario, I am not
> sure
> > > how useful its going to be to others using it.
> > >
> > >  In the meantime, I will try to figure this out on my own.
> > >
> > >  Thanks,
> > >  Ron
> > >
> > >
> > > On 6/25/06, Saminda Abeyruwan < samindaa@gmail.com> wrote:
> > > >
> > > > Hi,
> > > >
> > > > As Paul and Ant said, you have written a dispatcher as like the one in
> > > Synapse. Well, luckily you don't have to do it.
> > > >
> > > > At present we give Synapse as a .MAR, so the user just need to drop to
> a
> > > Axis2 repository and just need to engage it. (This feature is available
> in
> > > current SVN code base).
> > > >
> > > > There we introduce another cool feature call wsdl level mediation.
> IMO,
> > > this is the feature you are looking for. For Example,  In synapse.xml,
> you
> > > have to do the following,
> > > >
> > > > <synapse xmlns="http://ws.apache.org/ns/synapse">
> > > > <definition>
> > > >   <endpoint name="invesbot" address="
> > > http://ws.invesbot.com/stockquotes.asmx "/>
> > > > </definition>
> > > > <rules/>
> > > > <proxies>
> > > >   <proxy name="InvesbotForwardProxy" type="wsdl" description="This
> simply
> > >   forwards all messages to the investbot endpoint">
> > > >         <endpoint protocol="http" uri="/MyfirstProxy"/>
> > > >         <target endpoint="invesbot"/>
> > > >         <wsdl
> > >
> url="file:synapse_repository/conf/sample/sample_proxy_1.wsdl"/>
> > > >       </proxy>
> > > > </proxies>
> > > > </synapse>
> > > >
> > > > You need provide the proxy name, and type.  <target/> will work on the
> > > outbound message. "invesbot" reference to the actual end point which is
> > > defined in <definition/>. Synapse team will provide a documentation on
> this
> > > soon. Please try the proxy_service_sample_3 for more info.
> > > >
> > > >
> > > > Saminda
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > On 6/26/06, ant elder < ant.elder@gmail.com > wrote:
> > > > >
> > > > > Hi Ron,
> > > > >
> > > > > From what you describe of you requirements this is exactly the type
> of
> > > thing Synapse is intended to support so I'd really like to understand
> more
> > > why you don't want to use it. Can you say a bit more about why you want
> to
> > > implement this yourself? Even if we can't convince you maybe help us
> make
> > > Synapse better for others. Reiterating what Paul said, Synapse really is
> > > very small and lightweight. Although implementing a WS proxy like you
> > > describe appears easy at first i think you'll find it will start to get
> more
> > > complicated once you need to support anything other than a few trivial
> > > services.
> > > > >
> > > > > That said, from the files you included the SoapDispatcher dispatches
> to
> > > a service named "SoapGateway" but the service.xml file defines a service
> > > name "synapse", should the service name be "SoapGateway"?
> > > > >
> > > > >
> > > > >     ...ant
> > > > >
> > > > >
> > > > >
> > > > > On 6/25/06, Paul Fremantle < pzfreo@gmail.com> wrote:
> > > > > > Hi
> > > > > >
> > > > > > The synapse JAR is *92K*. Most of what it is doing is basically
> the
> > > > > > same as what you are doing. Can I suggest you take another look!
> > > > > >
> > > > > > Paul
> > > > > >
> > > > > > On 6/25/06, Soactive Inc < soactive@gmail.com> wrote:
> > > > > > > I am trying to implement a simple service proxy on top of Axis2
> and
> > > ran into
> > > > > > > the Synapse project recently.
> > > > > > >
> > > > > > > The following are the requirements of the proxy:
> > > > > > >
> > > > > > > 1. The proxy is on the server side and sits in between a client
> > > accessing a
> > > > > > > Web service and the actual Web service endpoint.
> > > > > > >
> > > > > > > 2. The server on which the proxy service is hosted does not
> contain
> > > any of
> > > > > > > the service endpoints.
> > > > > > >
> > > > > > > 3. The proxy receives requests from the clients and redirects
> the
> > > calls to
> > > > > > > the endpoints.
> > > > > > >
> > > > > > > 4. The service proxy is itself implemented as a Web service.
> > > > > > >
> > > > > > > I realize that the above requirements are all satisfied using
> the
> > > Synapse
> > > > > > > intermediary server. I am now trying to implement this service
> proxy
> > > using
> > > > > > > the essential pieces of Synapse without the need to install
> Synapse
> > > (since I
> > > > > > > need the proxy to be lightweight and don't need all of the other
> > > features
> > > > > > > implemented within Synapse). So, to achieve this desired
> > > functionality, I
> > > > > > > did the following:
> > > > > > >
> > > > > > > a) Implemented a dispatcher class.
> > > > > > >
> > > > > > > b) Registered the dispatcher within Axis2.xml.
> > > > > > >
> > > > > > > c) Implemented a receiver class and invoking the mediate method
> > > within the
> > > > > > > dispatcher class.
> > > > > > >
> > > > > > > d) Registered this custom receiver in services.xml.
> > > > > > >
> > > > > > > I am appending the content of the various files below. Can
> someone
> > > suggest
> > > > > > > if I'm missing something in the above steps. Axis2 seems to be
> > > complaining
> > > > > > > that the WSDL is missing or that I am not using the RPC message
> > > receiver and
> > > > > > > I don't see any of this code being executed either.
> > > > > > >
> > > > > > > Best,
> > > > > > > Ron
> > > > > > >
> > > > > > > ----
> > > > > > >
> > > > > > > // SoapDispatcher.java
> > > > > > >
> > > > > > > package com.myco.framework.service;
> > > > > > >
> > > > > > > import org.apache.axis2.AxisFault;
> > > > > > > import org.apache.axis2.context.MessageContext;
> > > > > > > import
> org.apache.axis2.description.AxisOperation ;
> > > > > > > import org.apache.axis2.description.AxisService
> ;
> > > > > > > import
> > > org.apache.axis2.description.HandlerDescription ;
> > > > > > > import
> org.apache.axis2.engine.AbstractDispatcher;
> > > > > > > import
> org.apache.axis2.engine.AxisConfiguration ;
> > > > > > >  import org.apache.commons.logging.Log;
> > > > > > > import org.apache.commons.logging.LogFactory;
> > > > > > >
> > > > > > > import javax.xml.namespace.QName ;
> > > > > > >
> > > > > > > /**
> > > > > > >  * This is the Axis2 Dispatcher which is registered with the
> Axis2
> > > engine.
> > > > > > > It dispatches
> > > > > > >  * each and every message received to the MessageReceiver for
> > > processing.
> > > > > > >  */
> > > > > > > public class SoapDispatcher extends AbstractDispatcher {
> > > > > > >
> > > > > > >     private static final long serialVersionUID =
> > > -6970206989111592645L;
> > > > > > >
> > > > > > >     private static final String myco_SERVICE_NAME =
> "SoapGateway";
> > > > > > >
> > > > > > >     private static final QName MEDIATE_OPERATION_NAME = new
> > > > > > > QName("mediate");
> > > > > > >
> > > > > > >     public void initDispatcher() {
> > > > > > >         QName qn = new
> > > > > > > QName(" http://service.framework.myco.com",
> > > > > > > "SoapDispatcher");
> > > > > > >         HandlerDescription hd = new HandlerDescription(qn);
> > > > > > >          super.init(hd);
> > > > > > >     }
> > > > > > >
> > > > > > >     public AxisService findService(MessageContext mc) throws
> > > AxisFault {
> > > > > > >         AxisConfiguration ac =
> > > > > > > mc.getConfigurationContext().getAxisConfiguration();
> > > > > > >         AxisService as = ac.getService(myco_SERVICE_NAME);
> > > > > > >         return as;
> > > > > > >     }
> > > > > > >
> > > > > > >     public AxisOperation findOperation(AxisService svc,
> > > MessageContext mc)
> > > > > > > throws AxisFault {
> > > > > > >         AxisOperation ao =
> svc.getOperation(MEDIATE_OPERATION_NAME);
> > > > > > >         return ao;
> > > > > > >     }
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > > =======
> > > > > > >
> > > > > > > axis2.xml
> > > > > > >
> > > > > > > <axisconfig name=" SoapAxisJava2.0">
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <!-- Parameters -->
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <parameter name="hotdeployment"
> locked="false">true</parameter>
> > > > > > >     <parameter name="hotupdate"
> > > > > > > locked="false">false</parameter>
> > > > > > >     <parameter name="enableMTOM"
> > > > > > > locked="false">false</parameter>
> > > > > > >     <parameter
> > > name="sendStacktraceDetailsWithFaults"
> > > > > > > locked="false">true</parameter>
> > > > > > >
> > > > > > >     <!-- Uncomment this to enable REST support -->
> > > > > > >     <!--    <parameter name="enableREST"
> > > > > > > locked="false">true</parameter>-->
> > > > > > >
> > > > > > >     <parameter name="userName"
> > > > > > > locked="false">admin</parameter>
> > > > > > >     <parameter name="password"
> > > > > > > locked="false">axis2</parameter>
> > > > > > >
> > > > > > >     <!-- Always engage addressing for Soap -->
> > > > > > >     <module ref="addressing"/>
> > > > > > >
> > > > > > >      <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <!-- Message Receivers -->
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <!--This is the Deafult Message Receiver for the system , if
> you
> > > want to
> > > > > > > have MessageReceivers for -->
> > > > > > >     <!--all the other MEP implement it and add the correct entry
> to
> > > here ,
> > > > > > > so that you can refer from-->
> > > > > > >     <!--any operation -->
> > > > > > >     <!--Note : You can ovride this for particular service by
> adding
> > > the same
> > > > > > > element with your requirement-->
> > > > > > >     <messageReceivers>
> > > > > > >         <messageReceiver
> > > > > > > mep="http://www.w3.org/2004/08/wsdl/in-only "
> > > > > > >
> > > > > > >
> > >
> class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver
> > > > > > > "/>
> > > > > > >         <messageReceiver
> > > > > > > mep="http://www.w3.org/2004/08/wsdl/in-out "
> > > > > > >
> > > > > > >
> > >
> class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver
> > > > > > > "/>
> > > > > > >     </messageReceivers>
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <!-- Transport Ins -->
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <transportReceiver name="http"
> > > > > > >
> > > > > > >
> > >
> class="org.apache.axis2.transport.http.SimpleHTTPServer">
> > > > > > >         <parameter name="port" locked="false">6060</parameter>
> > > > > > >         <!--If you want to give your own host address for EPR
> > > generation-->
> > > > > > >         <!--uncommet following paramter , and set as you
> > > required.-->
> > > > > > >         <!--<parameter name="hostname" locked="false">
> > > > > > > http://myApp.com/ws</parameter>-->
> > > > > > >     </transportReceiver>
> > > > > > >
> > > > > > >     <transportReceiver name="tcp"
> > > > > > >
> > > > > > > class="
> org.apache.axis2.transport.tcp.TCPServer ">
> > > > > > >         <parameter name="port" locked="false">6061</parameter>
> > > > > > >         <!--If you want to give your own host address for EPR
> > > generation-->
> > > > > > >         <!--uncommet following paramter , and set as you
> > > required.-->
> > > > > > >         <!--<parameter name="hostname"
> > > > > > >
> locked="false">tcp://myApp.com/ws</parameter>-->
> > > > > > >     </transportReceiver>
> > > > > > >
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <!-- Transport Outs -->
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >
> > > > > > >     <transportSender name="tcp"
> > > > > > >
> > > > > > > class="
> > > org.apache.axis2.transport.tcp.TCPTransportSender
> > > > > > > "/>
> > > > > > >     <transportSender name="local"
> > > > > > >
> > > > > > >
> > >
> class="org.apache.axis2.transport.local.LocalTransportSender
> "/>
> > > > > > >     <transportSender name="jms"
> > > > > > >                      class="
> > > > > > > org.apache.axis2.transport.jms.JMSSender"/>
> > > > > > >     <transportSender name="http"
> > > > > > >
> > > > > > > class="
> > >
> org.apache.axis2.transport.http.CommonsHTTPTransportSender">
> > > > > > >         <parameter name="PROTOCOL"
> > > > > > > locked="false">HTTP/1.1</parameter>
> > > > > > >         <parameter name="Transfer-Encoding"
> > > > > > > locked="false">chunked</parameter>
> > > > > > >     </transportSender>
> > > > > > >     <transportSender name="https"
> > > > > > >                      class="
> > > > > > >
> > >
> org.apache.axis2.transport.http.CommonsHTTPTransportSender
> > > ">
> > > > > > >         <parameter name="PROTOCOL"
> > > > > > > locked="false">HTTP/1.1</parameter>
> > > > > > >         <parameter name="Transfer-Encoding"
> > > > > > > locked="false">chunked</parameter>
> > > > > > >     </transportSender>
> > > > > > >
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <!-- Phases  -->
> > > > > > >     <!--
> > > =================================================
> > > > > > > -->
> > > > > > >     <phaseOrder type="inflow">
> > > > > > >         <!--  System pre defined phases       -->
> > > > > > >          <phase name="Transport">
> > > > > > >             <!--<handler
> > > > > > > name="RequestURIBasedDispatcher"-->
> > > > > > >                      <!--class="
> > > > > > >
> > > org.apache.axis2.engine.RequestURIBasedDispatcher">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >             <!--<handler
> > > > > > > name="SOAPActionBasedDispatcher"-->
> > > > > > >
> > > > > > >
> > >
> <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher
> > > ">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >         </phase>
> > > > > > >         <phase name="Security"/>
> > > > > > >         <phase name="PreDispatch"/>
> > > > > > >         <phase name="Dispatch"
> > > > > > > class="org.apache.axis2.engine.DispatchPhase ">
> > > > > > >             <handler name="SoapDispatcher"
> > > > > > >
> > > > > > > class="
> com.myco.framework.service.SoapDispatcher">
> > > > > > >                 <order phase="Dispatch"/>
> > > > > > >              </handler>
> > > > > > >
> > > > > > >             <!--<handler
> > > > > > > name="AddressingBasedDispatcher"-->
> > > > > > >
> > > > > > >
> > >
> <!--class="org.apache.axis2.engine.AddressingBasedDispatcher
> ">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >
> > > > > > >             <!--<handler
> > > > > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > > > > >                      <!--class="
> > > > > > >
> > > org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > > ">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >
> > > > > > >             <handler name="InstanceDispatcher"
> > > > > > >
> > > > > > >
> class="org.apache.axis2.engine.InstanceDispatcher">
> > > > > > >                 <order phase="PostDispatch"/>
> > > > > > >             </handler>
> > > > > > >         </phase>
> > > > > > >         <!--  System pre defined phases       -->
> > > > > > >         <!--   After Postdispatch phase module author or or
> service
> > > author
> > > > > > > can add any phase he want      -->
> > > > > > >         <phase name="OperationInPhase"/>
> > > > > > >     </phaseOrder>
> > > > > > >     <phaseOrder type="outflow">
> > > > > > >         <!--      user can add his own phases to this area  -->
> > > > > > >         <phase name="OperationOutPhase"/>
> > > > > > >         <!--system predefined phase-->
> > > > > > >         <!--these phase will run irrespective of the service-->
> > > > > > >         <phase name="PolicyDetermination"/>
> > > > > > >         <phase name="MessageOut"/>
> > > > > > >     </phaseOrder>
> > > > > > >     <phaseOrder type="INfaultflow">
> > > > > > >         <phase name="PreDispatch"/>
> > > > > > >         <phase name="Dispatch"
> > > > > > > class=" org.apache.axis2.engine.DispatchPhase">
> > > > > > >
> > > > > > >             <handler name="SoapDispatcher"
> > > > > > >
> > > > > > >
> class="com.myco.framework.service.SoapDispatcher ">
> > > > > > >                 <order phase="Dispatch"/>
> > > > > > >             </handler>
> > > > > > >
> > > > > > >             <!--<handler
> > > > > > > name="RequestURIBasedDispatcher"-->
> > > > > > >                      <!--class="
> > > > > > >
> org.apache.axis2.engine.RequestURIBasedDispatcher
> > > ">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >
> > > > > > >             <!--<handler
> > > > > > > name="SOAPActionBasedDispatcher"-->
> > > > > > >
> > > > > > >
> > >
> <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >
> > > > > > >             <!--<handler
> > > > > > > name="AddressingBasedDispatcher"-->
> > > > > > >
> > > > > > >
> > >
> <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >
> > > > > > >             <!--<handler
> > > > > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > > > > >
> > > > > > >
> > >
> <!--class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > > > > > > ">-->
> > > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > > >             <!--</handler>-->
> > > > > > >             <handler name="InstanceDispatcher"
> > > > > > >                      class="
> > > > > > > org.apache.axis2.engine.InstanceDispatcher">
> > > > > > >                 <order phase="PostDispatch"/>
> > > > > > >             </handler>
> > > > > > >         </phase>
> > > > > > >         <!--      user can add his own phases to this area  -->
> > > > > > >         <phase name="OperationInFaultPhase"/>
> > > > > > >     </phaseOrder>
> > > > > > >     <phaseOrder type="Outfaultflow">
> > > > > > >         <!--      user can add his own phases to this area  -->
> > > > > > >         <phase name="OperationOutFaultPhase"/>
> > > > > > >         <phase name="PolicyDetermination"/>
> > > > > > >         <phase name="MessageOut"/>
> > > > > > >     </phaseOrder>
> > > > > > > </axisconfig>
> > > > > > >
> > > > > > > ==========
> > > > > > >
> > > > > > > //SoapMessageReceiver.java
> > > > > > >
> > > > > > > package com.myco.framework.service ;
> > > > > > >
> > > > > > > import org.apache.axis2.AxisFault;
> > > > > > > import org.apache.axis2.Constants ;
> > > > > > > import org.apache.axis2.engine.MessageReceiver
> ;
> > > > > > >
> > > > > > > /**
> > > > > > >  * This message receiver should be configured in the Axis2
> > > configuration as
> > > > > > > the
> > > > > > >  * default message receiver, which will handle all incoming
> messages
> > > through
> > > > > > > the
> > > > > > >  * synapse mediation
> > > > > > >  */
> > > > > > > public class SoapMessageReceiver implements MessageReceiver {
> > > > > > >
> > > > > > >     public void
> > > > > > > receive(
> org.apache.axis2.context.MessageContext mc)
> > > throws
> > > > > > > AxisFault {
> > > > > > >
> > > > > > >         System.out.println("##### Soap Message Receiver received
> a
> > > new
> > > > > > > message...");
> > > > > > >         System.out.println ("Received To: " + (mc.getTo() !=
> null ?
> > > > > > >             mc.getTo().getAddress() : "null"));
> > > > > > >         System.out.println("SOAPAction: " + (mc.getWSAAction ()
> !=
> > > null ?
> > > > > > >             mc.getWSAAction () : "null"));
> > > > > > >         System.out.println("Body : \n" + mc.getEnvelope());
> > > > > > >     }
> > > > > > > }
> > > > > > >
> > > > > > > =======
> > > > > > > services.xml
> > > > > > >
> > > > > > >   <service name="synapse">
> > > > > > >
> > > > > > >     <operation name="mediate" >
> > > > > > >           <messageReceiver
> > > > > > >
> > > class="com.myco.framework.service.SoapMessageReceiver "
> />
> > > > > > >     </operation>
> > > > > > >
> > > > > > >   </service>
> > > > > > >
> > > > > > > ====
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Paul Fremantle
> > > > > > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
> > > > > >
> > > > > > http://bloglines.com/blog/paulfremantle
> > > > > > paul@wso2.com
> > > > > >
> > > > > > "Oxygenating the Web Service Platform", www.wso2.com
> > > > > >
> > > > > >
> > >
> ---------------------------------------------------------------------
> > > > > > To unsubscribe, e-mail:
> > > synapse-dev-unsubscribe@ws.apache.org
> > > > > > For additional commands, e-mail: synapse-dev-help@ws.apache.org
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> > >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> > > synapse-dev-unsubscribe@ws.apache.org For additional
> > > commands, e-mail: synapse-dev-help@ws.apache.org
> >
> >
> > --
> > Paul Fremantle
> > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
> >
> > http://bloglines.com/blog/paulfremantle
> > paul@wso2.com
> >
> > "Oxygenating the Web Service Platform", www.wso2.com
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> synapse-dev-unsubscribe@ws.apache.org
> > For additional commands, e-mail: synapse-dev-help@ws.apache.org
> >
> >
>
>


-- 
Paul Fremantle
VP/Technology, WSO2 and OASIS WS-RX TC Co-chair

http://bloglines.com/blog/paulfremantle
paul@wso2.com

"Oxygenating the Web Service Platform", www.wso2.com

---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org


Re: Implementing a Web service proxy

Posted by Soactive Inc <so...@gmail.com>.
Folks,

I was able to successfully create a simple service proxy class. Essentially,
its implemented as a combination of a Dispatcher class and a Receiver class.


However, now all service requests to the server even ones that don't access
the proxy's endpoint are being redirected to the proxy. Is there a way to
disallow for that and specifically tie the receiver/dispatcher to a specific
endpoint binding address within axis2.xml? I believe Synapse has a similar
issue in that all of the requests get directed to Synapse.

Thanks,
Ron

On 6/26/06, Paul Fremantle <pz...@gmail.com> wrote:
>
> Ron
>
> We are just adding the "proxy" model to Synapse where we explicitly
> host proxy endpoints. However, you can implement a proxy with M2 as
> well, and the user guide
> http://wiki.apache.org/incubator/Synapse/SynapseUserGuide will take
> you through the samples.
>
> As Asankha said, the new "proxy services" make that easier.
>
> Paul
>
> On 6/26/06, Asankha C. Perera <as...@wso2.com> wrote:
> >
> >  Ron
> >
> >  The documentation is still in progress, as we are currently
> implementing
> > Proxy services in Synapse.. and for example..just finished enhancing the
> JMS
> > transport of Axis to make Proxy services be able to be created on JMS as
> > well for Synapse.. so please be patient :-).. also you would be able to
> find
> > documentation currently in progress at
> > http://wiki.apache.org/incubator/Synapse/InProgress. Proxy
> > services are not available on the last M2 release of Synapse, but will
> be
> > available in our next release which I'm sure you will like very much!
> >
> >  asankha
> >
> >
> >  Soactive Inc wrote:
> > Thanks to everyone that has replied to my email. I agree with you that
> > Synapse is aiming at solving the problem that I have articulated in my
> > email. However, the documentation on how to make this happen in a
> generic
> > manner is, at best, inadequate. I would appreciate if someone can
> provide me
> > a step-by-step description on how to achieve a simple, generic Web
> service
> > proxy functionality either in a reply email or in the form of a
> document. If
> > I cannot use Synapse for implementing this simple scenario, I am not
> sure
> > how useful its going to be to others using it.
> >
> >  In the meantime, I will try to figure this out on my own.
> >
> >  Thanks,
> >  Ron
> >
> >
> > On 6/25/06, Saminda Abeyruwan < samindaa@gmail.com> wrote:
> > >
> > > Hi,
> > >
> > > As Paul and Ant said, you have written a dispatcher as like the one in
> > Synapse. Well, luckily you don't have to do it.
> > >
> > > At present we give Synapse as a .MAR, so the user just need to drop to
> a
> > Axis2 repository and just need to engage it. (This feature is available
> in
> > current SVN code base).
> > >
> > > There we introduce another cool feature call wsdl level
> mediation.  IMO,
> > this is the feature you are looking for. For Example,  In synapse.xml,
> you
> > have to do the following,
> > >
> > > <synapse xmlns="http://ws.apache.org/ns/synapse">
> > > <definition>
> > >   <endpoint name="invesbot" address="
> > http://ws.invesbot.com/stockquotes.asmx "/>
> > > </definition>
> > > <rules/>
> > > <proxies>
> > >   <proxy name="InvesbotForwardProxy" type="wsdl" description="This
> simply
> >   forwards all messages to the investbot endpoint">
> > >         <endpoint protocol="http" uri="/MyfirstProxy"/>
> > >         <target endpoint="invesbot"/>
> > >         <wsdl
> > url="file:synapse_repository/conf/sample/sample_proxy_1.wsdl"/>
> > >       </proxy>
> > > </proxies>
> > > </synapse>
> > >
> > > You need provide the proxy name, and type.  <target/> will work on the
> > outbound message. "invesbot" reference to the actual end point which is
> > defined in <definition/>. Synapse team will provide a documentation on
> this
> > soon. Please try the proxy_service_sample_3 for more info.
> > >
> > >
> > > Saminda
> > >
> > >
> > >
> > >
> > >
> > > On 6/26/06, ant elder <ant.elder@gmail.com > wrote:
> > > >
> > > > Hi Ron,
> > > >
> > > > From what you describe of you requirements this is exactly the type
> of
> > thing Synapse is intended to support so I'd really like to understand
> more
> > why you don't want to use it. Can you say a bit more about why you want
> to
> > implement this yourself? Even if we can't convince you maybe help us
> make
> > Synapse better for others. Reiterating what Paul said, Synapse really is
> > very small and lightweight. Although implementing a WS proxy like you
> > describe appears easy at first i think you'll find it will start to get
> more
> > complicated once you need to support anything other than a few trivial
> > services.
> > > >
> > > > That said, from the files you included the SoapDispatcher dispatches
> to
> > a service named "SoapGateway" but the service.xml file defines a service
> > name "synapse", should the service name be "SoapGateway"?
> > > >
> > > >
> > > >     ...ant
> > > >
> > > >
> > > >
> > > > On 6/25/06, Paul Fremantle < pzfreo@gmail.com> wrote:
> > > > > Hi
> > > > >
> > > > > The synapse JAR is *92K*. Most of what it is doing is basically
> the
> > > > > same as what you are doing. Can I suggest you take another look!
> > > > >
> > > > > Paul
> > > > >
> > > > > On 6/25/06, Soactive Inc < soactive@gmail.com> wrote:
> > > > > > I am trying to implement a simple service proxy on top of Axis2
> and
> > ran into
> > > > > > the Synapse project recently.
> > > > > >
> > > > > > The following are the requirements of the proxy:
> > > > > >
> > > > > > 1. The proxy is on the server side and sits in between a client
> > accessing a
> > > > > > Web service and the actual Web service endpoint.
> > > > > >
> > > > > > 2. The server on which the proxy service is hosted does not
> contain
> > any of
> > > > > > the service endpoints.
> > > > > >
> > > > > > 3. The proxy receives requests from the clients and redirects
> the
> > calls to
> > > > > > the endpoints.
> > > > > >
> > > > > > 4. The service proxy is itself implemented as a Web service.
> > > > > >
> > > > > > I realize that the above requirements are all satisfied using
> the
> > Synapse
> > > > > > intermediary server. I am now trying to implement this service
> proxy
> > using
> > > > > > the essential pieces of Synapse without the need to install
> Synapse
> > (since I
> > > > > > need the proxy to be lightweight and don't need all of the other
> > features
> > > > > > implemented within Synapse). So, to achieve this desired
> > functionality, I
> > > > > > did the following:
> > > > > >
> > > > > > a) Implemented a dispatcher class.
> > > > > >
> > > > > > b) Registered the dispatcher within Axis2.xml.
> > > > > >
> > > > > > c) Implemented a receiver class and invoking the mediate method
> > within the
> > > > > > dispatcher class.
> > > > > >
> > > > > > d) Registered this custom receiver in services.xml.
> > > > > >
> > > > > > I am appending the content of the various files below. Can
> someone
> > suggest
> > > > > > if I'm missing something in the above steps. Axis2 seems to be
> > complaining
> > > > > > that the WSDL is missing or that I am not using the RPC message
> > receiver and
> > > > > > I don't see any of this code being executed either.
> > > > > >
> > > > > > Best,
> > > > > > Ron
> > > > > >
> > > > > > ----
> > > > > >
> > > > > > // SoapDispatcher.java
> > > > > >
> > > > > > package com.myco.framework.service;
> > > > > >
> > > > > > import org.apache.axis2.AxisFault;
> > > > > > import org.apache.axis2.context.MessageContext;
> > > > > > import org.apache.axis2.description.AxisOperation ;
> > > > > > import org.apache.axis2.description.AxisService;
> > > > > > import
> > org.apache.axis2.description.HandlerDescription ;
> > > > > > import org.apache.axis2.engine.AbstractDispatcher;
> > > > > > import org.apache.axis2.engine.AxisConfiguration;
> > > > > >  import org.apache.commons.logging.Log;
> > > > > > import org.apache.commons.logging.LogFactory;
> > > > > >
> > > > > > import javax.xml.namespace.QName;
> > > > > >
> > > > > > /**
> > > > > >  * This is the Axis2 Dispatcher which is registered with the
> Axis2
> > engine.
> > > > > > It dispatches
> > > > > >  * each and every message received to the MessageReceiver for
> > processing.
> > > > > >  */
> > > > > > public class SoapDispatcher extends AbstractDispatcher {
> > > > > >
> > > > > >     private static final long serialVersionUID =
> > -6970206989111592645L;
> > > > > >
> > > > > >     private static final String myco_SERVICE_NAME =
> "SoapGateway";
> > > > > >
> > > > > >     private static final QName MEDIATE_OPERATION_NAME = new
> > > > > > QName("mediate");
> > > > > >
> > > > > >     public void initDispatcher() {
> > > > > >         QName qn = new
> > > > > > QName(" http://service.framework.myco.com",
> > > > > > "SoapDispatcher");
> > > > > >         HandlerDescription hd = new HandlerDescription(qn);
> > > > > >          super.init(hd);
> > > > > >     }
> > > > > >
> > > > > >     public AxisService findService(MessageContext mc) throws
> > AxisFault {
> > > > > >         AxisConfiguration ac =
> > > > > > mc.getConfigurationContext().getAxisConfiguration();
> > > > > >         AxisService as = ac.getService(myco_SERVICE_NAME);
> > > > > >         return as;
> > > > > >     }
> > > > > >
> > > > > >     public AxisOperation findOperation(AxisService svc,
> > MessageContext mc)
> > > > > > throws AxisFault {
> > > > > >         AxisOperation ao = svc.getOperation
> (MEDIATE_OPERATION_NAME);
> > > > > >         return ao;
> > > > > >     }
> > > > > > }
> > > > > >
> > > > > >
> > > > > > =======
> > > > > >
> > > > > > axis2.xml
> > > > > >
> > > > > > <axisconfig name="SoapAxisJava2.0">
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <!-- Parameters -->
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <parameter name="hotdeployment"
> locked="false">true</parameter>
> > > > > >     <parameter name="hotupdate"
> > > > > > locked="false">false</parameter>
> > > > > >     <parameter name="enableMTOM"
> > > > > > locked="false">false</parameter>
> > > > > >     <parameter
> > name="sendStacktraceDetailsWithFaults"
> > > > > > locked="false">true</parameter>
> > > > > >
> > > > > >     <!-- Uncomment this to enable REST support -->
> > > > > >     <!--    <parameter name="enableREST"
> > > > > > locked="false">true</parameter>-->
> > > > > >
> > > > > >     <parameter name="userName"
> > > > > > locked="false">admin</parameter>
> > > > > >     <parameter name="password"
> > > > > > locked="false">axis2</parameter>
> > > > > >
> > > > > >     <!-- Always engage addressing for Soap -->
> > > > > >     <module ref="addressing"/>
> > > > > >
> > > > > >      <!--
> > =================================================
> > > > > > -->
> > > > > >     <!-- Message Receivers -->
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <!--This is the Deafult Message Receiver for the system , if
> you
> > want to
> > > > > > have MessageReceivers for -->
> > > > > >     <!--all the other MEP implement it and add the correct entry
> to
> > here ,
> > > > > > so that you can refer from-->
> > > > > >     <!--any operation -->
> > > > > >     <!--Note : You can ovride this for particular service by
> adding
> > the same
> > > > > > element with your requirement-->
> > > > > >     <messageReceivers>
> > > > > >         <messageReceiver
> > > > > > mep="http://www.w3.org/2004/08/wsdl/in-only"
> > > > > >
> > > > > >
> > class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver
> > > > > > "/>
> > > > > >         <messageReceiver
> > > > > > mep="http://www.w3.org/2004/08/wsdl/in-out "
> > > > > >
> > > > > >
> > class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver
> > > > > > "/>
> > > > > >     </messageReceivers>
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <!-- Transport Ins -->
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <transportReceiver name="http"
> > > > > >
> > > > > >
> > class="org.apache.axis2.transport.http.SimpleHTTPServer">
> > > > > >         <parameter name="port" locked="false">6060</parameter>
> > > > > >         <!--If you want to give your own host address for EPR
> > generation-->
> > > > > >         <!--uncommet following paramter , and set as you
> > required.-->
> > > > > >         <!--<parameter name="hostname" locked="false">
> > > > > > http://myApp.com/ws</parameter>-->
> > > > > >     </transportReceiver>
> > > > > >
> > > > > >     <transportReceiver name="tcp"
> > > > > >
> > > > > > class="org.apache.axis2.transport.tcp.TCPServer ">
> > > > > >         <parameter name="port" locked="false">6061</parameter>
> > > > > >         <!--If you want to give your own host address for EPR
> > generation-->
> > > > > >         <!--uncommet following paramter , and set as you
> > required.-->
> > > > > >         <!--<parameter name="hostname"
> > > > > > locked="false">tcp://myApp.com/ws</parameter>-->
> > > > > >     </transportReceiver>
> > > > > >
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <!-- Transport Outs -->
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >
> > > > > >     <transportSender name="tcp"
> > > > > >
> > > > > > class="
> > org.apache.axis2.transport.tcp.TCPTransportSender
> > > > > > "/>
> > > > > >     <transportSender name="local"
> > > > > >
> > > > > >
> > class="org.apache.axis2.transport.local.LocalTransportSender"/>
> > > > > >     <transportSender name="jms"
> > > > > >                      class="
> > > > > > org.apache.axis2.transport.jms.JMSSender"/>
> > > > > >     <transportSender name="http"
> > > > > >
> > > > > > class="
> > org.apache.axis2.transport.http.CommonsHTTPTransportSender">
> > > > > >         <parameter name="PROTOCOL"
> > > > > > locked="false">HTTP/1.1</parameter>
> > > > > >         <parameter name="Transfer-Encoding"
> > > > > > locked="false">chunked</parameter>
> > > > > >     </transportSender>
> > > > > >     <transportSender name="https"
> > > > > >                      class="
> > > > > >
> > org.apache.axis2.transport.http.CommonsHTTPTransportSender
> > ">
> > > > > >         <parameter name="PROTOCOL"
> > > > > > locked="false">HTTP/1.1</parameter>
> > > > > >         <parameter name="Transfer-Encoding"
> > > > > > locked="false">chunked</parameter>
> > > > > >     </transportSender>
> > > > > >
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <!-- Phases  -->
> > > > > >     <!--
> > =================================================
> > > > > > -->
> > > > > >     <phaseOrder type="inflow">
> > > > > >         <!--  System pre defined phases       -->
> > > > > >          <phase name="Transport">
> > > > > >             <!--<handler
> > > > > > name="RequestURIBasedDispatcher"-->
> > > > > >                      <!--class="
> > > > > >
> > org.apache.axis2.engine.RequestURIBasedDispatcher">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >             <!--<handler
> > > > > > name="SOAPActionBasedDispatcher"-->
> > > > > >
> > > > > >
> > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher
> > ">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >         </phase>
> > > > > >         <phase name="Security"/>
> > > > > >         <phase name="PreDispatch"/>
> > > > > >         <phase name="Dispatch"
> > > > > > class="org.apache.axis2.engine.DispatchPhase ">
> > > > > >             <handler name="SoapDispatcher"
> > > > > >
> > > > > > class="com.myco.framework.service.SoapDispatcher">
> > > > > >                 <order phase="Dispatch"/>
> > > > > >              </handler>
> > > > > >
> > > > > >             <!--<handler
> > > > > > name="AddressingBasedDispatcher"-->
> > > > > >
> > > > > >
> > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >
> > > > > >             <!--<handler
> > > > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > > > >                      <!--class="
> > > > > >
> > org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > ">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >
> > > > > >             <handler name="InstanceDispatcher"
> > > > > >
> > > > > > class="org.apache.axis2.engine.InstanceDispatcher">
> > > > > >                 <order phase="PostDispatch"/>
> > > > > >             </handler>
> > > > > >         </phase>
> > > > > >         <!--  System pre defined phases       -->
> > > > > >         <!--   After Postdispatch phase module author or or
> service
> > author
> > > > > > can add any phase he want      -->
> > > > > >         <phase name="OperationInPhase"/>
> > > > > >     </phaseOrder>
> > > > > >     <phaseOrder type="outflow">
> > > > > >         <!--      user can add his own phases to this area  -->
> > > > > >         <phase name="OperationOutPhase"/>
> > > > > >         <!--system predefined phase-->
> > > > > >         <!--these phase will run irrespective of the service-->
> > > > > >         <phase name="PolicyDetermination"/>
> > > > > >         <phase name="MessageOut"/>
> > > > > >     </phaseOrder>
> > > > > >     <phaseOrder type="INfaultflow">
> > > > > >         <phase name="PreDispatch"/>
> > > > > >         <phase name="Dispatch"
> > > > > > class=" org.apache.axis2.engine.DispatchPhase">
> > > > > >
> > > > > >             <handler name="SoapDispatcher"
> > > > > >
> > > > > > class="com.myco.framework.service.SoapDispatcher ">
> > > > > >                 <order phase="Dispatch"/>
> > > > > >             </handler>
> > > > > >
> > > > > >             <!--<handler
> > > > > > name="RequestURIBasedDispatcher"-->
> > > > > >                      <!--class="
> > > > > > org.apache.axis2.engine.RequestURIBasedDispatcher
> > ">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >
> > > > > >             <!--<handler
> > > > > > name="SOAPActionBasedDispatcher"-->
> > > > > >
> > > > > >
> > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >
> > > > > >             <!--<handler
> > > > > > name="AddressingBasedDispatcher"-->
> > > > > >
> > > > > >
> > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >
> > > > > >             <!--<handler
> > > > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > > > >
> > > > > >
> > <!--class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > > > > > ">-->
> > > > > >                 <!--<order phase="Dispatch"/>-->
> > > > > >             <!--</handler>-->
> > > > > >             <handler name="InstanceDispatcher"
> > > > > >                      class="
> > > > > > org.apache.axis2.engine.InstanceDispatcher">
> > > > > >                 <order phase="PostDispatch"/>
> > > > > >             </handler>
> > > > > >         </phase>
> > > > > >         <!--      user can add his own phases to this area  -->
> > > > > >         <phase name="OperationInFaultPhase"/>
> > > > > >     </phaseOrder>
> > > > > >     <phaseOrder type="Outfaultflow">
> > > > > >         <!--      user can add his own phases to this area  -->
> > > > > >         <phase name="OperationOutFaultPhase"/>
> > > > > >         <phase name="PolicyDetermination"/>
> > > > > >         <phase name="MessageOut"/>
> > > > > >     </phaseOrder>
> > > > > > </axisconfig>
> > > > > >
> > > > > > ==========
> > > > > >
> > > > > > //SoapMessageReceiver.java
> > > > > >
> > > > > > package com.myco.framework.service ;
> > > > > >
> > > > > > import org.apache.axis2.AxisFault;
> > > > > > import org.apache.axis2.Constants;
> > > > > > import org.apache.axis2.engine.MessageReceiver ;
> > > > > >
> > > > > > /**
> > > > > >  * This message receiver should be configured in the Axis2
> > configuration as
> > > > > > the
> > > > > >  * default message receiver, which will handle all incoming
> messages
> > through
> > > > > > the
> > > > > >  * synapse mediation
> > > > > >  */
> > > > > > public class SoapMessageReceiver implements MessageReceiver {
> > > > > >
> > > > > >     public void
> > > > > > receive(org.apache.axis2.context.MessageContext mc)
> > throws
> > > > > > AxisFault {
> > > > > >
> > > > > >         System.out.println("##### Soap Message Receiver received
> a
> > new
> > > > > > message...");
> > > > > >         System.out.println ("Received To: " + (mc.getTo() !=
> null ?
> > > > > >             mc.getTo().getAddress() : "null"));
> > > > > >         System.out.println("SOAPAction: " + (mc.getWSAAction ()
> !=
> > null ?
> > > > > >             mc.getWSAAction () : "null"));
> > > > > >         System.out.println("Body : \n" + mc.getEnvelope());
> > > > > >     }
> > > > > > }
> > > > > >
> > > > > > =======
> > > > > > services.xml
> > > > > >
> > > > > >   <service name="synapse">
> > > > > >
> > > > > >     <operation name="mediate" >
> > > > > >           <messageReceiver
> > > > > >
> > class="com.myco.framework.service.SoapMessageReceiver " />
> > > > > >     </operation>
> > > > > >
> > > > > >   </service>
> > > > > >
> > > > > > ====
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Paul Fremantle
> > > > > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
> > > > >
> > > > > http://bloglines.com/blog/paulfremantle
> > > > > paul@wso2.com
> > > > >
> > > > > "Oxygenating the Web Service Platform", www.wso2.com
> > > > >
> > > > >
> > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail:
> > synapse-dev-unsubscribe@ws.apache.org
> > > > > For additional commands, e-mail: synapse-dev-help@ws.apache.org
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > synapse-dev-unsubscribe@ws.apache.org For additional
> > commands, e-mail: synapse-dev-help@ws.apache.org
>
>
> --
> Paul Fremantle
> VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
>
> http://bloglines.com/blog/paulfremantle
> paul@wso2.com
>
> "Oxygenating the Web Service Platform", www.wso2.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: synapse-dev-help@ws.apache.org
>
>

Re: Implementing a Web service proxy

Posted by Paul Fremantle <pz...@gmail.com>.
Ron

We are just adding the "proxy" model to Synapse where we explicitly
host proxy endpoints. However, you can implement a proxy with M2 as
well, and the user guide
http://wiki.apache.org/incubator/Synapse/SynapseUserGuide will take
you through the samples.

As Asankha said, the new "proxy services" make that easier.

Paul

On 6/26/06, Asankha C. Perera <as...@wso2.com> wrote:
>
>  Ron
>
>  The documentation is still in progress, as we are currently implementing
> Proxy services in Synapse.. and for example..just finished enhancing the JMS
> transport of Axis to make Proxy services be able to be created on JMS as
> well for Synapse.. so please be patient :-).. also you would be able to find
> documentation currently in progress at
> http://wiki.apache.org/incubator/Synapse/InProgress. Proxy
> services are not available on the last M2 release of Synapse, but will be
> available in our next release which I'm sure you will like very much!
>
>  asankha
>
>
>  Soactive Inc wrote:
> Thanks to everyone that has replied to my email. I agree with you that
> Synapse is aiming at solving the problem that I have articulated in my
> email. However, the documentation on how to make this happen in a generic
> manner is, at best, inadequate. I would appreciate if someone can provide me
> a step-by-step description on how to achieve a simple, generic Web service
> proxy functionality either in a reply email or in the form of a document. If
> I cannot use Synapse for implementing this simple scenario, I am not sure
> how useful its going to be to others using it.
>
>  In the meantime, I will try to figure this out on my own.
>
>  Thanks,
>  Ron
>
>
> On 6/25/06, Saminda Abeyruwan < samindaa@gmail.com> wrote:
> >
> > Hi,
> >
> > As Paul and Ant said, you have written a dispatcher as like the one in
> Synapse. Well, luckily you don't have to do it.
> >
> > At present we give Synapse as a .MAR, so the user just need to drop to a
> Axis2 repository and just need to engage it. (This feature is available in
> current SVN code base).
> >
> > There we introduce another cool feature call wsdl level mediation.  IMO,
> this is the feature you are looking for. For Example,  In synapse.xml, you
> have to do the following,
> >
> > <synapse xmlns="http://ws.apache.org/ns/synapse">
> > <definition>
> >   <endpoint name="invesbot" address="
> http://ws.invesbot.com/stockquotes.asmx "/>
> > </definition>
> > <rules/>
> > <proxies>
> >   <proxy name="InvesbotForwardProxy" type="wsdl" description="This simply
>   forwards all messages to the investbot endpoint">
> >         <endpoint protocol="http" uri="/MyfirstProxy"/>
> >         <target endpoint="invesbot"/>
> >         <wsdl
> url="file:synapse_repository/conf/sample/sample_proxy_1.wsdl"/>
> >       </proxy>
> > </proxies>
> > </synapse>
> >
> > You need provide the proxy name, and type.  <target/> will work on the
> outbound message. "invesbot" reference to the actual end point which is
> defined in <definition/>. Synapse team will provide a documentation on this
> soon. Please try the proxy_service_sample_3 for more info.
> >
> >
> > Saminda
> >
> >
> >
> >
> >
> > On 6/26/06, ant elder <ant.elder@gmail.com > wrote:
> > >
> > > Hi Ron,
> > >
> > > From what you describe of you requirements this is exactly the type of
> thing Synapse is intended to support so I'd really like to understand more
> why you don't want to use it. Can you say a bit more about why you want to
> implement this yourself? Even if we can't convince you maybe help us make
> Synapse better for others. Reiterating what Paul said, Synapse really is
> very small and lightweight. Although implementing a WS proxy like you
> describe appears easy at first i think you'll find it will start to get more
> complicated once you need to support anything other than a few trivial
> services.
> > >
> > > That said, from the files you included the SoapDispatcher dispatches to
> a service named "SoapGateway" but the service.xml file defines a service
> name "synapse", should the service name be "SoapGateway"?
> > >
> > >
> > >     ...ant
> > >
> > >
> > >
> > > On 6/25/06, Paul Fremantle < pzfreo@gmail.com> wrote:
> > > > Hi
> > > >
> > > > The synapse JAR is *92K*. Most of what it is doing is basically the
> > > > same as what you are doing. Can I suggest you take another look!
> > > >
> > > > Paul
> > > >
> > > > On 6/25/06, Soactive Inc < soactive@gmail.com> wrote:
> > > > > I am trying to implement a simple service proxy on top of Axis2 and
> ran into
> > > > > the Synapse project recently.
> > > > >
> > > > > The following are the requirements of the proxy:
> > > > >
> > > > > 1. The proxy is on the server side and sits in between a client
> accessing a
> > > > > Web service and the actual Web service endpoint.
> > > > >
> > > > > 2. The server on which the proxy service is hosted does not contain
> any of
> > > > > the service endpoints.
> > > > >
> > > > > 3. The proxy receives requests from the clients and redirects the
> calls to
> > > > > the endpoints.
> > > > >
> > > > > 4. The service proxy is itself implemented as a Web service.
> > > > >
> > > > > I realize that the above requirements are all satisfied using the
> Synapse
> > > > > intermediary server. I am now trying to implement this service proxy
> using
> > > > > the essential pieces of Synapse without the need to install Synapse
> (since I
> > > > > need the proxy to be lightweight and don't need all of the other
> features
> > > > > implemented within Synapse). So, to achieve this desired
> functionality, I
> > > > > did the following:
> > > > >
> > > > > a) Implemented a dispatcher class.
> > > > >
> > > > > b) Registered the dispatcher within Axis2.xml.
> > > > >
> > > > > c) Implemented a receiver class and invoking the mediate method
> within the
> > > > > dispatcher class.
> > > > >
> > > > > d) Registered this custom receiver in services.xml.
> > > > >
> > > > > I am appending the content of the various files below. Can someone
> suggest
> > > > > if I'm missing something in the above steps. Axis2 seems to be
> complaining
> > > > > that the WSDL is missing or that I am not using the RPC message
> receiver and
> > > > > I don't see any of this code being executed either.
> > > > >
> > > > > Best,
> > > > > Ron
> > > > >
> > > > > ----
> > > > >
> > > > > // SoapDispatcher.java
> > > > >
> > > > > package com.myco.framework.service;
> > > > >
> > > > > import org.apache.axis2.AxisFault;
> > > > > import org.apache.axis2.context.MessageContext;
> > > > > import org.apache.axis2.description.AxisOperation ;
> > > > > import org.apache.axis2.description.AxisService;
> > > > > import
> org.apache.axis2.description.HandlerDescription ;
> > > > > import org.apache.axis2.engine.AbstractDispatcher;
> > > > > import org.apache.axis2.engine.AxisConfiguration;
> > > > >  import org.apache.commons.logging.Log;
> > > > > import org.apache.commons.logging.LogFactory;
> > > > >
> > > > > import javax.xml.namespace.QName;
> > > > >
> > > > > /**
> > > > >  * This is the Axis2 Dispatcher which is registered with the Axis2
> engine.
> > > > > It dispatches
> > > > >  * each and every message received to the MessageReceiver for
> processing.
> > > > >  */
> > > > > public class SoapDispatcher extends AbstractDispatcher {
> > > > >
> > > > >     private static final long serialVersionUID =
> -6970206989111592645L;
> > > > >
> > > > >     private static final String myco_SERVICE_NAME = "SoapGateway";
> > > > >
> > > > >     private static final QName MEDIATE_OPERATION_NAME = new
> > > > > QName("mediate");
> > > > >
> > > > >     public void initDispatcher() {
> > > > >         QName qn = new
> > > > > QName(" http://service.framework.myco.com",
> > > > > "SoapDispatcher");
> > > > >         HandlerDescription hd = new HandlerDescription(qn);
> > > > >          super.init(hd);
> > > > >     }
> > > > >
> > > > >     public AxisService findService(MessageContext mc) throws
> AxisFault {
> > > > >         AxisConfiguration ac =
> > > > > mc.getConfigurationContext().getAxisConfiguration();
> > > > >         AxisService as = ac.getService(myco_SERVICE_NAME);
> > > > >         return as;
> > > > >     }
> > > > >
> > > > >     public AxisOperation findOperation(AxisService svc,
> MessageContext mc)
> > > > > throws AxisFault {
> > > > >         AxisOperation ao = svc.getOperation(MEDIATE_OPERATION_NAME);
> > > > >         return ao;
> > > > >     }
> > > > > }
> > > > >
> > > > >
> > > > > =======
> > > > >
> > > > > axis2.xml
> > > > >
> > > > > <axisconfig name="SoapAxisJava2.0">
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <!-- Parameters -->
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <parameter name="hotdeployment" locked="false">true</parameter>
> > > > >     <parameter name="hotupdate"
> > > > > locked="false">false</parameter>
> > > > >     <parameter name="enableMTOM"
> > > > > locked="false">false</parameter>
> > > > >     <parameter
> name="sendStacktraceDetailsWithFaults"
> > > > > locked="false">true</parameter>
> > > > >
> > > > >     <!-- Uncomment this to enable REST support -->
> > > > >     <!--    <parameter name="enableREST"
> > > > > locked="false">true</parameter>-->
> > > > >
> > > > >     <parameter name="userName"
> > > > > locked="false">admin</parameter>
> > > > >     <parameter name="password"
> > > > > locked="false">axis2</parameter>
> > > > >
> > > > >     <!-- Always engage addressing for Soap -->
> > > > >     <module ref="addressing"/>
> > > > >
> > > > >      <!--
> =================================================
> > > > > -->
> > > > >     <!-- Message Receivers -->
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <!--This is the Deafult Message Receiver for the system , if you
> want to
> > > > > have MessageReceivers for -->
> > > > >     <!--all the other MEP implement it and add the correct entry to
> here ,
> > > > > so that you can refer from-->
> > > > >     <!--any operation -->
> > > > >     <!--Note : You can ovride this for particular service by adding
> the same
> > > > > element with your requirement-->
> > > > >     <messageReceivers>
> > > > >         <messageReceiver
> > > > > mep="http://www.w3.org/2004/08/wsdl/in-only"
> > > > >
> > > > >
> class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver
> > > > > "/>
> > > > >         <messageReceiver
> > > > > mep="http://www.w3.org/2004/08/wsdl/in-out "
> > > > >
> > > > >
> class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver
> > > > > "/>
> > > > >     </messageReceivers>
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <!-- Transport Ins -->
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <transportReceiver name="http"
> > > > >
> > > > >
> class="org.apache.axis2.transport.http.SimpleHTTPServer">
> > > > >         <parameter name="port" locked="false">6060</parameter>
> > > > >         <!--If you want to give your own host address for EPR
> generation-->
> > > > >         <!--uncommet following paramter , and set as you
> required.-->
> > > > >         <!--<parameter name="hostname" locked="false">
> > > > > http://myApp.com/ws</parameter>-->
> > > > >     </transportReceiver>
> > > > >
> > > > >     <transportReceiver name="tcp"
> > > > >
> > > > > class="org.apache.axis2.transport.tcp.TCPServer ">
> > > > >         <parameter name="port" locked="false">6061</parameter>
> > > > >         <!--If you want to give your own host address for EPR
> generation-->
> > > > >         <!--uncommet following paramter , and set as you
> required.-->
> > > > >         <!--<parameter name="hostname"
> > > > > locked="false">tcp://myApp.com/ws</parameter>-->
> > > > >     </transportReceiver>
> > > > >
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <!-- Transport Outs -->
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >
> > > > >     <transportSender name="tcp"
> > > > >
> > > > > class="
> org.apache.axis2.transport.tcp.TCPTransportSender
> > > > > "/>
> > > > >     <transportSender name="local"
> > > > >
> > > > >
> class="org.apache.axis2.transport.local.LocalTransportSender"/>
> > > > >     <transportSender name="jms"
> > > > >                      class="
> > > > > org.apache.axis2.transport.jms.JMSSender"/>
> > > > >     <transportSender name="http"
> > > > >
> > > > > class="
> org.apache.axis2.transport.http.CommonsHTTPTransportSender">
> > > > >         <parameter name="PROTOCOL"
> > > > > locked="false">HTTP/1.1</parameter>
> > > > >         <parameter name="Transfer-Encoding"
> > > > > locked="false">chunked</parameter>
> > > > >     </transportSender>
> > > > >     <transportSender name="https"
> > > > >                      class="
> > > > >
> org.apache.axis2.transport.http.CommonsHTTPTransportSender
> ">
> > > > >         <parameter name="PROTOCOL"
> > > > > locked="false">HTTP/1.1</parameter>
> > > > >         <parameter name="Transfer-Encoding"
> > > > > locked="false">chunked</parameter>
> > > > >     </transportSender>
> > > > >
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <!-- Phases  -->
> > > > >     <!--
> =================================================
> > > > > -->
> > > > >     <phaseOrder type="inflow">
> > > > >         <!--  System pre defined phases       -->
> > > > >          <phase name="Transport">
> > > > >             <!--<handler
> > > > > name="RequestURIBasedDispatcher"-->
> > > > >                      <!--class="
> > > > >
> org.apache.axis2.engine.RequestURIBasedDispatcher">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >             <!--<handler
> > > > > name="SOAPActionBasedDispatcher"-->
> > > > >
> > > > >
> <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher
> ">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >         </phase>
> > > > >         <phase name="Security"/>
> > > > >         <phase name="PreDispatch"/>
> > > > >         <phase name="Dispatch"
> > > > > class="org.apache.axis2.engine.DispatchPhase ">
> > > > >             <handler name="SoapDispatcher"
> > > > >
> > > > > class="com.myco.framework.service.SoapDispatcher">
> > > > >                 <order phase="Dispatch"/>
> > > > >              </handler>
> > > > >
> > > > >             <!--<handler
> > > > > name="AddressingBasedDispatcher"-->
> > > > >
> > > > >
> <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >
> > > > >             <!--<handler
> > > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > > >                      <!--class="
> > > > >
> org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> ">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >
> > > > >             <handler name="InstanceDispatcher"
> > > > >
> > > > > class="org.apache.axis2.engine.InstanceDispatcher">
> > > > >                 <order phase="PostDispatch"/>
> > > > >             </handler>
> > > > >         </phase>
> > > > >         <!--  System pre defined phases       -->
> > > > >         <!--   After Postdispatch phase module author or or service
> author
> > > > > can add any phase he want      -->
> > > > >         <phase name="OperationInPhase"/>
> > > > >     </phaseOrder>
> > > > >     <phaseOrder type="outflow">
> > > > >         <!--      user can add his own phases to this area  -->
> > > > >         <phase name="OperationOutPhase"/>
> > > > >         <!--system predefined phase-->
> > > > >         <!--these phase will run irrespective of the service-->
> > > > >         <phase name="PolicyDetermination"/>
> > > > >         <phase name="MessageOut"/>
> > > > >     </phaseOrder>
> > > > >     <phaseOrder type="INfaultflow">
> > > > >         <phase name="PreDispatch"/>
> > > > >         <phase name="Dispatch"
> > > > > class=" org.apache.axis2.engine.DispatchPhase">
> > > > >
> > > > >             <handler name="SoapDispatcher"
> > > > >
> > > > > class="com.myco.framework.service.SoapDispatcher ">
> > > > >                 <order phase="Dispatch"/>
> > > > >             </handler>
> > > > >
> > > > >             <!--<handler
> > > > > name="RequestURIBasedDispatcher"-->
> > > > >                      <!--class="
> > > > > org.apache.axis2.engine.RequestURIBasedDispatcher
> ">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >
> > > > >             <!--<handler
> > > > > name="SOAPActionBasedDispatcher"-->
> > > > >
> > > > >
> <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >
> > > > >             <!--<handler
> > > > > name="AddressingBasedDispatcher"-->
> > > > >
> > > > >
> <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >
> > > > >             <!--<handler
> > > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > > >
> > > > >
> <!--class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > > > > ">-->
> > > > >                 <!--<order phase="Dispatch"/>-->
> > > > >             <!--</handler>-->
> > > > >             <handler name="InstanceDispatcher"
> > > > >                      class="
> > > > > org.apache.axis2.engine.InstanceDispatcher">
> > > > >                 <order phase="PostDispatch"/>
> > > > >             </handler>
> > > > >         </phase>
> > > > >         <!--      user can add his own phases to this area  -->
> > > > >         <phase name="OperationInFaultPhase"/>
> > > > >     </phaseOrder>
> > > > >     <phaseOrder type="Outfaultflow">
> > > > >         <!--      user can add his own phases to this area  -->
> > > > >         <phase name="OperationOutFaultPhase"/>
> > > > >         <phase name="PolicyDetermination"/>
> > > > >         <phase name="MessageOut"/>
> > > > >     </phaseOrder>
> > > > > </axisconfig>
> > > > >
> > > > > ==========
> > > > >
> > > > > //SoapMessageReceiver.java
> > > > >
> > > > > package com.myco.framework.service ;
> > > > >
> > > > > import org.apache.axis2.AxisFault;
> > > > > import org.apache.axis2.Constants;
> > > > > import org.apache.axis2.engine.MessageReceiver ;
> > > > >
> > > > > /**
> > > > >  * This message receiver should be configured in the Axis2
> configuration as
> > > > > the
> > > > >  * default message receiver, which will handle all incoming messages
> through
> > > > > the
> > > > >  * synapse mediation
> > > > >  */
> > > > > public class SoapMessageReceiver implements MessageReceiver {
> > > > >
> > > > >     public void
> > > > > receive(org.apache.axis2.context.MessageContext mc)
> throws
> > > > > AxisFault {
> > > > >
> > > > >         System.out.println("##### Soap Message Receiver received a
> new
> > > > > message...");
> > > > >         System.out.println ("Received To: " + (mc.getTo() != null ?
> > > > >             mc.getTo().getAddress() : "null"));
> > > > >         System.out.println("SOAPAction: " + (mc.getWSAAction () !=
> null ?
> > > > >             mc.getWSAAction () : "null"));
> > > > >         System.out.println("Body : \n" + mc.getEnvelope());
> > > > >     }
> > > > > }
> > > > >
> > > > > =======
> > > > > services.xml
> > > > >
> > > > >   <service name="synapse">
> > > > >
> > > > >     <operation name="mediate" >
> > > > >           <messageReceiver
> > > > >
> class="com.myco.framework.service.SoapMessageReceiver " />
> > > > >     </operation>
> > > > >
> > > > >   </service>
> > > > >
> > > > > ====
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Paul Fremantle
> > > > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
> > > >
> > > > http://bloglines.com/blog/paulfremantle
> > > > paul@wso2.com
> > > >
> > > > "Oxygenating the Web Service Platform", www.wso2.com
> > > >
> > > >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail:
> synapse-dev-unsubscribe@ws.apache.org
> > > > For additional commands, e-mail: synapse-dev-help@ws.apache.org
> > > >
> > > >
> > >
> > >
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> synapse-dev-unsubscribe@ws.apache.org For additional
> commands, e-mail: synapse-dev-help@ws.apache.org


-- 
Paul Fremantle
VP/Technology, WSO2 and OASIS WS-RX TC Co-chair

http://bloglines.com/blog/paulfremantle
paul@wso2.com

"Oxygenating the Web Service Platform", www.wso2.com

---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org


Re: Implementing a Web service proxy

Posted by Soactive Inc <so...@gmail.com>.
Thanks to everyone that has replied to my email. I agree with you that
Synapse is aiming at solving the problem that I have articulated in my
email. However, the documentation on how to make this happen in a generic
manner is, at best, inadequate. I would appreciate if someone can provide me
a step-by-step description on how to achieve a simple, generic Web service
proxy functionality either in a reply email or in the form of a document. If
I cannot use Synapse for implementing this simple scenario, I am not sure
how useful its going to be to others using it.

In the meantime, I will try to figure this out on my own.

Thanks,
Ron

On 6/25/06, Saminda Abeyruwan <sa...@gmail.com> wrote:
>
> Hi,
>
> As Paul and Ant said, you have written a dispatcher as like the one in
> Synapse. Well, luckily you don't have to do it.
>
> At present we give Synapse as a .MAR, so the user just need to drop to a
> Axis2 repository and just need to engage it. (This feature is available in
> current SVN code base).
>
> There we introduce another cool feature call wsdl level mediation.  IMO,
> this is the feature you are looking for. For Example,  In synapse.xml, you
> have to do the following,
>
> <synapse xmlns="http://ws.apache.org/ns/synapse">
> <definition>
>   <endpoint name="invesbot" address="http://ws.invesbot.com/stockquotes.asmx
> "/>
> </definition>
> <rules/>
> <proxies>
>   <proxy name="InvesbotForwardProxy" type="wsdl" description="This
> simply    forwards all messages to the investbot endpoint">
>         <endpoint protocol="http" uri="/MyfirstProxy"/>
>         <target endpoint="invesbot"/>
>         <wsdl
> url="file:synapse_repository/conf/sample/sample_proxy_1.wsdl"/>
>       </proxy>
> </proxies>
> </synapse>
>
> You need provide the proxy name, and type.  <target/> will work on the
> outbound message. "invesbot" reference to the actual end point which is
> defined in <definition/>. Synapse team will provide a documentation on this
> soon. Please try the proxy_service_sample_3 for more info.
>
> Saminda
>
>
>
>
> On 6/26/06, ant elder <an...@gmail.com> wrote:
> >
> > Hi Ron,
> >
> > From what you describe of you requirements this is exactly the type of
> > thing Synapse is intended to support so I'd really like to understand more
> > why you don't want to use it. Can you say a bit more about why you want to
> > implement this yourself? Even if we can't convince you maybe help us make
> > Synapse better for others. Reiterating what Paul said, Synapse really is
> > very small and lightweight. Although implementing a WS proxy like you
> > describe appears easy at first i think you'll find it will start to get more
> > complicated once you need to support anything other than a few trivial
> > services.
> >
> > That said, from the files you included the SoapDispatcher dispatches to
> > a service named "SoapGateway" but the service.xml file defines a service
> > name "synapse", should the service name be "SoapGateway"?
> >
> >     ...ant
> >
> >
> > On 6/25/06, Paul Fremantle < pzfreo@gmail.com> wrote:
> > >
> > > Hi
> > >
> > > The synapse JAR is *92K*. Most of what it is doing is basically the
> > > same as what you are doing. Can I suggest you take another look!
> > >
> > > Paul
> > >
> > > On 6/25/06, Soactive Inc < soactive@gmail.com> wrote:
> > > > I am trying to implement a simple service proxy on top of Axis2 and
> > > ran into
> > > > the Synapse project recently.
> > > >
> > > > The following are the requirements of the proxy:
> > > >
> > > > 1. The proxy is on the server side and sits in between a client
> > > accessing a
> > > > Web service and the actual Web service endpoint.
> > > >
> > > > 2. The server on which the proxy service is hosted does not contain
> > > any of
> > > > the service endpoints.
> > > >
> > > > 3. The proxy receives requests from the clients and redirects the
> > > calls to
> > > > the endpoints.
> > > >
> > > > 4. The service proxy is itself implemented as a Web service.
> > > >
> > > > I realize that the above requirements are all satisfied using the
> > > Synapse
> > > > intermediary server. I am now trying to implement this service proxy
> > > using
> > > > the essential pieces of Synapse without the need to install Synapse
> > > (since I
> > > > need the proxy to be lightweight and don't need all of the other
> > > features
> > > > implemented within Synapse). So, to achieve this desired
> > > functionality, I
> > > > did the following:
> > > >
> > > > a) Implemented a dispatcher class.
> > > >
> > > > b) Registered the dispatcher within Axis2.xml.
> > > >
> > > > c) Implemented a receiver class and invoking the mediate method
> > > within the
> > > > dispatcher class.
> > > >
> > > > d) Registered this custom receiver in services.xml.
> > > >
> > > > I am appending the content of the various files below. Can someone
> > > suggest
> > > > if I'm missing something in the above steps. Axis2 seems to be
> > > complaining
> > > > that the WSDL is missing or that I am not using the RPC message
> > > receiver and
> > > > I don't see any of this code being executed either.
> > > >
> > > > Best,
> > > > Ron
> > > >
> > > > ----
> > > >
> > > > // SoapDispatcher.java
> > > >
> > > > package com.myco.framework.service;
> > > >
> > > > import org.apache.axis2.AxisFault;
> > > > import org.apache.axis2.context.MessageContext;
> > > > import org.apache.axis2.description.AxisOperation ;
> > > > import org.apache.axis2.description.AxisService;
> > > > import org.apache.axis2.description.HandlerDescription ;
> > > > import org.apache.axis2.engine.AbstractDispatcher;
> > > > import org.apache.axis2.engine.AxisConfiguration;
> > > >  import org.apache.commons.logging.Log;
> > > > import org.apache.commons.logging.LogFactory;
> > > >
> > > > import javax.xml.namespace.QName;
> > > >
> > > > /**
> > > >  * This is the Axis2 Dispatcher which is registered with the Axis2
> > > engine.
> > > > It dispatches
> > > >  * each and every message received to the MessageReceiver for
> > > processing.
> > > >  */
> > > > public class SoapDispatcher extends AbstractDispatcher {
> > > >
> > > >     private static final long serialVersionUID =
> > > -6970206989111592645L;
> > > >
> > > >     private static final String myco_SERVICE_NAME = "SoapGateway";
> > > >
> > > >     private static final QName MEDIATE_OPERATION_NAME = new
> > > > QName("mediate");
> > > >
> > > >     public void initDispatcher() {
> > > >         QName qn = new
> > > > QName(" http://service.framework.myco.com",
> > > > "SoapDispatcher");
> > > >         HandlerDescription hd = new HandlerDescription(qn);
> > > >          super.init(hd);
> > > >     }
> > > >
> > > >     public AxisService findService(MessageContext mc) throws
> > > AxisFault {
> > > >         AxisConfiguration ac =
> > > > mc.getConfigurationContext().getAxisConfiguration();
> > > >         AxisService as = ac.getService(myco_SERVICE_NAME);
> > > >         return as;
> > > >     }
> > > >
> > > >     public AxisOperation findOperation(AxisService svc,
> > > MessageContext mc)
> > > > throws AxisFault {
> > > >         AxisOperation ao = svc.getOperation(MEDIATE_OPERATION_NAME);
> > > >         return ao;
> > > >     }
> > > > }
> > > >
> > > >
> > > > =======
> > > >
> > > > axis2.xml
> > > >
> > > > <axisconfig name="SoapAxisJava2.0">
> > > >     <!-- =================================================
> > > > -->
> > > >     <!-- Parameters -->
> > > >     <!-- =================================================
> > > > -->
> > > >     <parameter name="hotdeployment" locked="false">true</parameter>
> > > >     <parameter name="hotupdate"
> > > > locked="false">false</parameter>
> > > >     <parameter name="enableMTOM"
> > > > locked="false">false</parameter>
> > > >     <parameter name="sendStacktraceDetailsWithFaults"
> > > > locked="false">true</parameter>
> > > >
> > > >     <!-- Uncomment this to enable REST support -->
> > > >     <!--    <parameter name="enableREST"
> > > > locked="false">true</parameter>-->
> > > >
> > > >     <parameter name="userName"
> > > > locked="false">admin</parameter>
> > > >     <parameter name="password"
> > > > locked="false">axis2</parameter>
> > > >
> > > >     <!-- Always engage addressing for Soap -->
> > > >     <module ref="addressing"/>
> > > >
> > > >      <!-- =================================================
> > > > -->
> > > >     <!-- Message Receivers -->
> > > >     <!-- =================================================
> > > > -->
> > > >     <!--This is the Deafult Message Receiver for the system , if you
> > > want to
> > > > have MessageReceivers for -->
> > > >     <!--all the other MEP implement it and add the correct entry to
> > > here ,
> > > > so that you can refer from-->
> > > >     <!--any operation -->
> > > >     <!--Note : You can ovride this for particular service by adding
> > > the same
> > > > element with your requirement-->
> > > >     <messageReceivers>
> > > >         <messageReceiver
> > > > mep="http://www.w3.org/2004/08/wsdl/in-only"
> > > >
> > > > class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver
> > > > "/>
> > > >         <messageReceiver
> > > > mep="http://www.w3.org/2004/08/wsdl/in-out "
> > > >
> > > > class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver
> > > > "/>
> > > >     </messageReceivers>
> > > >     <!-- =================================================
> > > > -->
> > > >     <!-- Transport Ins -->
> > > >     <!-- =================================================
> > > > -->
> > > >     <transportReceiver name="http"
> > > >
> > > > class="org.apache.axis2.transport.http.SimpleHTTPServer">
> > > >         <parameter name="port" locked="false">6060</parameter>
> > > >         <!--If you want to give your own host address for EPR
> > > generation-->
> > > >         <!--uncommet following paramter , and set as you
> > > required.-->
> > > >         <!--<parameter name="hostname" locked="false">
> > > > http://myApp.com/ws</parameter>-->
> > > >     </transportReceiver>
> > > >
> > > >     <transportReceiver name="tcp"
> > > >
> > > > class="org.apache.axis2.transport.tcp.TCPServer ">
> > > >         <parameter name="port" locked="false">6061</parameter>
> > > >         <!--If you want to give your own host address for EPR
> > > generation-->
> > > >         <!--uncommet following paramter , and set as you
> > > required.-->
> > > >         <!--<parameter name="hostname"
> > > > locked="false">tcp://myApp.com/ws</parameter>-->
> > > >     </transportReceiver>
> > > >
> > > >     <!-- =================================================
> > > > -->
> > > >     <!-- Transport Outs -->
> > > >     <!-- =================================================
> > > > -->
> > > >
> > > >     <transportSender name="tcp"
> > > >
> > > > class=" org.apache.axis2.transport.tcp.TCPTransportSender
> > > > "/>
> > > >     <transportSender name="local"
> > > >
> > > > class="org.apache.axis2.transport.local.LocalTransportSender"/>
> > > >     <transportSender name="jms"
> > > >                      class="
> > > > org.apache.axis2.transport.jms.JMSSender"/>
> > > >     <transportSender name="http"
> > > >
> > > > class=" org.apache.axis2.transport.http.CommonsHTTPTransportSender">
> > > >         <parameter name="PROTOCOL"
> > > > locked="false">HTTP/1.1</parameter>
> > > >         <parameter name="Transfer-Encoding"
> > > > locked="false">chunked</parameter>
> > > >     </transportSender>
> > > >     <transportSender name="https"
> > > >                      class="
> > > > org.apache.axis2.transport.http.CommonsHTTPTransportSender ">
> > > >         <parameter name="PROTOCOL"
> > > > locked="false">HTTP/1.1</parameter>
> > > >         <parameter name="Transfer-Encoding"
> > > > locked="false">chunked</parameter>
> > > >     </transportSender>
> > > >
> > > >     <!-- =================================================
> > > > -->
> > > >     <!-- Phases  -->
> > > >     <!-- =================================================
> > > > -->
> > > >     <phaseOrder type="inflow">
> > > >         <!--  System pre defined phases       -->
> > > >          <phase name="Transport">
> > > >             <!--<handler
> > > > name="RequestURIBasedDispatcher"-->
> > > >                      <!--class="
> > > > org.apache.axis2.engine.RequestURIBasedDispatcher">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >             <!--<handler
> > > > name="SOAPActionBasedDispatcher"-->
> > > >
> > > > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher ">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >         </phase>
> > > >         <phase name="Security"/>
> > > >         <phase name="PreDispatch"/>
> > > >         <phase name="Dispatch"
> > > > class="org.apache.axis2.engine.DispatchPhase ">
> > > >             <handler name="SoapDispatcher"
> > > >
> > > > class="com.myco.framework.service.SoapDispatcher">
> > > >                 <order phase="Dispatch"/>
> > > >              </handler>
> > > >
> > > >             <!--<handler
> > > > name="AddressingBasedDispatcher"-->
> > > >
> > > > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >
> > > >             <!--<handler
> > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > >                      <!--class="
> > > > org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher ">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >
> > > >             <handler name="InstanceDispatcher"
> > > >
> > > > class="org.apache.axis2.engine.InstanceDispatcher">
> > > >                 <order phase="PostDispatch"/>
> > > >             </handler>
> > > >         </phase>
> > > >         <!--  System pre defined phases       -->
> > > >         <!--   After Postdispatch phase module author or or service
> > > author
> > > > can add any phase he want      -->
> > > >         <phase name="OperationInPhase"/>
> > > >     </phaseOrder>
> > > >     <phaseOrder type="outflow">
> > > >         <!--      user can add his own phases to this area  -->
> > > >         <phase name="OperationOutPhase"/>
> > > >         <!--system predefined phase-->
> > > >         <!--these phase will run irrespective of the service-->
> > > >         <phase name="PolicyDetermination"/>
> > > >         <phase name="MessageOut"/>
> > > >     </phaseOrder>
> > > >     <phaseOrder type="INfaultflow">
> > > >         <phase name="PreDispatch"/>
> > > >         <phase name="Dispatch"
> > > > class=" org.apache.axis2.engine.DispatchPhase">
> > > >
> > > >             <handler name="SoapDispatcher"
> > > >
> > > > class="com.myco.framework.service.SoapDispatcher ">
> > > >                 <order phase="Dispatch"/>
> > > >             </handler>
> > > >
> > > >             <!--<handler
> > > > name="RequestURIBasedDispatcher"-->
> > > >                      <!--class="
> > > > org.apache.axis2.engine.RequestURIBasedDispatcher ">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >
> > > >             <!--<handler
> > > > name="SOAPActionBasedDispatcher"-->
> > > >
> > > > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >
> > > >             <!--<handler
> > > > name="AddressingBasedDispatcher"-->
> > > >
> > > > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >
> > > >             <!--<handler
> > > > name="SOAPMessageBodyBasedDispatcher"-->
> > > >
> > > > <!--class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > > > ">-->
> > > >                 <!--<order phase="Dispatch"/>-->
> > > >             <!--</handler>-->
> > > >             <handler name="InstanceDispatcher"
> > > >                      class="
> > > > org.apache.axis2.engine.InstanceDispatcher">
> > > >                 <order phase="PostDispatch"/>
> > > >             </handler>
> > > >         </phase>
> > > >         <!--      user can add his own phases to this area  -->
> > > >         <phase name="OperationInFaultPhase"/>
> > > >     </phaseOrder>
> > > >     <phaseOrder type="Outfaultflow">
> > > >         <!--      user can add his own phases to this area  -->
> > > >         <phase name="OperationOutFaultPhase"/>
> > > >         <phase name="PolicyDetermination"/>
> > > >         <phase name="MessageOut"/>
> > > >     </phaseOrder>
> > > > </axisconfig>
> > > >
> > > > ==========
> > > >
> > > > //SoapMessageReceiver.java
> > > >
> > > > package com.myco.framework.service ;
> > > >
> > > > import org.apache.axis2.AxisFault;
> > > > import org.apache.axis2.Constants;
> > > > import org.apache.axis2.engine.MessageReceiver ;
> > > >
> > > > /**
> > > >  * This message receiver should be configured in the Axis2
> > > configuration as
> > > > the
> > > >  * default message receiver, which will handle all incoming messages
> > > through
> > > > the
> > > >  * synapse mediation
> > > >  */
> > > > public class SoapMessageReceiver implements MessageReceiver {
> > > >
> > > >     public void
> > > > receive(org.apache.axis2.context.MessageContext mc) throws
> > > > AxisFault {
> > > >
> > > >         System.out.println("##### Soap Message Receiver received a
> > > new
> > > > message...");
> > > >         System.out.println ("Received To: " + (mc.getTo() != null ?
> > > >             mc.getTo().getAddress() : "null"));
> > > >         System.out.println("SOAPAction: " + (mc.getWSAAction () !=
> > > null ?
> > > >             mc.getWSAAction () : "null"));
> > > >         System.out.println("Body : \n" + mc.getEnvelope());
> > > >     }
> > > > }
> > > >
> > > > =======
> > > > services.xml
> > > >
> > > >   <service name="synapse">
> > > >
> > > >     <operation name="mediate" >
> > > >           <messageReceiver
> > > > class="com.myco.framework.service.SoapMessageReceiver " />
> > > >     </operation>
> > > >
> > > >   </service>
> > > >
> > > > ====
> > > >
> > > >
> > > >
> > >
> > >
> > > --
> > > Paul Fremantle
> > > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
> > >
> > > http://bloglines.com/blog/paulfremantle
> > > paul@wso2.com
> > >
> > > "Oxygenating the Web Service Platform", www.wso2.com
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
> > > For additional commands, e-mail: synapse-dev-help@ws.apache.org
> > >
> > >
> >
>

Re: Implementing a Web service proxy

Posted by Saminda Abeyruwan <sa...@gmail.com>.
Hi,

As Paul and Ant said, you have written a dispatcher as like the one in
Synapse. Well, luckily you don't have to do it.

At present we give Synapse as a .MAR, so the user just need to drop to a
Axis2 repository and just need to engage it. (This feature is available in
current SVN code base).

There we introduce another cool feature call wsdl level mediation.  IMO,
this is the feature you are looking for. For Example,  In synapse.xml, you
have to do the following,

<synapse xmlns="http://ws.apache.org/ns/synapse">
<definition>
  <endpoint name="invesbot" address="http://ws.invesbot.com/stockquotes.asmx
"/>
</definition>
<rules/>
<proxies>
  <proxy name="InvesbotForwardProxy" type="wsdl" description="This simply
forwards all messages to the investbot endpoint">
        <endpoint protocol="http" uri="/MyfirstProxy"/>
        <target endpoint="invesbot"/>
        <wsdl
url="file:synapse_repository/conf/sample/sample_proxy_1.wsdl"/>
      </proxy>
</proxies>
</synapse>

You need provide the proxy name, and type.  <target/> will work on the
outbound message. "invesbot" reference to the actual end point which is
defined in <definition/>. Synapse team will provide a documentation on this
soon. Please try the proxy_service_sample_3 for more info.

Saminda



On 6/26/06, ant elder <an...@gmail.com> wrote:
>
> Hi Ron,
>
> From what you describe of you requirements this is exactly the type of
> thing Synapse is intended to support so I'd really like to understand more
> why you don't want to use it. Can you say a bit more about why you want to
> implement this yourself? Even if we can't convince you maybe help us make
> Synapse better for others. Reiterating what Paul said, Synapse really is
> very small and lightweight. Although implementing a WS proxy like you
> describe appears easy at first i think you'll find it will start to get more
> complicated once you need to support anything other than a few trivial
> services.
>
> That said, from the files you included the SoapDispatcher dispatches to a
> service named "SoapGateway" but the service.xml file defines a service
> name "synapse", should the service name be "SoapGateway"?
>
>     ...ant
>
>
> On 6/25/06, Paul Fremantle <pz...@gmail.com> wrote:
> >
> > Hi
> >
> > The synapse JAR is *92K*. Most of what it is doing is basically the
> > same as what you are doing. Can I suggest you take another look!
> >
> > Paul
> >
> > On 6/25/06, Soactive Inc < soactive@gmail.com> wrote:
> > > I am trying to implement a simple service proxy on top of Axis2 and
> > ran into
> > > the Synapse project recently.
> > >
> > > The following are the requirements of the proxy:
> > >
> > > 1. The proxy is on the server side and sits in between a client
> > accessing a
> > > Web service and the actual Web service endpoint.
> > >
> > > 2. The server on which the proxy service is hosted does not contain
> > any of
> > > the service endpoints.
> > >
> > > 3. The proxy receives requests from the clients and redirects the
> > calls to
> > > the endpoints.
> > >
> > > 4. The service proxy is itself implemented as a Web service.
> > >
> > > I realize that the above requirements are all satisfied using the
> > Synapse
> > > intermediary server. I am now trying to implement this service proxy
> > using
> > > the essential pieces of Synapse without the need to install Synapse
> > (since I
> > > need the proxy to be lightweight and don't need all of the other
> > features
> > > implemented within Synapse). So, to achieve this desired
> > functionality, I
> > > did the following:
> > >
> > > a) Implemented a dispatcher class.
> > >
> > > b) Registered the dispatcher within Axis2.xml.
> > >
> > > c) Implemented a receiver class and invoking the mediate method within
> > the
> > > dispatcher class.
> > >
> > > d) Registered this custom receiver in services.xml.
> > >
> > > I am appending the content of the various files below. Can someone
> > suggest
> > > if I'm missing something in the above steps. Axis2 seems to be
> > complaining
> > > that the WSDL is missing or that I am not using the RPC message
> > receiver and
> > > I don't see any of this code being executed either.
> > >
> > > Best,
> > > Ron
> > >
> > > ----
> > >
> > > // SoapDispatcher.java
> > >
> > > package com.myco.framework.service;
> > >
> > > import org.apache.axis2.AxisFault;
> > > import org.apache.axis2.context.MessageContext;
> > > import org.apache.axis2.description.AxisOperation ;
> > > import org.apache.axis2.description.AxisService;
> > > import org.apache.axis2.description.HandlerDescription ;
> > > import org.apache.axis2.engine.AbstractDispatcher;
> > > import org.apache.axis2.engine.AxisConfiguration;
> > >  import org.apache.commons.logging.Log;
> > > import org.apache.commons.logging.LogFactory;
> > >
> > > import javax.xml.namespace.QName;
> > >
> > > /**
> > >  * This is the Axis2 Dispatcher which is registered with the Axis2
> > engine.
> > > It dispatches
> > >  * each and every message received to the MessageReceiver for
> > processing.
> > >  */
> > > public class SoapDispatcher extends AbstractDispatcher {
> > >
> > >     private static final long serialVersionUID =
> > -6970206989111592645L;
> > >
> > >     private static final String myco_SERVICE_NAME = "SoapGateway";
> > >
> > >     private static final QName MEDIATE_OPERATION_NAME = new
> > > QName("mediate");
> > >
> > >     public void initDispatcher() {
> > >         QName qn = new
> > > QName(" http://service.framework.myco.com",
> > > "SoapDispatcher");
> > >         HandlerDescription hd = new HandlerDescription(qn);
> > >          super.init(hd);
> > >     }
> > >
> > >     public AxisService findService(MessageContext mc) throws AxisFault
> > {
> > >         AxisConfiguration ac =
> > > mc.getConfigurationContext().getAxisConfiguration();
> > >         AxisService as = ac.getService(myco_SERVICE_NAME);
> > >         return as;
> > >     }
> > >
> > >     public AxisOperation findOperation(AxisService svc, MessageContext
> > mc)
> > > throws AxisFault {
> > >         AxisOperation ao = svc.getOperation(MEDIATE_OPERATION_NAME);
> > >         return ao;
> > >     }
> > > }
> > >
> > >
> > > =======
> > >
> > > axis2.xml
> > >
> > > <axisconfig name="SoapAxisJava2.0">
> > >     <!-- =================================================
> > > -->
> > >     <!-- Parameters -->
> > >     <!-- =================================================
> > > -->
> > >     <parameter name="hotdeployment" locked="false">true</parameter>
> > >     <parameter name="hotupdate"
> > > locked="false">false</parameter>
> > >     <parameter name="enableMTOM"
> > > locked="false">false</parameter>
> > >     <parameter name="sendStacktraceDetailsWithFaults"
> > > locked="false">true</parameter>
> > >
> > >     <!-- Uncomment this to enable REST support -->
> > >     <!--    <parameter name="enableREST"
> > > locked="false">true</parameter>-->
> > >
> > >     <parameter name="userName"
> > > locked="false">admin</parameter>
> > >     <parameter name="password"
> > > locked="false">axis2</parameter>
> > >
> > >     <!-- Always engage addressing for Soap -->
> > >     <module ref="addressing"/>
> > >
> > >      <!-- =================================================
> > > -->
> > >     <!-- Message Receivers -->
> > >     <!-- =================================================
> > > -->
> > >     <!--This is the Deafult Message Receiver for the system , if you
> > want to
> > > have MessageReceivers for -->
> > >     <!--all the other MEP implement it and add the correct entry to
> > here ,
> > > so that you can refer from-->
> > >     <!--any operation -->
> > >     <!--Note : You can ovride this for particular service by adding
> > the same
> > > element with your requirement-->
> > >     <messageReceivers>
> > >         <messageReceiver
> > > mep="http://www.w3.org/2004/08/wsdl/in-only"
> > >
> > > class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver
> > > "/>
> > >         <messageReceiver
> > > mep="http://www.w3.org/2004/08/wsdl/in-out"
> > >
> > > class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver
> > > "/>
> > >     </messageReceivers>
> > >     <!-- =================================================
> > > -->
> > >     <!-- Transport Ins -->
> > >     <!-- =================================================
> > > -->
> > >     <transportReceiver name="http"
> > >
> > > class="org.apache.axis2.transport.http.SimpleHTTPServer">
> > >         <parameter name="port" locked="false">6060</parameter>
> > >         <!--If you want to give your own host address for EPR
> > generation-->
> > >         <!--uncommet following paramter , and set as you required.-->
> > >         <!--<parameter name="hostname" locked="false">
> > > http://myApp.com/ws</parameter>-->
> > >     </transportReceiver>
> > >
> > >     <transportReceiver name="tcp"
> > >
> > > class="org.apache.axis2.transport.tcp.TCPServer ">
> > >         <parameter name="port" locked="false">6061</parameter>
> > >         <!--If you want to give your own host address for EPR
> > generation-->
> > >         <!--uncommet following paramter , and set as you required.-->
> > >         <!--<parameter name="hostname"
> > > locked="false">tcp://myApp.com/ws</parameter>-->
> > >     </transportReceiver>
> > >
> > >     <!-- =================================================
> > > -->
> > >     <!-- Transport Outs -->
> > >     <!-- =================================================
> > > -->
> > >
> > >     <transportSender name="tcp"
> > >
> > > class=" org.apache.axis2.transport.tcp.TCPTransportSender
> > > "/>
> > >     <transportSender name="local"
> > >
> > > class="org.apache.axis2.transport.local.LocalTransportSender"/>
> > >     <transportSender name="jms"
> > >                      class="
> > > org.apache.axis2.transport.jms.JMSSender"/>
> > >     <transportSender name="http"
> > >
> > > class=" org.apache.axis2.transport.http.CommonsHTTPTransportSender">
> > >         <parameter name="PROTOCOL"
> > > locked="false">HTTP/1.1</parameter>
> > >         <parameter name="Transfer-Encoding"
> > > locked="false">chunked</parameter>
> > >     </transportSender>
> > >     <transportSender name="https"
> > >                      class="
> > > org.apache.axis2.transport.http.CommonsHTTPTransportSender ">
> > >         <parameter name="PROTOCOL"
> > > locked="false">HTTP/1.1</parameter>
> > >         <parameter name="Transfer-Encoding"
> > > locked="false">chunked</parameter>
> > >     </transportSender>
> > >
> > >     <!-- =================================================
> > > -->
> > >     <!-- Phases  -->
> > >     <!-- =================================================
> > > -->
> > >     <phaseOrder type="inflow">
> > >         <!--  System pre defined phases       -->
> > >          <phase name="Transport">
> > >             <!--<handler
> > > name="RequestURIBasedDispatcher"-->
> > >                      <!--class="
> > > org.apache.axis2.engine.RequestURIBasedDispatcher">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >             <!--<handler
> > > name="SOAPActionBasedDispatcher"-->
> > >
> > > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher ">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >         </phase>
> > >         <phase name="Security"/>
> > >         <phase name="PreDispatch"/>
> > >         <phase name="Dispatch"
> > > class="org.apache.axis2.engine.DispatchPhase ">
> > >             <handler name="SoapDispatcher"
> > >
> > > class="com.myco.framework.service.SoapDispatcher">
> > >                 <order phase="Dispatch"/>
> > >              </handler>
> > >
> > >             <!--<handler
> > > name="AddressingBasedDispatcher"-->
> > >
> > > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >
> > >             <!--<handler
> > > name="SOAPMessageBodyBasedDispatcher"-->
> > >                      <!--class="
> > > org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher ">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >
> > >             <handler name="InstanceDispatcher"
> > >
> > > class="org.apache.axis2.engine.InstanceDispatcher">
> > >                 <order phase="PostDispatch"/>
> > >             </handler>
> > >         </phase>
> > >         <!--  System pre defined phases       -->
> > >         <!--   After Postdispatch phase module author or or service
> > author
> > > can add any phase he want      -->
> > >         <phase name="OperationInPhase"/>
> > >     </phaseOrder>
> > >     <phaseOrder type="outflow">
> > >         <!--      user can add his own phases to this area  -->
> > >         <phase name="OperationOutPhase"/>
> > >         <!--system predefined phase-->
> > >         <!--these phase will run irrespective of the service-->
> > >         <phase name="PolicyDetermination"/>
> > >         <phase name="MessageOut"/>
> > >     </phaseOrder>
> > >     <phaseOrder type="INfaultflow">
> > >         <phase name="PreDispatch"/>
> > >         <phase name="Dispatch"
> > > class=" org.apache.axis2.engine.DispatchPhase">
> > >
> > >             <handler name="SoapDispatcher"
> > >
> > > class="com.myco.framework.service.SoapDispatcher ">
> > >                 <order phase="Dispatch"/>
> > >             </handler>
> > >
> > >             <!--<handler
> > > name="RequestURIBasedDispatcher"-->
> > >                      <!--class="
> > > org.apache.axis2.engine.RequestURIBasedDispatcher ">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >
> > >             <!--<handler
> > > name="SOAPActionBasedDispatcher"-->
> > >
> > > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >
> > >             <!--<handler
> > > name="AddressingBasedDispatcher"-->
> > >
> > > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >
> > >             <!--<handler
> > > name="SOAPMessageBodyBasedDispatcher"-->
> > >
> > > <!--class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > > ">-->
> > >                 <!--<order phase="Dispatch"/>-->
> > >             <!--</handler>-->
> > >             <handler name="InstanceDispatcher"
> > >                      class="
> > > org.apache.axis2.engine.InstanceDispatcher">
> > >                 <order phase="PostDispatch"/>
> > >             </handler>
> > >         </phase>
> > >         <!--      user can add his own phases to this area  -->
> > >         <phase name="OperationInFaultPhase"/>
> > >     </phaseOrder>
> > >     <phaseOrder type="Outfaultflow">
> > >         <!--      user can add his own phases to this area  -->
> > >         <phase name="OperationOutFaultPhase"/>
> > >         <phase name="PolicyDetermination"/>
> > >         <phase name="MessageOut"/>
> > >     </phaseOrder>
> > > </axisconfig>
> > >
> > > ==========
> > >
> > > //SoapMessageReceiver.java
> > >
> > > package com.myco.framework.service ;
> > >
> > > import org.apache.axis2.AxisFault;
> > > import org.apache.axis2.Constants;
> > > import org.apache.axis2.engine.MessageReceiver ;
> > >
> > > /**
> > >  * This message receiver should be configured in the Axis2
> > configuration as
> > > the
> > >  * default message receiver, which will handle all incoming messages
> > through
> > > the
> > >  * synapse mediation
> > >  */
> > > public class SoapMessageReceiver implements MessageReceiver {
> > >
> > >     public void
> > > receive(org.apache.axis2.context.MessageContext mc) throws
> > > AxisFault {
> > >
> > >         System.out.println("##### Soap Message Receiver received a new
> > > message...");
> > >         System.out.println ("Received To: " + (mc.getTo() != null ?
> > >             mc.getTo().getAddress() : "null"));
> > >         System.out.println("SOAPAction: " + (mc.getWSAAction () !=
> > null ?
> > >             mc.getWSAAction () : "null"));
> > >         System.out.println("Body : \n" + mc.getEnvelope());
> > >     }
> > > }
> > >
> > > =======
> > > services.xml
> > >
> > >   <service name="synapse">
> > >
> > >     <operation name="mediate" >
> > >           <messageReceiver
> > > class="com.myco.framework.service.SoapMessageReceiver " />
> > >     </operation>
> > >
> > >   </service>
> > >
> > > ====
> > >
> > >
> > >
> >
> >
> > --
> > Paul Fremantle
> > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
> >
> > http://bloglines.com/blog/paulfremantle
> > paul@wso2.com
> >
> > "Oxygenating the Web Service Platform", www.wso2.com
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
> > For additional commands, e-mail: synapse-dev-help@ws.apache.org
> >
> >
>

Re: Implementing a Web service proxy

Posted by ant elder <an...@gmail.com>.
Hi Ron,

>From what you describe of you requirements this is exactly the type of thing
Synapse is intended to support so I'd really like to understand more why you
don't want to use it. Can you say a bit more about why you want to implement
this yourself? Even if we can't convince you maybe help us make Synapse
better for others. Reiterating what Paul said, Synapse really is very small
and lightweight. Although implementing a WS proxy like you describe appears
easy at first i think you'll find it will start to get more complicated once
you need to support anything other than a few trivial services.

That said, from the files you included the SoapDispatcher dispatches to a
service named "SoapGateway" but the service.xml file defines a service name
"synapse", should the service name be "SoapGateway"?

    ...ant

On 6/25/06, Paul Fremantle <pz...@gmail.com> wrote:
>
> Hi
>
> The synapse JAR is *92K*. Most of what it is doing is basically the
> same as what you are doing. Can I suggest you take another look!
>
> Paul
>
> On 6/25/06, Soactive Inc <so...@gmail.com> wrote:
> > I am trying to implement a simple service proxy on top of Axis2 and ran
> into
> > the Synapse project recently.
> >
> > The following are the requirements of the proxy:
> >
> > 1. The proxy is on the server side and sits in between a client
> accessing a
> > Web service and the actual Web service endpoint.
> >
> > 2. The server on which the proxy service is hosted does not contain any
> of
> > the service endpoints.
> >
> > 3. The proxy receives requests from the clients and redirects the calls
> to
> > the endpoints.
> >
> > 4. The service proxy is itself implemented as a Web service.
> >
> > I realize that the above requirements are all satisfied using the
> Synapse
> > intermediary server. I am now trying to implement this service proxy
> using
> > the essential pieces of Synapse without the need to install Synapse
> (since I
> > need the proxy to be lightweight and don't need all of the other
> features
> > implemented within Synapse). So, to achieve this desired functionality,
> I
> > did the following:
> >
> > a) Implemented a dispatcher class.
> >
> > b) Registered the dispatcher within Axis2.xml.
> >
> > c) Implemented a receiver class and invoking the mediate method within
> the
> > dispatcher class.
> >
> > d) Registered this custom receiver in services.xml.
> >
> > I am appending the content of the various files below. Can someone
> suggest
> > if I'm missing something in the above steps. Axis2 seems to be
> complaining
> > that the WSDL is missing or that I am not using the RPC message receiver
> and
> > I don't see any of this code being executed either.
> >
> > Best,
> > Ron
> >
> > ----
> >
> > // SoapDispatcher.java
> >
> > package com.myco.framework.service;
> >
> > import org.apache.axis2.AxisFault;
> > import org.apache.axis2.context.MessageContext;
> > import org.apache.axis2.description.AxisOperation ;
> > import org.apache.axis2.description.AxisService;
> > import org.apache.axis2.description.HandlerDescription;
> > import org.apache.axis2.engine.AbstractDispatcher;
> > import org.apache.axis2.engine.AxisConfiguration;
> >  import org.apache.commons.logging.Log;
> > import org.apache.commons.logging.LogFactory;
> >
> > import javax.xml.namespace.QName;
> >
> > /**
> >  * This is the Axis2 Dispatcher which is registered with the Axis2
> engine.
> > It dispatches
> >  * each and every message received to the MessageReceiver for
> processing.
> >  */
> > public class SoapDispatcher extends AbstractDispatcher {
> >
> >     private static final long serialVersionUID = -6970206989111592645L;
> >
> >     private static final String myco_SERVICE_NAME = "SoapGateway";
> >
> >     private static final QName MEDIATE_OPERATION_NAME = new
> > QName("mediate");
> >
> >     public void initDispatcher() {
> >         QName qn = new
> > QName("http://service.framework.myco.com",
> > "SoapDispatcher");
> >         HandlerDescription hd = new HandlerDescription(qn);
> >          super.init(hd);
> >     }
> >
> >     public AxisService findService(MessageContext mc) throws AxisFault {
> >         AxisConfiguration ac =
> > mc.getConfigurationContext().getAxisConfiguration();
> >         AxisService as = ac.getService(myco_SERVICE_NAME);
> >         return as;
> >     }
> >
> >     public AxisOperation findOperation(AxisService svc, MessageContext
> mc)
> > throws AxisFault {
> >         AxisOperation ao = svc.getOperation(MEDIATE_OPERATION_NAME);
> >         return ao;
> >     }
> > }
> >
> >
> > =======
> >
> > axis2.xml
> >
> > <axisconfig name="SoapAxisJava2.0">
> >     <!-- =================================================
> > -->
> >     <!-- Parameters -->
> >     <!-- =================================================
> > -->
> >     <parameter name="hotdeployment" locked="false">true</parameter>
> >     <parameter name="hotupdate"
> > locked="false">false</parameter>
> >     <parameter name="enableMTOM"
> > locked="false">false</parameter>
> >     <parameter name="sendStacktraceDetailsWithFaults"
> > locked="false">true</parameter>
> >
> >     <!-- Uncomment this to enable REST support -->
> >     <!--    <parameter name="enableREST"
> > locked="false">true</parameter>-->
> >
> >     <parameter name="userName"
> > locked="false">admin</parameter>
> >     <parameter name="password"
> > locked="false">axis2</parameter>
> >
> >     <!-- Always engage addressing for Soap -->
> >     <module ref="addressing"/>
> >
> >      <!-- =================================================
> > -->
> >     <!-- Message Receivers -->
> >     <!-- =================================================
> > -->
> >     <!--This is the Deafult Message Receiver for the system , if you
> want to
> > have MessageReceivers for -->
> >     <!--all the other MEP implement it and add the correct entry to here
> ,
> > so that you can refer from-->
> >     <!--any operation -->
> >     <!--Note : You can ovride this for particular service by adding the
> same
> > element with your requirement-->
> >     <messageReceivers>
> >         <messageReceiver
> > mep="http://www.w3.org/2004/08/wsdl/in-only"
> >
> > class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver
> > "/>
> >         <messageReceiver
> > mep="http://www.w3.org/2004/08/wsdl/in-out"
> >
> > class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver
> > "/>
> >     </messageReceivers>
> >     <!-- =================================================
> > -->
> >     <!-- Transport Ins -->
> >     <!-- =================================================
> > -->
> >     <transportReceiver name="http"
> >
> > class="org.apache.axis2.transport.http.SimpleHTTPServer">
> >         <parameter name="port" locked="false">6060</parameter>
> >         <!--If you want to give your own host address for EPR
> generation-->
> >         <!--uncommet following paramter , and set as you required.-->
> >         <!--<parameter name="hostname" locked="false">
> > http://myApp.com/ws</parameter>-->
> >     </transportReceiver>
> >
> >     <transportReceiver name="tcp"
> >
> > class="org.apache.axis2.transport.tcp.TCPServer ">
> >         <parameter name="port" locked="false">6061</parameter>
> >         <!--If you want to give your own host address for EPR
> generation-->
> >         <!--uncommet following paramter , and set as you required.-->
> >         <!--<parameter name="hostname"
> > locked="false">tcp://myApp.com/ws</parameter>-->
> >     </transportReceiver>
> >
> >     <!-- =================================================
> > -->
> >     <!-- Transport Outs -->
> >     <!-- =================================================
> > -->
> >
> >     <transportSender name="tcp"
> >
> > class="org.apache.axis2.transport.tcp.TCPTransportSender
> > "/>
> >     <transportSender name="local"
> >
> > class="org.apache.axis2.transport.local.LocalTransportSender"/>
> >     <transportSender name="jms"
> >                      class="
> > org.apache.axis2.transport.jms.JMSSender"/>
> >     <transportSender name="http"
> >
> > class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
> >         <parameter name="PROTOCOL"
> > locked="false">HTTP/1.1</parameter>
> >         <parameter name="Transfer-Encoding"
> > locked="false">chunked</parameter>
> >     </transportSender>
> >     <transportSender name="https"
> >                      class="
> > org.apache.axis2.transport.http.CommonsHTTPTransportSender">
> >         <parameter name="PROTOCOL"
> > locked="false">HTTP/1.1</parameter>
> >         <parameter name="Transfer-Encoding"
> > locked="false">chunked</parameter>
> >     </transportSender>
> >
> >     <!-- =================================================
> > -->
> >     <!-- Phases  -->
> >     <!-- =================================================
> > -->
> >     <phaseOrder type="inflow">
> >         <!--  System pre defined phases       -->
> >          <phase name="Transport">
> >             <!--<handler
> > name="RequestURIBasedDispatcher"-->
> >                      <!--class="
> > org.apache.axis2.engine.RequestURIBasedDispatcher">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >             <!--<handler
> > name="SOAPActionBasedDispatcher"-->
> >
> > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >         </phase>
> >         <phase name="Security"/>
> >         <phase name="PreDispatch"/>
> >         <phase name="Dispatch"
> > class="org.apache.axis2.engine.DispatchPhase ">
> >             <handler name="SoapDispatcher"
> >
> > class="com.myco.framework.service.SoapDispatcher">
> >                 <order phase="Dispatch"/>
> >              </handler>
> >
> >             <!--<handler
> > name="AddressingBasedDispatcher"-->
> >
> > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >
> >             <!--<handler
> > name="SOAPMessageBodyBasedDispatcher"-->
> >                      <!--class="
> > org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >
> >             <handler name="InstanceDispatcher"
> >
> > class="org.apache.axis2.engine.InstanceDispatcher">
> >                 <order phase="PostDispatch"/>
> >             </handler>
> >         </phase>
> >         <!--  System pre defined phases       -->
> >         <!--   After Postdispatch phase module author or or service
> author
> > can add any phase he want      -->
> >         <phase name="OperationInPhase"/>
> >     </phaseOrder>
> >     <phaseOrder type="outflow">
> >         <!--      user can add his own phases to this area  -->
> >         <phase name="OperationOutPhase"/>
> >         <!--system predefined phase-->
> >         <!--these phase will run irrespective of the service-->
> >         <phase name="PolicyDetermination"/>
> >         <phase name="MessageOut"/>
> >     </phaseOrder>
> >     <phaseOrder type="INfaultflow">
> >         <phase name="PreDispatch"/>
> >         <phase name="Dispatch"
> > class="org.apache.axis2.engine.DispatchPhase">
> >
> >             <handler name="SoapDispatcher"
> >
> > class="com.myco.framework.service.SoapDispatcher ">
> >                 <order phase="Dispatch"/>
> >             </handler>
> >
> >             <!--<handler
> > name="RequestURIBasedDispatcher"-->
> >                      <!--class="
> > org.apache.axis2.engine.RequestURIBasedDispatcher">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >
> >             <!--<handler
> > name="SOAPActionBasedDispatcher"-->
> >
> > <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >
> >             <!--<handler
> > name="AddressingBasedDispatcher"-->
> >
> > <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >
> >             <!--<handler
> > name="SOAPMessageBodyBasedDispatcher"-->
> >
> > <!--class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> > ">-->
> >                 <!--<order phase="Dispatch"/>-->
> >             <!--</handler>-->
> >             <handler name="InstanceDispatcher"
> >                      class="
> > org.apache.axis2.engine.InstanceDispatcher">
> >                 <order phase="PostDispatch"/>
> >             </handler>
> >         </phase>
> >         <!--      user can add his own phases to this area  -->
> >         <phase name="OperationInFaultPhase"/>
> >     </phaseOrder>
> >     <phaseOrder type="Outfaultflow">
> >         <!--      user can add his own phases to this area  -->
> >         <phase name="OperationOutFaultPhase"/>
> >         <phase name="PolicyDetermination"/>
> >         <phase name="MessageOut"/>
> >     </phaseOrder>
> > </axisconfig>
> >
> > ==========
> >
> > //SoapMessageReceiver.java
> >
> > package com.myco.framework.service;
> >
> > import org.apache.axis2.AxisFault;
> > import org.apache.axis2.Constants;
> > import org.apache.axis2.engine.MessageReceiver ;
> >
> > /**
> >  * This message receiver should be configured in the Axis2 configuration
> as
> > the
> >  * default message receiver, which will handle all incoming messages
> through
> > the
> >  * synapse mediation
> >  */
> > public class SoapMessageReceiver implements MessageReceiver {
> >
> >     public void
> > receive(org.apache.axis2.context.MessageContext mc) throws
> > AxisFault {
> >
> >         System.out.println("##### Soap Message Receiver received a new
> > message...");
> >         System.out.println ("Received To: " + (mc.getTo() != null ?
> >             mc.getTo().getAddress() : "null"));
> >         System.out.println("SOAPAction: " + (mc.getWSAAction() != null ?
> >             mc.getWSAAction () : "null"));
> >         System.out.println("Body : \n" + mc.getEnvelope());
> >     }
> > }
> >
> > =======
> > services.xml
> >
> >   <service name="synapse">
> >
> >     <operation name="mediate" >
> >           <messageReceiver
> > class="com.myco.framework.service.SoapMessageReceiver" />
> >     </operation>
> >
> >   </service>
> >
> > ====
> >
> >
> >
>
>
> --
> Paul Fremantle
> VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
>
> http://bloglines.com/blog/paulfremantle
> paul@wso2.com
>
> "Oxygenating the Web Service Platform", www.wso2.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: synapse-dev-help@ws.apache.org
>
>

Re: Implementing a Web service proxy

Posted by Paul Fremantle <pz...@gmail.com>.
Hi

The synapse JAR is *92K*. Most of what it is doing is basically the
same as what you are doing. Can I suggest you take another look!

Paul

On 6/25/06, Soactive Inc <so...@gmail.com> wrote:
> I am trying to implement a simple service proxy on top of Axis2 and ran into
> the Synapse project recently.
>
> The following are the requirements of the proxy:
>
> 1. The proxy is on the server side and sits in between a client accessing a
> Web service and the actual Web service endpoint.
>
> 2. The server on which the proxy service is hosted does not contain any of
> the service endpoints.
>
> 3. The proxy receives requests from the clients and redirects the calls to
> the endpoints.
>
> 4. The service proxy is itself implemented as a Web service.
>
> I realize that the above requirements are all satisfied using the Synapse
> intermediary server. I am now trying to implement this service proxy using
> the essential pieces of Synapse without the need to install Synapse (since I
> need the proxy to be lightweight and don't need all of the other features
> implemented within Synapse). So, to achieve this desired functionality, I
> did the following:
>
> a) Implemented a dispatcher class.
>
> b) Registered the dispatcher within Axis2.xml.
>
> c) Implemented a receiver class and invoking the mediate method within the
> dispatcher class.
>
> d) Registered this custom receiver in services.xml.
>
> I am appending the content of the various files below. Can someone suggest
> if I'm missing something in the above steps. Axis2 seems to be complaining
> that the WSDL is missing or that I am not using the RPC message receiver and
> I don't see any of this code being executed either.
>
> Best,
> Ron
>
> ----
>
> // SoapDispatcher.java
>
> package com.myco.framework.service;
>
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.context.MessageContext;
> import org.apache.axis2.description.AxisOperation ;
> import org.apache.axis2.description.AxisService;
> import org.apache.axis2.description.HandlerDescription;
> import org.apache.axis2.engine.AbstractDispatcher;
> import org.apache.axis2.engine.AxisConfiguration;
>  import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> import javax.xml.namespace.QName;
>
> /**
>  * This is the Axis2 Dispatcher which is registered with the Axis2 engine.
> It dispatches
>  * each and every message received to the MessageReceiver for processing.
>  */
> public class SoapDispatcher extends AbstractDispatcher {
>
>     private static final long serialVersionUID = -6970206989111592645L;
>
>     private static final String myco_SERVICE_NAME = "SoapGateway";
>
>     private static final QName MEDIATE_OPERATION_NAME = new
> QName("mediate");
>
>     public void initDispatcher() {
>         QName qn = new
> QName("http://service.framework.myco.com",
> "SoapDispatcher");
>         HandlerDescription hd = new HandlerDescription(qn);
>          super.init(hd);
>     }
>
>     public AxisService findService(MessageContext mc) throws AxisFault {
>         AxisConfiguration ac =
> mc.getConfigurationContext().getAxisConfiguration();
>         AxisService as = ac.getService(myco_SERVICE_NAME);
>         return as;
>     }
>
>     public AxisOperation findOperation(AxisService svc, MessageContext mc)
> throws AxisFault {
>         AxisOperation ao = svc.getOperation(MEDIATE_OPERATION_NAME);
>         return ao;
>     }
> }
>
>
> =======
>
> axis2.xml
>
> <axisconfig name="SoapAxisJava2.0">
>     <!-- =================================================
> -->
>     <!-- Parameters -->
>     <!-- =================================================
> -->
>     <parameter name="hotdeployment" locked="false">true</parameter>
>     <parameter name="hotupdate"
> locked="false">false</parameter>
>     <parameter name="enableMTOM"
> locked="false">false</parameter>
>     <parameter name="sendStacktraceDetailsWithFaults"
> locked="false">true</parameter>
>
>     <!-- Uncomment this to enable REST support -->
>     <!--    <parameter name="enableREST"
> locked="false">true</parameter>-->
>
>     <parameter name="userName"
> locked="false">admin</parameter>
>     <parameter name="password"
> locked="false">axis2</parameter>
>
>     <!-- Always engage addressing for Soap -->
>     <module ref="addressing"/>
>
>      <!-- =================================================
> -->
>     <!-- Message Receivers -->
>     <!-- =================================================
> -->
>     <!--This is the Deafult Message Receiver for the system , if you want to
> have MessageReceivers for -->
>     <!--all the other MEP implement it and add the correct entry to here ,
> so that you can refer from-->
>     <!--any operation -->
>     <!--Note : You can ovride this for particular service by adding the same
> element with your requirement-->
>     <messageReceivers>
>         <messageReceiver
> mep="http://www.w3.org/2004/08/wsdl/in-only"
>
> class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver
> "/>
>         <messageReceiver
> mep="http://www.w3.org/2004/08/wsdl/in-out"
>
> class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver
> "/>
>     </messageReceivers>
>     <!-- =================================================
> -->
>     <!-- Transport Ins -->
>     <!-- =================================================
> -->
>     <transportReceiver name="http"
>
> class="org.apache.axis2.transport.http.SimpleHTTPServer">
>         <parameter name="port" locked="false">6060</parameter>
>         <!--If you want to give your own host address for EPR generation-->
>         <!--uncommet following paramter , and set as you required.-->
>         <!--<parameter name="hostname" locked="false">
> http://myApp.com/ws</parameter>-->
>     </transportReceiver>
>
>     <transportReceiver name="tcp"
>
> class="org.apache.axis2.transport.tcp.TCPServer ">
>         <parameter name="port" locked="false">6061</parameter>
>         <!--If you want to give your own host address for EPR generation-->
>         <!--uncommet following paramter , and set as you required.-->
>         <!--<parameter name="hostname"
> locked="false">tcp://myApp.com/ws</parameter>-->
>     </transportReceiver>
>
>     <!-- =================================================
> -->
>     <!-- Transport Outs -->
>     <!-- =================================================
> -->
>
>     <transportSender name="tcp"
>
> class="org.apache.axis2.transport.tcp.TCPTransportSender
> "/>
>     <transportSender name="local"
>
> class="org.apache.axis2.transport.local.LocalTransportSender"/>
>     <transportSender name="jms"
>                      class="
> org.apache.axis2.transport.jms.JMSSender"/>
>     <transportSender name="http"
>
> class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
>         <parameter name="PROTOCOL"
> locked="false">HTTP/1.1</parameter>
>         <parameter name="Transfer-Encoding"
> locked="false">chunked</parameter>
>     </transportSender>
>     <transportSender name="https"
>                      class="
> org.apache.axis2.transport.http.CommonsHTTPTransportSender">
>         <parameter name="PROTOCOL"
> locked="false">HTTP/1.1</parameter>
>         <parameter name="Transfer-Encoding"
> locked="false">chunked</parameter>
>     </transportSender>
>
>     <!-- =================================================
> -->
>     <!-- Phases  -->
>     <!-- =================================================
> -->
>     <phaseOrder type="inflow">
>         <!--  System pre defined phases       -->
>          <phase name="Transport">
>             <!--<handler
> name="RequestURIBasedDispatcher"-->
>                      <!--class="
> org.apache.axis2.engine.RequestURIBasedDispatcher">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>             <!--<handler
> name="SOAPActionBasedDispatcher"-->
>
> <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>         </phase>
>         <phase name="Security"/>
>         <phase name="PreDispatch"/>
>         <phase name="Dispatch"
> class="org.apache.axis2.engine.DispatchPhase ">
>             <handler name="SoapDispatcher"
>
> class="com.myco.framework.service.SoapDispatcher">
>                 <order phase="Dispatch"/>
>              </handler>
>
>             <!--<handler
> name="AddressingBasedDispatcher"-->
>
> <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>
>             <!--<handler
> name="SOAPMessageBodyBasedDispatcher"-->
>                      <!--class="
> org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>
>             <handler name="InstanceDispatcher"
>
> class="org.apache.axis2.engine.InstanceDispatcher">
>                 <order phase="PostDispatch"/>
>             </handler>
>         </phase>
>         <!--  System pre defined phases       -->
>         <!--   After Postdispatch phase module author or or service author
> can add any phase he want      -->
>         <phase name="OperationInPhase"/>
>     </phaseOrder>
>     <phaseOrder type="outflow">
>         <!--      user can add his own phases to this area  -->
>         <phase name="OperationOutPhase"/>
>         <!--system predefined phase-->
>         <!--these phase will run irrespective of the service-->
>         <phase name="PolicyDetermination"/>
>         <phase name="MessageOut"/>
>     </phaseOrder>
>     <phaseOrder type="INfaultflow">
>         <phase name="PreDispatch"/>
>         <phase name="Dispatch"
> class="org.apache.axis2.engine.DispatchPhase">
>
>             <handler name="SoapDispatcher"
>
> class="com.myco.framework.service.SoapDispatcher ">
>                 <order phase="Dispatch"/>
>             </handler>
>
>             <!--<handler
> name="RequestURIBasedDispatcher"-->
>                      <!--class="
> org.apache.axis2.engine.RequestURIBasedDispatcher">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>
>             <!--<handler
> name="SOAPActionBasedDispatcher"-->
>
> <!--class="org.apache.axis2.engine.SOAPActionBasedDispatcher">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>
>             <!--<handler
> name="AddressingBasedDispatcher"-->
>
> <!--class="org.apache.axis2.engine.AddressingBasedDispatcher">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>
>             <!--<handler
> name="SOAPMessageBodyBasedDispatcher"-->
>
> <!--class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher
> ">-->
>                 <!--<order phase="Dispatch"/>-->
>             <!--</handler>-->
>             <handler name="InstanceDispatcher"
>                      class="
> org.apache.axis2.engine.InstanceDispatcher">
>                 <order phase="PostDispatch"/>
>             </handler>
>         </phase>
>         <!--      user can add his own phases to this area  -->
>         <phase name="OperationInFaultPhase"/>
>     </phaseOrder>
>     <phaseOrder type="Outfaultflow">
>         <!--      user can add his own phases to this area  -->
>         <phase name="OperationOutFaultPhase"/>
>         <phase name="PolicyDetermination"/>
>         <phase name="MessageOut"/>
>     </phaseOrder>
> </axisconfig>
>
> ==========
>
> //SoapMessageReceiver.java
>
> package com.myco.framework.service;
>
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.Constants;
> import org.apache.axis2.engine.MessageReceiver ;
>
> /**
>  * This message receiver should be configured in the Axis2 configuration as
> the
>  * default message receiver, which will handle all incoming messages through
> the
>  * synapse mediation
>  */
> public class SoapMessageReceiver implements MessageReceiver {
>
>     public void
> receive(org.apache.axis2.context.MessageContext mc) throws
> AxisFault {
>
>         System.out.println("##### Soap Message Receiver received a new
> message...");
>         System.out.println ("Received To: " + (mc.getTo() != null ?
>             mc.getTo().getAddress() : "null"));
>         System.out.println("SOAPAction: " + (mc.getWSAAction() != null ?
>             mc.getWSAAction () : "null"));
>         System.out.println("Body : \n" + mc.getEnvelope());
>     }
> }
>
> =======
> services.xml
>
>   <service name="synapse">
>
>     <operation name="mediate" >
>           <messageReceiver
> class="com.myco.framework.service.SoapMessageReceiver" />
>     </operation>
>
>   </service>
>
> ====
>
>
>


-- 
Paul Fremantle
VP/Technology, WSO2 and OASIS WS-RX TC Co-chair

http://bloglines.com/blog/paulfremantle
paul@wso2.com

"Oxygenating the Web Service Platform", www.wso2.com

---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org