Hi,
I am pretty new to servicemix. I have a SA deployed on the lw-container
which is exactly similar to the loan-broker example. I need a way to call a
web-service outside the servicemix container. The above example seems to
create a consumer and an invoker. In my case the invoker would be a service
unit belonging to the SA deployed on the lw-container. 

Heres the flow i would like to have:
ActiveMQ jms->service unit->webservice
invoker->werservice-provider->external-service.

thanks.


gnodet wrote:
> 
> Nice post, this is worth a wiki page -- whenever you want ;)
> 
> I have a few remarks:
>   * The provider endpoints are not used in this example as the eip routers
> redirect to the saaj bindings
>     you can use them instead of the saaj bindings by switching the
>      <eip:exchange-target service="myns:targetForAxis" /> on the eip
> routers
> to
>      <eip:exchange-target service="ns1:AxisWebservice" />
>   * On the consumer definitions, the targetInterfaceName is not needed and
> will not be used as the
>     targetServiceName is specified
>   * On the http providers endpoint, the targetService is not used (this is
> only for consumers)
> 
> Cheers,
> Guillaume Nodet
> 
> On 7/20/06, Alessio D'Innocenti <[EMAIL PROTECTED]> wrote:
>>
>> After many, many, too many attempts, finally I have understood how to
>> expose external webservice, that is how to proxy one or more webservices
>> (wsdl included).
>> (servicemix.xml file is attached)
>>
>> Suppose I have two webservice to proxy at urls
>> http://pc-webservice:8080/axis/services/AxisWebservice
>> http://pc-webservice2:8080/xfire/services/XFireWebservice
>>
>> 1) I have to connect the wsdl and the remote webservices to the
>> endpoints (providers)
>>
>>                             <http:endpoint service="ns1:AxisWebservice"
>>                                 endpoint="axisWebserviceEP"
>> targetService="ns1:AxisWebservice"
>>                                 role="provider"
>>
>> locationURI="http://pc-webservice:8080/axis/services/AxisWebservice";
>>
>> wsdlResource="http://pc-webservice:8080/axis/services/AxisWebservice?wsdl";
>> />
>>                             <http:endpoint service="ns2:XFireWebservice"
>>                                 endpoint="xfireWebserviceEP"
>> targetService="ns2:XFireWebservice"
>>                                 role="provider"
>>
>> locationURI="http://pc-webservice2:8080/xfire/services/XFireWebservice";
>>
>> wsdlResource="
>> http://pc-webservice2:8080/xfire/services/XFireWebservice?wsdl";
>> />
>>
>> 1) I have to make a connector for riceiving requests form clients
>> (consumers). I used http-component to make this:
>>
>>                            <http:endpoint
>>                                 service="ns1:AxisWebservice"
>> endpoint="axisWebserviceEP"
>>                                 targetService="myns:routerForAxis"
>> role="consumer" soap="true"
>>
>> targetInterfaceName="ns1:AxisWebservicePortType"
>>
>> locationURI="http://localhost:8080/services/AxisService/";
>>
>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"; />
>>                             <http:endpoint service="ns2:XFireWebservice"
>>                                 endpoint="xfireWebserviceEP"
>> targetService="myns:routerForXFire"
>>                                 role="consumer" soap="true"
>>
>>                                
>> targetInterfaceName="ns1:XFireWebserviceSEI"
>>
>> locationURI="http://172.30.10.183:8888/services/XFireService/";
>>
>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"; />
>>
>> 3) I have to create an invoker for the webservice
>>
>>         <sm:activationSpec componentName="axisServiceComponent"
>>                 service="myns:targetForAxis" endpoint="axisService">
>>                 <sm:component>
>>                     <bean
>> class="org.apache.servicemix.components.saaj.SaajBinding">
>>                         <property name="soapAction" value="" />
>>                         <property name="soapEndpoint">
>>                             <bean
>> class="javax.xml.messaging.URLEndpoint">
>>                                 <constructor-arg
>> value="http://pc-webservice:8080/axis/services/AxisWebservice"; />
>>                             </bean>
>>                         </property>
>>                     </bean>
>>                 </sm:component>
>>             </sm:activationSpec>
>>             <sm:activationSpec componentName="xfireServiceComponent"
>>                 service="myns:targetForXFire" endpoint="xfireService">
>>                 <sm:component>
>>                     <bean
>> class="org.apache.servicemix.components.saaj.SaajBinding">
>>                         <property name="soapAction" value="" />
>>                         <property name="soapEndpoint">
>>                             <bean
>> class="javax.xml.messaging.URLEndpoint">
>>                                 <constructor-arg
>> value="http://pc-webservice2:8080/xfire/services/XFireWebservice"; />
>>                             </bean>
>>                         </property>
>>                     </bean>
>>                 </sm:component>
>>             </sm:activationSpec>
>>
>> 4)  Now let's create a service for redirecting the request, for example
>> the wireTrap router.
>>
>>             <sm:activationSpec componentName="wireTrapAxis">
>>                 <sm:component>
>>                     <eip:component>
>>                         <eip:endpoints>
>>                             <eip:wire-tap endpoint="wireTrapAxisEndpoint"
>>                                 service="myns:axisWireTrap">
>>                                 <eip:target>
>>                                     <eip:exchange-target
>>                                         service="myns:targetForAxis" />
>>                                 </eip:target>
>>                                 <eip:outListener>
>>                                     <eip:exchange-target
>>                                         service="myns:trace" />
>>                                 </eip:outListener>
>>                             </eip:wire-tap>
>>                         </eip:endpoints>
>>                     </eip:component>
>>                 </sm:component>
>>             </sm:activationSpec>
>>             <sm:activationSpec componentName="wireTrapXFire">
>>                 <sm:component>
>>                     <eip:component>
>>                         <eip:endpoints>
>>                             <eip:wire-tap
>> endpoint="wireTrapXFireEndpoint"
>>                                 service="myns:xfireWireTrap">
>>                                 <eip:target>
>>                                     <eip:exchange-target
>>                                         service="myns:targetForXFire" />
>>                                 </eip:target>
>>                                 <eip:outListener>
>>                                     <eip:exchange-target
>>                                         service="myns:trace" />
>>                                 </eip:outListener>
>>                             </eip:wire-tap>
>>                         </eip:endpoints>
>>                     </eip:component>
>>                 </sm:component>
>>             </sm:activationSpec>
>>
>> The myns:trace service is simply a logger components that log messages
>>
>> 5) The chain is finished now we have the two external webservices
>> exposed at urls
>>       http://localhost:8080/services/AxisService/
>>       http://localhost:8080/services/XFireService/
>>
>>      and their wsdl
>>
>>       http://localhost:8080/services/AxisService?wsdl
>>       http://localhost:8080/services/XFireService?wsdl
>>
>> 6) complete listing of servicemix.xml and some explanation
>>
>> <!-- Namespaces of the webservices wsdl must match the local namespaces
>> of the servicemix local services.
>>     Take a look at the ns1 and ns2 namespaces.
>>     You can retrieve this namespaces from the first line of the wsdl
>> document
>>     as attribute of the root tag definitions.
>>     <definitions name="AxisWebservice"
>> targetNamespace="http://axis.webservice.namespace";>
>>
>>     The myns namespace is a user choosen namespace for dividing external
>> service from servicemix internal services
>> -->
>>
>> <beans xmlns:sm="http://servicemix.apache.org/config/1.0";
>>     xmlns:eip="http://servicemix.apache.org/eip/1.0";
>>     xmlns:http="http://servicemix.apache.org/http/1.0";
>>     xmlns:ns1="http://axis.webservice.namespace";
>>     xmlns:ns2="http://xfire.webservice.namespace";
>>     xmlns:myns="http://myNameSpace/servicemix/1.0";>
>>
>>     <!-- the JBI container -->
>>     <sm:container id="jbi" useMBeanServer="true"
>>         createMBeanServer="true" dumpStats="true" statsInterval="10">
>>         <sm:activationSpecs>
>>             <sm:activationSpec componentName="provider">
>>                 <sm:component>
>>                     <http:component>
>>                         <http:endpoints>
>>                             <!-- REMEBER: Namespaces of the webservices
>> wsdl must match the local
>>                                 namespaces of the servicemix local
>> services.
>>                                 You can retrieve this namespace from the
>> first line of the wsdl document
>>                                 as attribute of the root tag definitions.
>>                                 <definitions name="AxisWebservice"
>> targetNamespace="http://axis.webservice.namespace";>
>>
>>                                 The name of the local servicemix service
>> and targetService
>>                                 (service="ns1:AxisWebservice"
>> targetService="ns1:AxisWebservice")
>>                                 must match the name of the webservice.
>> This information is in the wsdl too, as
>>                                 attribute of tag <service
>> name="AxisWebservice"> (at the end of wsdl)
>>
>>                                 The endpoint name
>> (endpoint="axisWebserviceEP") is a your choice.
>>
>>                                 The role must be provider
>> (role="provider")
>>
>>                                 The wsdlResource must point to the wsdl
>> definition
>>
>> (wsdlResource="http://pc-webservice:8080/axis/services/AxisWebservice?wsdl
>> ")
>>
>>                                 The locationURI is the address where the
>> webservice is listening.
>>
>> (locationURI="http://pc-webservice:8080/axis/services/AxisWebservice";)
>>                                 Also this can be retrieved from wsdl as
>> attribute of tag
>>                                 <wsdlsoap:address
>> location="http://pc-webservice:8080/axis/services/AxisWebservice"/>
>>                                 at the end of wsdl
>>                             -->
>>                             <http:endpoint service="ns1:AxisWebservice"
>>                                 endpoint="axisWebserviceEP"
>> targetService="ns1:AxisWebservice"
>>                                 role="provider"
>>
>> locationURI="http://pc-webservice:8080/axis/services/AxisWebservice";
>>
>> wsdlResource="http://pc-webservice:8080/axis/services/AxisWebservice?wsdl";
>> />
>>                             <http:endpoint service="ns2:XFireWebservice"
>>                                 endpoint="xfireWebserviceEP"
>> targetService="ns2:XFireWebservice"
>>                                 role="provider"
>>
>> locationURI="http://pc-webservice2:8080/xfire/services/XFireWebservice";
>>
>> wsdlResource="
>> http://pc-webservice2:8080/xfire/services/XFireWebservice?wsdl";
>> />
>>                         </http:endpoints>
>>                     </http:component>
>>                 </sm:component>
>>             </sm:activationSpec>
>>
>>             <sm:activationSpec componentName="consumer">
>>                 <sm:component>
>>                     <http:component>
>>                         <http:endpoints>
>>                             <!-- The name of the local servicemix
>> service and endpoint must match the linked provider http:endpoint
>>                                 (service="ns1:AxisWebservice"
>> endpoint="axisWebserviceEP")
>>
>>                                 The role must be consumer
>> (role="consumer")
>>
>>                                 The soap attribute must be true for
>> compliant wsdl (soap="true")
>>
>>                                 The locationURI is the address where
>> servicemix must expose the webservice.
>>
>> (locationURI="http://localhost:8080/services/AxisService/";)
>>
>>                                 The targetInterface name is the name of
>> the interface to expose.
>>                                 You can retrieve this from wsdl as
>> attribute of tag <portType name="AxisWebservicePortType">
>>                                 in the middle of wsdl.
>>
>>                                 The defaultMep attribute is for
>> specifying if the endpoint is for in-out (wait for response)
>>
>> (defaultMep="http://www.w3.org/2004/08/wsdl/in-out";)
>>
>>                                 The targetService is the servicemix
>> local service to forwarding received message
>>                                 (targetService="myns:routerForAxis")
>>                             -->
>>                             <http:endpoint service="ns1:AxisWebservice"
>>                                 endpoint="axisWebserviceEP"
>> targetService="myns:routerForAxis"
>>                                 role="consumer" soap="true"
>>
>> targetInterfaceName="ns1:AxisWebservicePortType"
>>
>> locationURI="http://localhost:8080/services/AxisService/";
>>
>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"; />
>>                             <http:endpoint service="ns2:XFireWebservice"
>>                                 endpoint="xfireWebserviceEP"
>> targetService="myns:routerForXFire"
>>                                 role="consumer" soap="true"
>>
>>                                
>> targetInterfaceName="ns1:XFireWebserviceSEI"
>>
>> locationURI="http://172.30.10.183:8888/services/XFireService/";
>>
>> defaultMep="http://www.w3.org/2004/08/wsdl/in-out"; />
>>                         </http:endpoints>
>>                     </http:component>
>>                 </sm:component>
>>             </sm:activationSpec>
>>
>>             <!-- This component invokes the remote service.
>>                 The soapAction property is the default soapAction.
>>                 Without this property set no SOAPAction header is addes
>> and some
>>                 webservices providers (like Axis) could not work -->
>>             <sm:activationSpec componentName="axisServiceComponent"
>>                 service="myns:targetForAxis" endpoint="axisService">
>>                 <sm:component>
>>                     <bean
>>
>> class="org.apache.servicemix.components.saaj.SaajBinding">
>>                         <property name="soapAction" value="" />
>>                         <property name="soapEndpoint">
>>                             <bean
>>                                 class="javax.xml.messaging.URLEndpoint">
>>                                 <constructor-arg
>>
>> value="http://pc-webservice:8080/axis/services/AxisWebservice"; />
>>                             </bean>
>>                         </property>
>>                     </bean>
>>                 </sm:component>
>>             </sm:activationSpec>
>>             <sm:activationSpec componentName="xfireServiceComponent"
>>                 service="myns:targetForXFire" endpoint="xfireService">
>>                 <sm:component>
>>                     <bean
>>
>> class="org.apache.servicemix.components.saaj.SaajBinding">
>>                         <property name="soapAction" value="" />
>>                         <property name="soapEndpoint">
>>                             <bean
>>                                 class="javax.xml.messaging.URLEndpoint">
>>                                 <constructor-arg
>>
>> value="http://pc-webservice2:8080/xfire/services/XFireWebservice"; />
>>                             </bean>
>>                         </property>
>>                     </bean>
>>                 </sm:component>
>>             </sm:activationSpec>
>>
>>             <!-- This is a simple trace component to log messages routed
>> here -->
>>             <sm:activationSpec componentName="trace"
>>                 service="int:trace">
>>                 <sm:component>
>>                     <bean xmlns="http://xbean.org/schemas/spring/1.0";
>>
>> class="org.apache.servicemix.components.util.TraceComponent" />
>>                 </sm:component>
>>             </sm:activationSpec>
>>
>>             <!-- The routing services -->
>>             <sm:activationSpec componentName="wireTrapAxis">
>>                 <sm:component>
>>                     <eip:component>
>>                         <eip:endpoints>
>>                             <eip:wire-tap
>>                                 endpoint="wireTrapAxisEndpoint"
>> service="myns:routerForAxis">
>>                                 <eip:target>
>>                                     <eip:exchange-target
>>                                         service="myns:targetForAxis" />
>>                                 </eip:target>
>>                                 <eip:outListener>
>>                                     <eip:exchange-target
>>                                         service="myns:trace" />
>>                                 </eip:outListener>
>>                             </eip:wire-tap>
>>                         </eip:endpoints>
>>                     </eip:component>
>>                 </sm:component>
>>             </sm:activationSpec>
>>             <sm:activationSpec componentName="wireTrapXFire">
>>                 <sm:component>
>>                     <eip:component>
>>                         <eip:endpoints>
>>                             <eip:wire-tap
>>                                 endpoint="wireTrapXFireEndpoint"
>>                                 service="myns:routerForXFire">
>>                                 <eip:target>
>>                                     <eip:exchange-target
>>                                         service="myns:targetForXFire" />
>>                                 </eip:target>
>>                                 <eip:outListener>
>>                                     <eip:exchange-target
>>                                         service="myns:trace" />
>>                                 </eip:outListener>
>>                             </eip:wire-tap>
>>                         </eip:endpoints>
>>                     </eip:component>
>>                 </sm:component>
>>             </sm:activationSpec>
>>         </sm:activationSpecs>
>>     </sm:container>
>> </beans>
>>
>>
>>
>>
>>
>>
> 
> 

-- 
View this message in context: 
http://www.nabble.com/External-Webservices-binding-%28the-answer%29-tf1971463s12049.html#a7483343
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to