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
> >
> >
> >

Reply via email to