I'm developing a binding component using the sericemix-common library
and taking inspiration (i.e. coping :-) )from the jsr181 component.
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?
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.
thank in advance
Raffaele
<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="http://vinci.test.iif.imolinfo.it" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://vinci.test.iif.imolinfo.it">
<wsdl:types>
<xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://vinci.test.iif.imolinfo.it">
<xsd:complexType name="VinciOutputBean">
<xsd:sequence>
<xsd:element minOccurs="0" name="binStrlen" nillable="true" type="xsd:int"/>
<xsd:element minOccurs="0" name="compStrlen" nillable="true" type="xsd:decimal"/>
<xsd:element minOccurs="0" name="inputString" nillable="true" type="xsd:string"/>
<xsd:element minOccurs="0" name="plusZonedStrlen" nillable="true" type="xsd:decimal"/>
<xsd:element minOccurs="0" name="signedZonedStrlen" nillable="true" type="xsd:decimal"/>
<xsd:element minOccurs="0" name="strlen" nillable="true" type="xsd:decimal"/>
<xsd:element minOccurs="0" name="zonedStrlen" nillable="true" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="vinciOperation">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="tns:VinciOutputBean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="vinciOperationResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="tns:VinciOutputBean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="vinciOperationRequest">
<wsdl:part element="tns:vinciOperation" name="parameters"/>
</wsdl:message>
<wsdl:message name="vinciOperationResponse">
<wsdl:part element="tns:vinciOperationResponse" name="parameters"/>
</wsdl:message>
<wsdl:portType name="VinciServicePortType">
<wsdl:operation name="vinciOperation">
<wsdl:input message="tns:vinciOperationRequest" name="vinciOperationRequest"/>
<wsdl:output message="tns:vinciOperationResponse" name="vinciOperationResponse"/>
</wsdl:operation>
</wsdl:portType>
<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>
</wsdl:service>
</wsdl:definitions>