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 <[EMAIL PROTECTED]> 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 < [EMAIL PROTECTED]> 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 <[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]
>
>




--
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