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 <[EMAIL PROTECTED]> 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 < [EMAIL PROTECTED]> 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 <[EMAIL PROTECTED] > 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 < [EMAIL PROTECTED]> 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 < [EMAIL PROTECTED]> 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
> > > [EMAIL PROTECTED]
> > >
> > > "Oxygenating the Web Service Platform", www.wso2.com
> > >
> > >
---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
[EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> >
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED] For additional
commands, e-mail: [EMAIL PROTECTED]


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

http://bloglines.com/blog/paulfremantle
[EMAIL PROTECTED]

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

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to