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]
