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]
