I did as you said and it worked, thanks. There are still a couple of issue that I'd like to understand: 1. the SOAP-Http proxy service doesn't provide a wsdl. Do you think that could be possible to take the wsdl of the proxied service strip the jbi binding and put a SOAP-http binding? 2. I configured the routing using the xbean file: <http:endpoint service="im:VinciService" endpoint="imhttp:VinciService" role="consumer" locationURI="http://localhost:8192/Service/VinciService" defaultMep="http://www.w3.org/2004/08/wsdl/in-out" soap="true" /> I'd like to do the same using the standard connection definitions of the jbi deployment descriptor of the service assembly. Does it make sense and is it supported in serivicemix? <connection> <consumer endpoint-name="im:VinciServiceHttpPort" service-name="im:VinciService"> </consumer> <provider endpoint-name="im:VinciServiceJBIPort" service-name="im:VinciService"> </provider> </connection>
If I try to do it servicemix complains that it can't find the cosumer service (the proxy), I believe it does is because the proxy service doesn't register a wsdl, so back to the previous point. About the service-common library I found it useful but not much documented, it took me a couple of days of code reading to understand what it could do for me. Last thing I suggest to add to the maven-servicemix-plugin a couple of goal to help the deploy of install zip and service assemblies. supposing to have a directory structure that mirrors the service assembly, I did the following scripts that could be a start: <goal name="jbi:install" prereqs="jbi:jbi" description="install installer in deploy directory of esb"> <ant:echo>installing installer</ant:echo> <ant:delete file="${maven.jbi.esb.dir}/install/${maven.jbi.final.name}"/> <ant:copy file="${maven.build.dir}/${maven.jbi.final.name}" todir="${maven.jbi.esb.dir}/install" /> </goal> <goal name="jbi:deploy" prereqs="jbi:create-sa" description="deploy the serice assembies"> <ant:echo>deploying sa</ant:echo> <ant:delete file="${maven.jbi.esb.dir}/deploy/${jbi.assembly.name}.zip"/> <ant:copy file="${basedir}/target/${jbi.assembly.name}.zip" todir="${maven.jbi.esb.dir}/deploy" /> </goal> <goal name="jbi:create-sa" description="create the service assembly"> <j:set var="saname" value="${jbi.assembly.name}" /> <j:set var="keysaname" value="jbi.assembly.unitname.${saname}" /> <util:tokenize var="sus" delim=",">${context.getVariable(keysaname)}</util:tokenize> <ant:mkdir dir="${basedir}/target/jbi_sa_${saname}" /> <j:forEach var="su" items="${sus}"> <log:info>generate service unit zip file for ${su}</log:info> <ant:zip destfile="${basedir}/target/jbi_sa_${saname}/${su}.zip" basedir="${jbi.assembly.dir}/${jbi.assembly.name}/${su}"/> </j:forEach> <ant:zip destfile="${basedir}/target/${jbi.assembly.name}.zip"> <ant:zipfileset dir="${jbi.assembly.dir}/${jbi.assembly.name}/META-INF" prefix="META-INF"/> <ant:zipfileset dir="${basedir}/target/jbi_sa_${saname}" includes="*.zip"/> </ant:zip> </goal> bye Raffaele On Thu, 2006-03-09 at 12:22 +0100, Guillaume Nodet wrote: > See comments inline > > On 3/9/06, Raffaele Spazzoli <[EMAIL PROTECTED]> wrote: > > > > I'm developing a binding component using the sericemix-common library > > and taking inspiration (i.e. coping :-) )from the jsr181 component. > > > If you have concerns with the existing component (missing features, > bugs...), > please raise them. > > It works and when I generate the wsdl for my deployed service I obtain a > > jbi binding: > > > > <wsdl:binding name="VinciServiceJBIBinding" > > type="tns:VinciServicePortType"> > > <wsdlsoap:binding style="document" > > transport="http://java.sun.com/xml/ns/jbi/binding/service+engine"/> > > <wsdl:operation name="vinciOperation"> > > <wsdlsoap:operation soapAction=""/> > > <wsdl:input name="vinciOperationRequest"> > > <wsdlsoap:body use="literal"/> > > </wsdl:input> > > <wsdl:output name="vinciOperationResponse"> > > <wsdlsoap:body use="literal"/> > > </wsdl:output> > > </wsdl:operation> > > </wsdl:binding> > > <wsdl:service name="VinciService"> > > <wsdl:port binding="tns:VinciServiceJBIBinding" > > name="VinciServiceJBIPort"> > > <wsdlsoap:address > > location="jbi://{http://vinci.test.iif.imolinfo.it}VinciService"/> > > </wsdl:port> > > > > For what I understand (and is not much yet) of the jbi specification > > this is ok and means that my component is listening on the NMR message > > bus. Now I want to expose my service to external clients via SOAP > > binding (lets say SOAP over HTTP). > > I think this should be possible just configuring a SOAP endpoint to > > route the messages it receives to my jbi endpoint. I didn't find a > > standard way to do it. Is it possible and how? > > > The servicemix-http component can do this for you. > See soap-binding example in the distribution and the test cases for this > component. > You can deploy WSDL or simple xml describing the endpoints. > I hope we can provide some "automatic" way do create > a proxy endpoint on a binding component in the future. > > I was able to exposte my endpoint on a http trasport using the non > > standard jbi component provided by service mix adding this configuration > > to the servicemix.xml: > > > > <sm:activationSpec componentName="httpReceiver" > > > > service="foo:httpBinding" > > endpoint="httpReceiver" > > destinationService="im:VinciService"> > > <sm:component> > > <bean class="org.apache.servicemix.components.http.HttpConnector"> > > <property name="host" value="localhost"/> > > <property name="port" value="8912"/> > > </bean> > > </sm:component> > > </sm:activationSpec> > > > > The problem is that this work only if I send to this endpoint just the > > content of the SOAP body i.e. I must delete the Envelope and the Body > > from the message. Probably this is what the jbi bindig requires. > > > If you use the servicemix-http component, you will be able to configure > if you want to use soap or not. > Else you may want to try the HttpSoapConnector instead. > Note that there is no reason why the soap enveloppe should be sent > inside the NMR. Soap is a protocol and should be handled by the binding > component, not the service engine. The HttpConnector does not care about > soap > and so will send the whole content of the message in the http request (and > same thing > the other way), whereas the HttpSoapConnector will add/remove the soap > enveloppe. > > Cheers, > Guillaume Nodet > > thank in advance > > Raffaele > > > > > >