Customizing web services endpoints
We can use the ibm-ws-bnd.xml file to customize web services endpoints for server provider and client within the applications.
The ibm-ws-bnd.xml file must be in the /WEB-INF directory of a web-based web services application (WAR file), or in the /META-INF directory of a EJB-based web service application (JAR file). If the client is running in clientContainer, the ibm-ws-bnd.xml file must be in the /META-INF directory of the JAR file in the client EAR.
By configuring the ibm-ws-bnd.xml file, we can override the web services address configurations on both the service provider and consumer, export your web services using a specific URL in the applications deployed on Liberty, and import the web services from JAX-WS client applications.
For all available elements we can configure within the ibm-ws-bnd.xml file.
- Override web services bindings for service providers.
- Override the web services endpoint address. In the webservice-endpoint element, we can override the endpoint address of a web service endpoint identified by the port-component-name attribute. The address attribute specifies the relative path to the context root of the application.
<?xml version="1.0" encoding="UTF-8"?> <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd" version="1.0"> <!-- 0 to many endpoint descriptions --> <webservice-endpoint port-component-name="Hello" address="/hiService" /> </webservices-bnd>
- Override the context root for EJB based web services.
If the web service is an EJB-based web service and defined in an EJB application (JAR
archive), the default context root is the EJB jar name. However, we can override the default value using the context-root attribute of the http-publishing
element.
<?xml version="1.0" encoding="UTF-8"?> <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd" version="1.0"> <!-- optional http publishing module overrides --> <http-publishing context-root="/HiServer" /> </webservices-bnd>
Note: The context-root attribute takes effective only when the web service is an EJB based web service and defined in an EJB jar archive. If the web service is defined in a web application (WAR archive), no matter if it is an EJB based web service, the context-root attribute of the http-publishing element is ignored, and the context root will always be the context root of the web application.
- Override the web services endpoint address. In the webservice-endpoint element, we can override the endpoint address of a web service endpoint identified by the port-component-name attribute. The address attribute specifies the relative path to the context root of the application.
- Override web services bindings for client applications.
- Override the location of the WSDL document. In the service-ref element, we can override the WSDL location of a web service reference
within a web service client
application.
<?xml version="1.0" encoding="UTF-8"?> <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd" version="1.0"> <service-ref name="services/hello" wsdl-location="http://localhost:9080/HiServer/hiService?wsdl" /> </webservices-bnd>
The wsdl-location attribute specifies an absolute URI (either HTTP or file protocol), and it can also be an relative URI to the root of the client application. For example:
<?xml version="1.0" encoding="UTF-8"?> <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd" version="1.0"> <service-ref name="services/hello" wsdl-location="WEB-INF/wsdl/hiService.wsdl" /> </webservices-bnd>
- Override the Port Address. In the port element, we can override the address of a port within web service reference in a web service client.
<?xml version="1.0" encoding="UTF-8"?> <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd" version="1.0"> <service-ref name="services/hello" wsdl-location="WEB-INF/wsdl/hiService.wsdl"> <port name="HelloPort" namespace="http://server.ejb.hello.sample.jaxws.ws.ibm.com/" address="http://localhost:9080/HiServer/hiService" /> </service-ref> </webservices-bnd>
The address attribute of the port element specifies the absolute URI of a web service port. If the referenced web service only has one port, we can use the port-address attribute of the service-ref element. For example:
<webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd" version="1.0"> <service-ref name="services/hello" port-address="http://localhost:9080/HiServer/hiService" /> </webservices-bnd>
Note: If the port-address attribute of the service-ref element and the address attribute of the port element are both specified, the address attribute of the port element takes effect.
- Override the location of the WSDL document. In the service-ref element, we can override the WSDL location of a web service reference
within a web service client
application.