Webservice protocol

Feature description

WebService-based remote invocation protocol, implemented based on frontend-simple and transports-http of Apache CXF. 2.3.0 and above are supported.

CXF is an open source RPC framework of Apache, which is merged from Xfire and Celtix.

  • Number of connections: multiple connections
  • Connection method: short connection
  • Transmission protocol: HTTP
  • Transmission method: synchronous transmission
  • Serialization: SOAP text serialization
  • Applicable scenarios: system integration, cross-language call

It can interoperate with native WebService services, namely:

  • The provider uses Dubbo’s WebService protocol to expose the service, and the consumer directly uses the standard WebService interface to call,
  • Or the provider uses the standard WebService to expose the service, and the consumer uses Dubbo’s WebService protocol to call.

Constraints

  • Parameters and return values need to implement Serializable interface
  • Parameters try to use basic types and POJO

scenes to be used

To publish a service (internal/external), regardless of client type or performance, it is recommended to use webservice. The server has determined to use webservice, the client cannot choose, and must use webservice.

How to use

Dependencies

Starting from Dubbo 3, the Webservice protocol is no longer embedded in Dubbo, and an independent module needs to be introduced separately.

<dependency>
    <groupId>org.apache.dubbo.extensions</groupId>
    <artifactId>dubbo-rpc-webservice</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-simple</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>2.6.1</version>
</dependency>

Configuration protocol

<dubbo:protocol name="webservice" port="8080" server="jetty" />

Configure the default protocol

<dubbo:provider protocol="webservice" />

Configure service protocol

<dubbo:service protocol="webservice" />

Multiport

<dubbo:protocol id="webservice1" name="webservice" port="8080" />
<dubbo:protocol id="webservice2" name="webservice" port="8081" />

direct connection

<dubbo:reference id="helloService" interface="HelloWorld" url="webservice://10.20.153.10:8080/com.foo.HelloWorld" />

###WSDL

http://10.20.153.10:8080/com.foo.HelloWorld?wsdl

Jetty Server (default)

<dubbo:protocol ... server="jetty" />
<dubbo:protocol ... server="servlet" />

Configure DispatcherServlet

<servlet>
         <servlet-name>dubbo</servlet-name>
         <servlet-class>org.apache.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>
         <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
         <servlet-name>dubbo</servlet-name>
         <url-pattern>/*</url-pattern>
</servlet-mapping>

If a servlet is used to dispatch the request

  • The protocol port <dubbo:protocol port="8080" /> must be the same as the port of the servlet container.
  • The context path of the protocol <dubbo:protocol contextpath="foo" /> must be the same as the context path of the servlet application.

Last modified January 2, 2023: Enhance en docs (#1798) (95a9f4f6c1)