I try this:
in <-> http(consumer) <---> http(provider) <-> out
by:
<beans
xmlns:sm="http://servicemix.apache.org/config/1.0"
xmlns:foo="http://ws.es"
xmlns:http="http://servicemix.apache.org/http/1.0"
>
<http:endpoint
defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
service="foo:HolaMundoService"
targetService="foo:HolaMundoService"
endpoint="WSAProvider"
role="provider"
locationURI="http://172.18.1.163:6080/webservices/services/HolaMundo"
wsdlResource="http://172.18.1.163:6080/webservices/services/HolaMundo?wsdl"
soap="true">
</http:endpoint>
<http:endpoint
defaultMep="http://www.w3.org/2004/08/wsdl/in-only"
service="foo:HolaMundoService"
endpoint="WSAConsumer"
role="consumer"
locationURI="http://localhost:8080/jlbarreraWS"
targetInterfaceName="foo:HolaMundo"
soap="true">
</http:endpoint>
</beans>
But when put "http://localhost:8080/jlbarreraWS" in a web browser i recived:
HTTP ERROR: 404
Unable to find requested resource
RequestURI=/jlbarreraWS/
¿?¿? How i can access to webservices throught the Servicemix??
Thanks!
Alessio D 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>
>
>
>
>
> <!-- 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#a8694310
Sent from the ServiceMix - User mailing list archive at Nabble.com.