Important Considerations when Configuring Virtual Services
Handling Services with Multiple Ports and Bindings
Mediator implicitly assumes that there is a one-to-one mapping between a WSDL Service and a Virtual Service. A problem arises if a <service> element contains multiple <port> elements that point to different bindings (and consequently different port types) -- the problem is that Mediator creates a Virtual Service that has the operations from only one of the portTypes. Mediator chooses the first port available under <service> and exposes the operations corresponding to the equivalent binding/portType.
For example, consider the following WSDL fragment that shows the structure of the portType, binding and service elements in the WSDL. Note that there are:
Two distinct
<portType> elements:
SystemPortType and
CustomerPortType.
Two equivalent bindings defined for each
<portType>:
SystemBinding and
CustomerBinding.
A single
<service> element that defines the two ports with distinct endpoints (one for each binding available).
Example <portType> Elements
<portType name="SystemPortType">
<operation name="ping">
…
</operation>
</portType>
<portType name="CustomerPortType">
<operation name="getOperation1">
…
</operation>
<operation name="getOperation2">
…
</operation>
<operation name="getOperation3">
…
</operation>
<operation name="getOperation4">
…
</operation>
</portType>
Example <binding> Elements
<binding name="SystemBinding" type="tns:SystemPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="ping">
…
</operation>
</binding>
<binding name="CustomerBinding" type="tns:CustomerPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getOperation1">
…
</operation>
<operation name="getOperation2">
…
</operation>
<operation name="getOperation3">
…
</operation>
<operation name="getOperation4">
<soap:operation soapAction="urn:customer.service.cm.be/getOperation4"/>
…
</operation>
</binding>
Example <service> Element
<service name="CustomerRefService">
<port name="SystemPort" binding="tns:SystemBinding">
<soap:address location="http://.../v4/SystemPort"/>
</port>
<port name="CustomerPort" binding="tns:CustomerBinding">
<soap:address location="http://.../v4/CustomerRefPort"/>
</port>
</service>